You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2012/12/28 18:43:30 UTC

svn commit: r1426593 [3/16] - in /rave/branches/mongo: ./ rave-components/ rave-components/rave-commons/ rave-components/rave-commons/src/main/java/org/apache/rave/persistence/ rave-components/rave-core/ rave-components/rave-core/src/main/java/org/apac...

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java Fri Dec 28 17:43:23 2012
@@ -18,10 +18,10 @@
  */
 package org.apache.rave.portal.security.impl;
 
-import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.Widget;
-import org.apache.rave.portal.model.WidgetStatus;
+import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.repository.TagRepository;
 import org.apache.rave.portal.repository.WidgetRepository;
+import org.apache.rave.portal.security.util.AuthenticationUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,10 +36,12 @@ import java.util.List;
 public class DefaultWidgetPermissionEvaluator extends AbstractModelPermissionEvaluator<Widget>{
     private Logger log = LoggerFactory.getLogger(getClass());
     private WidgetRepository widgetRepository;
+    private TagRepository tagRepository;
 
     @Autowired
-    public DefaultWidgetPermissionEvaluator(WidgetRepository widgetRepository) {
+    public DefaultWidgetPermissionEvaluator(WidgetRepository widgetRepository, TagRepository tagRepository) {
         this.widgetRepository = widgetRepository;
+        this.tagRepository = tagRepository;
     }
 
     @Override
@@ -84,7 +86,7 @@ public class DefaultWidgetPermissionEval
         if (targetId instanceof RaveSecurityContext) {
             hasPermission = verifyRaveSecurityContext(authentication, (RaveSecurityContext) targetId);
         } else {
-            hasPermission = hasPermission(authentication, widgetRepository.get((Long) targetId), permission, true);
+            hasPermission = hasPermission(authentication, widgetRepository.get(targetId.toString()), permission, true);
         }
         return hasPermission;
     }
@@ -107,11 +109,11 @@ public class DefaultWidgetPermissionEval
         switch (permission) {
             case ADMINISTER:
                 // if you are here, you are not an administrator, so you can't administer Widget
-                break;          
+                break;
             case READ:
                 // users can read any widget which they are the owner of, or any widget that is published
                 hasPermission = isWidgetOwner(authentication, widget, trustedWidgetContainer, trustedDomainObject) ||
-                                isPublishedWidget(widget, trustedWidgetContainer, trustedDomainObject);                
+                                isPublishedWidget(widget, trustedWidgetContainer, trustedDomainObject);
                 break;
             case CREATE:
             case UPDATE:
@@ -129,7 +131,7 @@ public class DefaultWidgetPermissionEval
 
     // returns a trusted Widget object, either from the WidgetRepository, or the
     // cached container list
-    private Widget getTrustedWidget(long widgetId, List<Widget> trustedWidgetContainer) {
+    private Widget getTrustedWidget(String widgetId, List<Widget> trustedWidgetContainer) {
         Widget widget;
         if (trustedWidgetContainer.isEmpty()) {
             widget = widgetRepository.get(widgetId);
@@ -144,7 +146,7 @@ public class DefaultWidgetPermissionEval
     // if trustedDomainObject is false, pull the entity from the database first to ensure
     // the model object is trusted and hasn't been modified
     private boolean isWidgetOwner(Authentication authentication, Widget widget, List<Widget> trustedWidgetContainer, boolean trustedDomainObject) {
-        if (widget.getOwner() == null) {
+        if (widget.getOwnerId() == null) {
             return false;
         }
         Widget trustedWidget;
@@ -153,17 +155,17 @@ public class DefaultWidgetPermissionEval
         } else {
             trustedWidget = getTrustedWidget(widget.getId(), trustedWidgetContainer);
         }
-        return isWidgetOwnerByUsername(authentication, trustedWidget.getOwner().getUsername());
+        return isWidgetOwnerById(authentication, trustedWidget.getOwnerId());
     }
 
     private boolean isWidgetOwnerByUsername(Authentication authentication, String username) {
         return ((User)authentication.getPrincipal()).getUsername().equals(username);
     }
 
-    private boolean isWidgetOwnerById(Authentication authentication, Long userId) {
+    private boolean isWidgetOwnerById(Authentication authentication, String userId) {
         return ((User)authentication.getPrincipal()).getId().equals(userId);
     }
-    
+
     private boolean isPublishedWidget(Widget widget, List<Widget> trustedWidgetContainer, boolean trustedDomainObject) {
         Widget trustedWidget;
         if (trustedDomainObject) {
@@ -172,7 +174,7 @@ public class DefaultWidgetPermissionEval
             trustedWidget = getTrustedWidget(widget.getId(), trustedWidgetContainer);
         }
         return WidgetStatus.PUBLISHED.equals(trustedWidget.getWidgetStatus());
-    }    
+    }
 
     private boolean verifyRaveSecurityContext(Authentication authentication, RaveSecurityContext raveSecurityContext) {
         Class<?> clazz;
@@ -184,9 +186,10 @@ public class DefaultWidgetPermissionEval
 
         // perform the permissions check based on the class supplied to the RaveSecurityContext object
         if (User.class == clazz) {
-            return isWidgetOwnerById(authentication, (Long) raveSecurityContext.getId());
+            return isWidgetOwnerById(authentication, (String) raveSecurityContext.getId());
         } else {
             throw new IllegalArgumentException("unknown RaveSecurityContext type: " + raveSecurityContext.getType());
         }
     }
+
 }
\ No newline at end of file

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetRatingPermissionEvaluator.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetRatingPermissionEvaluator.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetRatingPermissionEvaluator.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetRatingPermissionEvaluator.java Fri Dec 28 17:43:23 2012
@@ -20,7 +20,7 @@ package org.apache.rave.portal.security.
 
 import org.apache.rave.portal.model.User;
 import org.apache.rave.portal.model.WidgetRating;
-import org.apache.rave.portal.repository.WidgetRatingRepository;
+import org.apache.rave.portal.repository.WidgetRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,11 +34,11 @@ import java.util.List;
 @Component
 public class DefaultWidgetRatingPermissionEvaluator extends AbstractModelPermissionEvaluator<WidgetRating> {
     private Logger log = LoggerFactory.getLogger(getClass());
-    private WidgetRatingRepository widgetRatingRepository;
+    private WidgetRepository widgetRepository;
 
     @Autowired
-    public DefaultWidgetRatingPermissionEvaluator(WidgetRatingRepository widgetRatingRepository) {
-        this.widgetRatingRepository = widgetRatingRepository;
+    public DefaultWidgetRatingPermissionEvaluator(WidgetRepository widgetRepository) {
+        this.widgetRepository = widgetRepository;
     }
 
     @Override
@@ -83,7 +83,7 @@ public class DefaultWidgetRatingPermissi
         if (targetId instanceof RaveSecurityContext) {
             hasPermission = verifyRaveSecurityContext(authentication, (RaveSecurityContext) targetId);
         } else {
-            hasPermission = hasPermission(authentication, widgetRatingRepository.get((Long) targetId), permission, true);
+            hasPermission = hasPermission(authentication, widgetRepository.getRatingById(null, (String) targetId), permission, true);
         }
         return hasPermission;
     }
@@ -127,10 +127,10 @@ public class DefaultWidgetRatingPermissi
 
     // returns a trusted WidgetRating object, either from the WidgetRatingRepository, or the
     // cached container list
-    private WidgetRating getTrustedWidgetRating(long widgetRatingId, List<WidgetRating> trustedWidgetRatingContainer) {
+    private WidgetRating getTrustedWidgetRating(String widgetRatingId, List<WidgetRating> trustedWidgetRatingContainer) {
         WidgetRating widgetRating = null;
         if (trustedWidgetRatingContainer.isEmpty()) {
-            widgetRating = widgetRatingRepository.get(widgetRatingId);
+            widgetRating = widgetRepository.getRatingById(null, widgetRatingId);
             trustedWidgetRatingContainer.add(widgetRating);
         } else {
             widgetRating = trustedWidgetRatingContainer.get(0);
@@ -155,7 +155,7 @@ public class DefaultWidgetRatingPermissi
         return ((User)authentication.getPrincipal()).getUsername().equals(username);
     }
 
-    private boolean isWidgetRatingOwnerById(Authentication authentication, Long userId) {
+    private boolean isWidgetRatingOwnerById(Authentication authentication, String userId) {
         return ((User)authentication.getPrincipal()).getId().equals(userId);
     }
 
@@ -169,7 +169,7 @@ public class DefaultWidgetRatingPermissi
 
         // perform the permissions check based on the class supplied to the RaveSecurityContext object
         if (User.class == clazz) {
-            return isWidgetRatingOwnerById(authentication, (Long) raveSecurityContext.getId());
+            return isWidgetRatingOwnerById(authentication, (String) raveSecurityContext.getId());
         } else {
             throw new IllegalArgumentException("unknown RaveSecurityContext type: " + raveSecurityContext.getType());
         }

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/AuthorityService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/AuthorityService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/AuthorityService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/AuthorityService.java Fri Dec 28 17:43:23 2012
@@ -25,10 +25,10 @@ import org.apache.rave.portal.model.util
 public interface AuthorityService {
 
     /**
-     * @param entityId unique identifier of the {@link org.apache.rave.portal.model.Authority}
+     * @param id unique identifier of the {@link org.apache.rave.portal.model.Authority}
      * @return Authority if it can be found, otherwise {@literal null}
      */
-    Authority getAuthorityById(long entityId);
+    Authority getAuthorityById(String id);
 
     /**
      * @param authorityName name of the authority, can be a role (ROLE_USER)

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/CategoryService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/CategoryService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/CategoryService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/CategoryService.java Fri Dec 28 17:43:23 2012
@@ -30,11 +30,11 @@ import java.util.List;
 public interface CategoryService {
 
     /**
-     * @param entityId unique identifier of the {@link org.apache.rave.portal.model.Category}
+     * @param id unique identifier of the {@link org.apache.rave.portal.model.Category}
      * @return Category if it can be found, otherwise {@literal null}
      */
     @PostAuthorize("returnObject == null or hasPermission(returnObject, 'read')")
-    Category get(long entityId);
+    Category get(String id);
 
     /**
      * @return a {@link java.util.List} with all {@link org.apache.rave.portal.model.Category}'s
@@ -60,7 +60,7 @@ public interface CategoryService {
      * @return the updated Category object
      */
     @PreAuthorize("hasPermission(#categoryId, 'org.apache.rave.portal.model.Category', 'update')")
-    Category update(long categoryId, String text, User lastModifiedUser);
+    Category update(String categoryId, String text, User lastModifiedUser);
 
     /**
      * Deletes a Category

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java Fri Dec 28 17:43:23 2012
@@ -35,7 +35,7 @@ public interface PageService {
      * @return the Page object 
      */
     @PostAuthorize("hasPermission(returnObject, 'read')")
-    Page getPage(long pageId);
+    Page getPage(String pageId);
     
     /**
      * Gets all user pages for the given user.
@@ -44,7 +44,7 @@ public interface PageService {
      * @return A non null possible empty list of pages for the given user.
      */   
     @PreAuthorize("hasPermission(new org.apache.rave.portal.security.impl.RaveSecurityContext(#userId, 'org.apache.rave.portal.model.User'), 'org.apache.rave.portal.model.Page', 'read')") 
-    List<Page> getAllUserPages(long userId);
+    List<Page> getAllUserPages(String userId);
     
     /**
      * Gets the profile page for the given user.
@@ -53,7 +53,7 @@ public interface PageService {
      * @return The profile page
      */
     @PostAuthorize("hasPermission(returnObject, 'read')")
-    Page getPersonProfilePage(long userId);
+    Page getPersonProfilePage(String userId);
 
     /**
      * Return the page object from a list of pages given the pageId
@@ -62,7 +62,7 @@ public interface PageService {
      * @param pages a list of pages to search in
      * @return the Page object representing the pageId, or null if not found
      */
-    Page getPageFromList(long pageId, List<Page> pages);
+    Page getPageFromList(String pageId, List<Page> pages);
     
     /**
      * Given a List of Page objects, return the default one
@@ -91,7 +91,7 @@ public interface PageService {
      * @return the new default Page object for the user
      */        
     @PreAuthorize("hasPermission(new org.apache.rave.portal.security.impl.RaveSecurityContext(#userId, 'org.apache.rave.portal.model.User'), 'org.apache.rave.portal.model.Page', 'create')")         
-    Page addNewDefaultUserPage(long userId);
+    Page addNewDefaultUserPage(String userId);
 
     /**
      * Creates a new sub page with the supplied pageName and pageLayoutCode for the parentPage
@@ -117,7 +117,7 @@ public interface PageService {
      * @param pageId the pageId to delete
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'delete')") 
-    void deletePage(long pageId);
+    void deletePage(String pageId);
 
     /**
      * Deletes all pages of the supplied pageType for the userId
@@ -126,7 +126,7 @@ public interface PageService {
      * @param pageType
      */
     @PreAuthorize("hasPermission(new org.apache.rave.portal.security.impl.RaveSecurityContext(#userId, 'org.apache.rave.portal.model.User'), 'org.apache.rave.portal.model.Page', 'delete')")
-    int deletePages(long userId, PageType pageType);
+    int deletePages(String userId, PageType pageType);
     
     /**
      * Moves a Region widget's position in a region or across regions
@@ -140,7 +140,7 @@ public interface PageService {
     @PreAuthorize("hasPermission(#regionWidgetId, 'org.apache.rave.portal.model.RegionWidget', 'update') and " +
                   "hasPermission(#toRegionId, 'org.apache.rave.portal.model.Region', 'update') and " +
                   "hasPermission(#fromRegionId, 'org.apache.rave.portal.model.Region', 'update')")
-    RegionWidget moveRegionWidget(long regionWidgetId, int newPosition, long toRegionId, long fromRegionId);
+    RegionWidget moveRegionWidget(String regionWidgetId, int newPosition, String toRegionId, String fromRegionId);
 
     /**
      * Moves a RegionWidget from one page to another
@@ -151,7 +151,7 @@ public interface PageService {
      */
     @PreAuthorize("hasPermission(#regionWidgetId, 'org.apache.rave.portal.model.RegionWidget', 'update') and " +
                   "hasPermission(#toPageId, 'org.apache.rave.portal.model.Page', 'update')")
-    RegionWidget moveRegionWidgetToPage(long regionWidgetId, long toPageId);    
+    RegionWidget moveRegionWidgetToPage(String regionWidgetId, String toPageId);
     
     /**
      * Creates a new instance of a widget and adds it to the first position of the first region on the page
@@ -161,7 +161,17 @@ public interface PageService {
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'update') and " +
                   "hasPermission(#widgetId, 'org.apache.rave.portal.model.Widget', 'read')") 
-    RegionWidget addWidgetToPage(long pageId, long widgetId);
+    RegionWidget addWidgetToPage(String pageId, String widgetId);
+    
+    /**
+     * Creates a new instance of a widget and adds it to the first position of the identified region on the page
+     * @param pageId the id of the page to add the widget to
+     * @param widgetId the {@link org.apache.rave.portal.model.Widget} id to add
+     * @return a valid widget instance
+     */
+    @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'update') and " +
+                  "hasPermission(#widgetId, 'org.apache.rave.portal.model.Widget', 'read')") 
+    RegionWidget addWidgetToPageRegion(String pageId, String widgetId, String regionId);
 
     /**
      * Deletes the specified widget from the page.
@@ -170,7 +180,7 @@ public interface PageService {
      * @return the region from which the widget was deleted
      */
     @PreAuthorize("hasPermission(#regionWidgetId, 'org.apache.rave.portal.model.RegionWidget', 'delete')")
-    Region removeWidgetFromPage(long regionWidgetId);
+    Region removeWidgetFromPage(String regionWidgetId);
 
     /**
      * Updates the page properties.
@@ -180,7 +190,7 @@ public interface PageService {
      * @param pageLayoutCode the new layout for the page
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'update')") 
-    Page updatePage(long pageId, String name, String pageLayoutCode);
+    Page updatePage(String pageId, String name, String pageLayoutCode);
     
     /**
      * Moves a page to be rendered after another page in order for a user
@@ -192,7 +202,7 @@ public interface PageService {
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'read') and " +
                   "hasPermission(#moveAfterPageId, 'org.apache.rave.portal.model.Page', 'read')")
-    Page movePage(long pageId, long moveAfterPageId);
+    Page movePage(String pageId, String moveAfterPageId);
     
     /**
      * Moves a page to be rendered as the first page for a user
@@ -201,7 +211,17 @@ public interface PageService {
      * @return the updated Page object containing its new render sequence
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'read')") 
-    Page movePageToDefault(long pageId);
+    Page movePageToDefault(String pageId);
+
+    /**
+     * Clone the page and then share it with another user (Page is detached from original)
+     * @param pageId - the id of the page in question
+     * @param userId - the userid to add
+     * @param pageName = name of the page
+     * @return true or false whether the user was added
+     */
+    @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'update')")
+    Boolean clonePageForUser(String pageId, String userId, String pageName);
 
     /**
      * Add another user to share this page with
@@ -210,8 +230,8 @@ public interface PageService {
      * @return true or false whether the user was added
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'update')")
-    Boolean addMemberToPage(long pageId, long userId);
-    
+    Boolean addMemberToPage(String pageId, String userId);
+
     /**
      * Remove an existing user from the page share
      * @param pageId - the id of the page in question
@@ -221,7 +241,7 @@ public interface PageService {
      * unless they are set as an 'editor' of the page, which means 'update' access. 
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'read')")
-    Boolean removeMemberFromPage(long pageId, long userId);
+    Boolean removeMemberFromPage(String pageId, String userId);
 
     /**
      * Allows a user to accept or decline a page share
@@ -230,7 +250,7 @@ public interface PageService {
      * @return
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'read')")
-    Boolean updateSharedPageStatus(long pageId, String shareStatus);
+    Boolean updateSharedPageStatus(String pageId, String shareStatus);
 
     /**
      * Update a user who has shared access to a given page, so that they can edit the page (true)
@@ -241,6 +261,6 @@ public interface PageService {
      * @return
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.portal.model.Page', 'update')")
-    Boolean updatePageEditingStatus(long pageId, long userId, boolean isEditor);
+    Boolean updatePageEditingStatus(String pageId, String userId, boolean isEditor);
 
 }
\ No newline at end of file

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/RegionWidgetService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/RegionWidgetService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/RegionWidgetService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/RegionWidgetService.java Fri Dec 28 17:43:23 2012
@@ -34,7 +34,7 @@ public interface RegionWidgetService {
      * @return The RegionWidget or null if not found.
      */
     @PostAuthorize("hasPermission(returnObject, 'read')")
-    RegionWidget getRegionWidget(long regionWidgetId);
+    RegionWidget getRegionWidget(String regionWidgetId);
 
     /**
      * Saves the given RegionWidget and returns the updated instance.
@@ -53,7 +53,7 @@ public interface RegionWidgetService {
      * @return The updated RegionWidgetPreferences with all ID numbers populated.
      */
     @PreAuthorize("hasPermission(#regionWidgetId, 'org.apache.rave.portal.model.RegionWidget', 'update')")
-    List<RegionWidgetPreference> saveRegionWidgetPreferences(long regionWidgetId,
+    List<RegionWidgetPreference> saveRegionWidgetPreferences(String regionWidgetId,
                                                              List<RegionWidgetPreference> preferences);
 
     /**
@@ -65,7 +65,7 @@ public interface RegionWidgetService {
      * @return The updated RegionWidgetPreference with all ID numbers populated.
      */
     @PreAuthorize("hasPermission(#regionWidgetId, 'org.apache.rave.portal.model.RegionWidget', 'update')")
-    RegionWidgetPreference saveRegionWidgetPreference(long regionWidgetId, RegionWidgetPreference preference);
+    RegionWidgetPreference saveRegionWidgetPreference(String regionWidgetId, RegionWidgetPreference preference);
     
     /**
      * Saves the collapsed state of the given regionWidgetId
@@ -75,5 +75,5 @@ public interface RegionWidgetService {
      * @return The updated RegionWidget with the new collapsed value
      */
     @PreAuthorize("hasPermission(#regionWidgetId, 'org.apache.rave.portal.model.RegionWidget', 'update')")
-    RegionWidget saveRegionWidgetCollapsedState(long regionWidgetId, boolean collapsed);
+    RegionWidget saveRegionWidgetCollapsedState(String regionWidgetId, boolean collapsed);
 }

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/TagService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/TagService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/TagService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/TagService.java Fri Dec 28 17:43:23 2012
@@ -21,15 +21,16 @@ package org.apache.rave.portal.service;
 
 import org.apache.rave.portal.model.Tag;
 
+import javax.swing.text.html.parser.TagElement;
 import java.util.List;
 
 public interface TagService {
 
     /**
-     * @param entityId unique identifier of the {@link org.apache.rave.portal.model.Tag}
+     * @param id unique identifier of the {@link org.apache.rave.portal.model.Tag}
      * @return Tag if it can be found, otherwise {@literal null}
      */
-    Tag getTagById(long entityId);
+    Tag getTagById(String id);
 
 
     /**
@@ -48,6 +49,8 @@ public interface TagService {
      * @return a {@link org.apache.rave.portal.model.util.SearchResult} with all {@link org.apache.rave.portal.model.Tag}'s
      *         Not link to a widget
      */
-    List<Tag> getAvailableTagsByWidgetId(Long widgetId);
+    //List<Tag> getAvailableTagsByWidgetId(String widgetId);
+
+    Tag save(Tag tag);
 
 }

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/UserService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/UserService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/UserService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/UserService.java Fri Dec 28 17:43:23 2012
@@ -42,7 +42,7 @@ public interface UserService extends Use
      *
      * @param userId the unique id of the use
      */
-    void setAuthenticatedUser(long userId);
+    void setAuthenticatedUser(String userId);
 
     /**
      * Un-sets the currently authenticated user
@@ -70,7 +70,7 @@ public interface UserService extends Use
      * @param id the user ID
      * @return {@link org.apache.rave.portal.model.User} if one exists, otherwise {@literal null}
      */
-    User getUserById(Long id);
+    User getUserById(String id);
 
     /**
      * Return a user object by the user email.
@@ -111,7 +111,7 @@ public interface UserService extends Use
      *
      * @param userId {@link Long} id if the user
      */
-    void deleteUser(Long userId);
+    void deleteUser(String userId);
 
     /**
      * List of persons whom have added the supplied widget to one or more pages
@@ -119,7 +119,7 @@ public interface UserService extends Use
      * @param widgetId the entityId of the Widget to search
      * @return List of Person objects in alphabetical order sorted by familyname, givenname
      */
-    List<Person> getAllByAddedWidget(long widgetId);
+    List<Person> getAllByAddedWidget(String widgetId);
 
     /**
      * Sends an email which contains link for changing user password

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetMarketplaceService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetMarketplaceService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetMarketplaceService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetMarketplaceService.java Fri Dec 28 17:43:23 2012
@@ -77,7 +77,7 @@ public interface WidgetMarketplaceServic
      * @return
      * @throws Exception
      */
-    Widget getWidgetMetadata(String url, String type) throws Exception;
+    Widget resolveWidgetMetadata(String url, String type) throws Exception;
     
     /**
      * Gets the specified Widget

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java Fri Dec 28 17:43:23 2012
@@ -20,6 +20,9 @@
 package org.apache.rave.portal.service;
 
 import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.WidgetComment;
+import org.apache.rave.portal.model.WidgetRating;
+import org.apache.rave.portal.model.WidgetTag;
 import org.apache.rave.portal.model.util.SearchResult;
 import org.apache.rave.portal.model.util.WidgetStatistics;
 import org.springframework.security.access.prepost.PostAuthorize;
@@ -69,7 +72,7 @@ public interface WidgetService {
      * @return a valid widget if one exists for the given id; null otherwise
      */
     @PostAuthorize("returnObject == null or hasPermission(returnObject, 'read')")
-    Widget getWidget(long id);
+    Widget getWidget(String id);
 
     /**
      * Gets a {@link SearchResult} for {@link Widget}'s that are published
@@ -104,7 +107,7 @@ public interface WidgetService {
     SearchResult<Widget> getWidgetsBySearchCriteria(String searchTerm, String widgetType, String widgetStatus,
                                                     int offset, int pageSize);
 
-    SearchResult<Widget> getWidgetsByOwner(Long ownerId, int offset, int pageSize);
+    SearchResult<Widget> getWidgetsByOwner(String ownerId, int offset, int pageSize);
 
     /**
      * Gets a Widget by its (unique) url
@@ -139,7 +142,7 @@ public interface WidgetService {
      * @param userId id of the user
      * @return {@link WidgetStatistics} with the rating information
      */
-    WidgetStatistics getWidgetStatistics(long widgetId, long userId);
+    WidgetStatistics getWidgetStatistics(String widgetId, String userId);
 
     /**
      * Generates the mapping of widget statistics for the user.
@@ -147,7 +150,7 @@ public interface WidgetService {
      * @param userId id of the user
      * @return Mapping of {@link WidgetStatistics} objects keyed off of the widget's entityId
      */
-    Map<Long, WidgetStatistics> getAllWidgetStatistics(long userId);
+    Map<String, WidgetStatistics> getAllWidgetStatistics(String userId);
 
     /**
      * Updates {@link Widget}
@@ -175,6 +178,89 @@ public interface WidgetService {
      * @param pageSize   maximum number of items to be returned (for paging)
      * @return           SearchResult
      */
-    SearchResult<Widget> getWidgetsByCategory(long categoryId, int offset, int pageSize);
+    SearchResult<Widget> getWidgetsByCategory(String categoryId, int offset, int pageSize);
 
+    // ***************************************************************************************************************
+    // Widget Tag Methods
+    // ***************************************************************************************************************
+
+    WidgetTag getWidgetTag(String id);
+
+    WidgetTag getWidgetTagByWidgetIdAndKeyword(String widgetId, String keyword);
+
+    // No security check required as everyone is allowed to create a tag
+    WidgetTag createWidgetTag(String widgetId, WidgetTag widgetTag);
+
+    // ***************************************************************************************************************
+    // Widget Comment Methods
+    // ***************************************************************************************************************
+
+    @PostAuthorize("hasPermission(returnObject, 'read')")
+    WidgetComment getWidgetComment(String widgetId, String id);
+
+    // No security check required as everyone is allowed to create a comment
+    void createWidgetComment(String widgetId, WidgetComment widgetComment);
+
+    @PreAuthorize("hasPermission(#widgetComment, 'update')")
+    void updateWidgetComment(String widgetId, WidgetComment widgetComment);
+
+    @PreAuthorize("hasPermission(#commentId, 'org.apache.rave.portal.model.WidgetComment', 'delete')")
+    void removeWidgetComment(String widgetId, String commentId);
+
+    /**
+     * Deletes all Widget Comments for a userId
+     *
+     * @param userId
+     * @return number of comments deleted
+     */
+    @PreAuthorize("hasPermission(new org.apache.rave.portal.security.impl.RaveSecurityContext(#userId, 'org.apache.rave.portal.model.User'), 'org.apache.rave.portal.model.WidgetComment', 'delete')")
+    int deleteAllWidgetComments(String userId);
+
+    // ***************************************************************************************************************
+    // Widget Ratings Methods
+    // ***************************************************************************************************************
+
+    /**
+     * Gets a {@link org.apache.rave.portal.model.WidgetRating} for the widgetId and userId
+     *
+     * @param widgetId unique identifier for a Widget
+     * @param userId   unique identifier for a User
+     * @return WidgetRating or {@link null} if there is no such combination
+     */
+    WidgetRating getWidgetRatingByWidgetIdAndUserId(String widgetId, String userId);
+
+    /**
+     * Updates the score of a {@link org.apache.rave.portal.model.WidgetRating}
+     *
+     * @param widgetId Widget ID
+     * @param widgetRating WidgetRating
+     * @param score        value of the rating
+     */
+    @PreAuthorize("hasPermission(#widgetRating.entityId, 'org.apache.rave.portal.model.WidgetRating', 'update')")
+    void updateWidgetRatingScore(String widgetId, WidgetRating widgetRating, Integer score);
+
+    /**
+     * Saves a {@link org.apache.rave.portal.model.WidgetRating} for a widget
+     *
+     * @param rating   WidgetRating
+     */
+    void saveWidgetRating(String widgetId, WidgetRating rating);
+
+    /**
+     * Removes the rating of a widget
+     *
+     * @param widgetId unique identifier of a {@link org.apache.rave.portal.model.Widget}
+     * @param userId   unique identifier of a {@link org.apache.rave.portal.model.User}
+     */
+    @PreAuthorize("hasPermission(new org.apache.rave.portal.security.impl.RaveSecurityContext(#userId, 'org.apache.rave.portal.model.User'), 'org.apache.rave.portal.model.WidgetRating', 'delete')")
+    void removeWidgetRating(String widgetId, String userId);
+
+    /**
+     * Removes all widget ratings for a userId, for all widgets
+     *
+     * @param userId
+     * @return the number of widget ratings deleted
+     */
+    @PreAuthorize("hasPermission(new org.apache.rave.portal.security.impl.RaveSecurityContext(#userId, 'org.apache.rave.portal.model.User'), 'org.apache.rave.portal.model.WidgetRating', 'delete')")
+    int removeAllWidgetRatings(String userId);
 }

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultAuthorityService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultAuthorityService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultAuthorityService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultAuthorityService.java Fri Dec 28 17:43:23 2012
@@ -40,7 +40,7 @@ public class DefaultAuthorityService imp
     }
 
     @Override
-    public Authority getAuthorityById(long entityId) {
+    public Authority getAuthorityById(String entityId) {
         return repository.get(entityId);
     }
 

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultCategoryService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultCategoryService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultCategoryService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultCategoryService.java Fri Dec 28 17:43:23 2012
@@ -39,8 +39,8 @@ public class DefaultCategoryService impl
     }
 
     @Override
-    public Category get(long entityId) {
-        return categoryRepository.get(entityId);
+    public Category get(String id) {
+        return categoryRepository.get(id);
     }
 
 
@@ -57,20 +57,20 @@ public class DefaultCategoryService impl
         Date now = new Date();
         category.setText(text);
         category.setCreatedDate(now);
-        category.setCreatedUser(createdUser);
+        category.setCreatedUserId(createdUser.getId());
         category.setLastModifiedDate(now);
-        category.setLastModifiedUser(createdUser);
+        category.setLastModifiedUserId(createdUser.getId());
         categoryRepository.save(category);
         return category;
     }
 
     @Override
     @Transactional
-    public Category update(long categoryId, String text, User lastModifiedUser) {
+    public Category update(String categoryId, String text, User lastModifiedUser) {
         Category category = categoryRepository.get(categoryId);
         category.setText(text);
         category.setLastModifiedDate(new Date());
-        category.setLastModifiedUser(lastModifiedUser);
+        category.setLastModifiedUserId(lastModifiedUser.getId());
         categoryRepository.save(category);
         return category;
     }

Copied: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultOmdlService.java (from r1425410, rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultOmdlService.java)
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultOmdlService.java?p2=rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultOmdlService.java&p1=rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultOmdlService.java&r1=1425410&r2=1426593&rev=1426593&view=diff
==============================================================================
--- rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultOmdlService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultOmdlService.java Fri Dec 28 17:43:23 2012
@@ -18,31 +18,12 @@
  */
 package org.apache.rave.portal.service.impl;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.rave.exception.DuplicateItemException;
 import org.apache.rave.portal.model.Page;
 import org.apache.rave.portal.model.Widget;
-import org.apache.rave.portal.model.impl.WidgetImpl;
-import org.apache.rave.portal.model.util.omdl.BadOmdlXmlFormatException;
-import org.apache.rave.portal.model.util.omdl.OmdlConstants;
-import org.apache.rave.portal.model.util.omdl.OmdlInputAdapter;
-import org.apache.rave.portal.model.util.omdl.OmdlModelUtils;
-import org.apache.rave.portal.model.util.omdl.OmdlOutputAdapter;
-import org.apache.rave.portal.model.util.omdl.OmdlWidgetReference;
-import org.apache.rave.portal.service.OmdlService;
-import org.apache.rave.portal.service.PageService;
-import org.apache.rave.portal.service.UserService;
-import org.apache.rave.portal.service.RemoteWidgetResolverService;
-import org.apache.rave.portal.service.WidgetService;
+import org.apache.rave.portal.model.util.omdl.*;
+import org.apache.rave.portal.service.*;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -54,6 +35,14 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.List;
 /**
  * This class is responsible for the import and export of page objects to/from OMDL format
  * 

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java Fri Dec 28 17:43:23 2012
@@ -54,7 +54,7 @@ public class DefaultPageService implemen
     private final PageTemplateRepository pageTemplateRepository;
     private final String defaultPageName;
 
-    private final long MOVE_PAGE_DEFAULT_POSITION_INDEX = -1L;
+    private final String MOVE_PAGE_DEFAULT_POSITION_INDEX = "-1";
 
     @Autowired
     public DefaultPageService(PageRepository pageRepository,
@@ -76,18 +76,18 @@ public class DefaultPageService implemen
     }
 
     @Override
-    public Page getPage(long pageId) {
+    public Page getPage(String pageId) {
         return pageRepository.get(pageId);
     }
 
     @Override
-    public List<Page> getAllUserPages(long userId) {
+    public List<Page> getAllUserPages(String userId) {
         return pageRepository.getAllPages(userId, PageType.USER);
     }
 
     @Override
     @Transactional
-    public Page getPersonProfilePage(long userId) {
+    public Page getPersonProfilePage(String userId) {
         List<Page> profilePages = pageRepository.getAllPages(userId, PageType.PERSON_PROFILE);
         Page personPage = null;
         if (profilePages.isEmpty()){
@@ -99,7 +99,7 @@ public class DefaultPageService implemen
     }
 
     @Override
-    public Page getPageFromList(long pageId, List<Page> pages) {
+    public Page getPageFromList(String pageId, List<Page> pages) {
        for(Page page: pages) {
            if(page.getId().equals(pageId)){
                return page;
@@ -122,7 +122,7 @@ public class DefaultPageService implemen
 
     @Override
     @Transactional
-    public Page addNewDefaultUserPage(long userId) {
+    public Page addNewDefaultUserPage(String userId) {
         User user = userService.getUserById(userId);
         return addNewUserPage(user, defaultPageName, user.getDefaultPageLayout().getCode());
     }
@@ -149,13 +149,13 @@ public class DefaultPageService implemen
         long renderSequence = (parentPage.getSubPages() != null) ? parentPage.getSubPages().size() + 1 : 1;
         Page page = new PageImpl();
         page.setName(pageName);
-        page.setOwner(user);
+        page.setOwnerId(user.getId());
         page.setPageLayout(pageLayout);
         page.setRegions(regions);
         // set this as a "sub-page" page type
         page.setPageType(PageType.SUB_PAGE);
 
-        PageUser pageUser = new PageUserImpl(page.getOwner(), page, renderSequence);
+        PageUser pageUser = new PageUserImpl(page.getOwnerId(), page, renderSequence);
         pageUser.setPageStatus(PageInvitationStatus.OWNER);
         List<PageUser> members = new ArrayList<PageUser>();
         members.add(pageUser);
@@ -180,7 +180,7 @@ public class DefaultPageService implemen
 
     @Override
     @Transactional
-    public void deletePage(long pageId) {
+    public void deletePage(String pageId) {
         User user = userService.getAuthenticatedUser();
         // first delete the page
         pageRepository.delete(pageRepository.get(pageId));
@@ -194,13 +194,13 @@ public class DefaultPageService implemen
 
     @Override
     @Transactional
-    public int deletePages(long userId, PageType pageType) {
+    public int deletePages(String userId, PageType pageType) {
         return pageRepository.deletePages(userId, pageType);
     }
 
     @Override
     @Transactional
-    public RegionWidget moveRegionWidget(long regionWidgetId, int newPosition, long toRegionId, long fromRegionId) {
+    public RegionWidget moveRegionWidget(String regionWidgetId, int newPosition, String toRegionId, String fromRegionId) {
         Region target = getFromRepository(toRegionId, regionRepository);
         // verify that the target Region and the RegionWidget are not locked and can be modified
         RegionWidget regionWidget = regionWidgetRepository.get(regionWidgetId);
@@ -217,7 +217,7 @@ public class DefaultPageService implemen
 
     @Override
     @Transactional
-    public RegionWidget moveRegionWidgetToPage(long regionWidgetId, long toPageId) {
+    public RegionWidget moveRegionWidgetToPage(String regionWidgetId, String toPageId) {
         // Get the new page
         Page toPage = getFromRepository(toPageId, pageRepository);
         // Get the region widget
@@ -242,7 +242,7 @@ public class DefaultPageService implemen
 
     @Override
     @Transactional
-    public Region removeWidgetFromPage(long regionWidgetId) {
+    public Region removeWidgetFromPage(String regionWidgetId) {
         RegionWidget regionWidget = getFromRepository(regionWidgetId, regionWidgetRepository);
         verifyRegionWidgetIsNotLocked(regionWidget);
         regionWidgetRepository.delete(regionWidget);
@@ -251,29 +251,44 @@ public class DefaultPageService implemen
 
     @Override
     @Transactional
-    public RegionWidget addWidgetToPage(long pageId, long widgetId) {
+    public RegionWidget addWidgetToPage(String pageId, String widgetId) {
         Page page = getFromRepository(pageId, pageRepository);
         Widget widget = getFromRepository(widgetId, widgetRepository);
         Region region = page.getRegions().get(0);
         verifyRegionIsNotLocked(region);
         return createWidgetInstance(widget, region, 0);
     }
+    
+    @Override
+    @Transactional
+    public RegionWidget addWidgetToPageRegion(String pageId, String widgetId, String regionId) {
+        Page page = getFromRepository(pageId, pageRepository);
+        Widget widget = getFromRepository(widgetId, widgetRepository);
+        for(Region region : page.getRegions()){
+            if(region.getId().equals(regionId)){
+                verifyRegionIsNotLocked(region);
+                return createWidgetInstance(widget, region, 0);
+            }
+        }
+        // region not found
+        return null;
+    }
 
     @Override
     @Transactional
-    public Page movePage(long pageId, long moveAfterPageId) {
+    public Page movePage(String pageId, String moveAfterPageId) {
         return doMovePage(pageId, moveAfterPageId);
     }
 
     @Override
     @Transactional
-    public Page movePageToDefault(long pageId) {
+    public Page movePageToDefault(String pageId) {
         return doMovePage(pageId, MOVE_PAGE_DEFAULT_POSITION_INDEX);
     }
 
     @Override
     @Transactional
-    public Page updatePage(long pageId, String name, String pageLayoutCode) {
+    public Page updatePage(String pageId, String name, String pageLayoutCode) {
         Page page = pageRepository.get(pageId);
         PageLayout newLayout = pageLayoutRepository.getByPageLayoutCode(pageLayoutCode);
         PageLayout curLayout = page.getPageLayout();
@@ -302,10 +317,38 @@ public class DefaultPageService implemen
     }
 
     @Transactional
-    public Boolean addMemberToPage(long pageId, long userId){
+    public Boolean clonePageForUser(String pageId, String userId, String pageName) {
+        Widget widget = null;
+        Page page = getPage(pageId);
+        if(pageName == null || pageName.equals("null")){
+            // try to use the original page name if none supplied
+            pageName = page.getName();
+        }
+        Page clonedPage = addNewUserPage(userService.getUserById(userId), pageName, page.getPageLayout().getCode());
+        // populate all the widgets in cloned page from original
+        for(int i=0; i<page.getRegions().size(); i++){
+            for(int j=0; j<page.getRegions().get(i).getRegionWidgets().size(); j++){
+                String widgetId = page.getRegions().get(i).getRegionWidgets().get(j).getWidgetId();
+                widget = widgetRepository.get(widgetId);
+                addWidgetToPageRegion(clonedPage.getId(), widget.getId(), clonedPage.getRegions().get(i).getId());
+            }
+        }
+        // newly created page - so only one pageUser
+        PageUser pageUser = clonedPage.getMembers().get(0);
+        // update status to pending
+        pageUser.setPageStatus(PageInvitationStatus.PENDING);
+        if(pageRepository.save(clonedPage) != null){
+            return Boolean.TRUE;
+        }else{
+            return Boolean.FALSE;
+        }
+    }
+
+    @Transactional
+    public Boolean addMemberToPage(String pageId, String userId){
         Page page = getPage(pageId);
         PageUser pageUser = new PageUserImpl();
-        pageUser.setUser(userService.getUserById(userId));
+        pageUser.setUserId(userService.getUserById(userId).getId());
         pageUser.setPage(page);
         pageUser.setPageStatus(PageInvitationStatus.PENDING);
         List<PageUser> thisUsersPages = pageRepository.getPagesForUser(userService.getUserById(userId).getId(), PageType.USER);
@@ -319,11 +362,20 @@ public class DefaultPageService implemen
     }
 
     @Transactional
-    public Boolean removeMemberFromPage(long pageId, long userId){
+    public Boolean removeMemberFromPage(String pageId, String userId){
+        User user = userService.getAuthenticatedUser();
         Page page = this.getPage(pageId);
+        if(page.getOwnerId().equals(user.getId())){
+            // If I am the owner, this page has been cloned
+            // Declining a cloned page means there is no need to strip
+            // out this users pageUser object, instead remove the page itself
+            // which also removes the pageUser object further down the stack
+            pageRepository.delete(page);
+            return true;
+        }
         PageUser pageUserToRemove = null;
         for(PageUser pageUser : page.getMembers()){
-            if(pageUser.getUser().getId().equals(userId)){
+            if(pageUser.getUserId().equals(userId)){
                 pageUserToRemove = pageUser;
                 break;
             }
@@ -341,10 +393,10 @@ public class DefaultPageService implemen
 
     @Override
     @Transactional
-    public Boolean updateSharedPageStatus(long pageId, String shareStatus) {
+    public Boolean updateSharedPageStatus(String pageId, String shareStatus) {
         Page page = this.getPage(pageId);
         for(PageUser pageUser : page.getMembers()){
-            if(pageUser.getUser().equals(userService.getAuthenticatedUser())){
+            if(pageUser.getUserId().equals(userService.getAuthenticatedUser().getId())){
                 pageUser.setPageStatus(PageInvitationStatus.get(shareStatus));
             }
         }
@@ -357,10 +409,10 @@ public class DefaultPageService implemen
 
     @Override
     @Transactional
-    public Boolean updatePageEditingStatus(long pageId, long userId, boolean isEditor) {
+    public Boolean updatePageEditingStatus(String pageId, String userId, boolean isEditor) {
         Page page = this.getPage(pageId);
         for(PageUser pageUser : page.getMembers()){
-            if(pageUser.getUser().equals(userService.getUserById(userId))){
+            if(pageUser.getUserId().equals(userService.getUserById(userId).getId())){
                 pageUser.setEditor(isEditor);
             }
         }
@@ -447,7 +499,7 @@ public class DefaultPageService implemen
     private RegionWidget createWidgetInstance(Widget widget, Region region, int position) {
         RegionWidget regionWidget = new RegionWidgetImpl();
         regionWidget.setRenderOrder(position);
-        regionWidget.setWidget(widget);
+        regionWidget.setWidgetId(widget.getId());
         // TODO: setLocked and setHideChrome are hard-coded to false for new widgets manually added by users
         //       which makes sense for most default cases.  However should we change them to a customizable property
         //       to allow for more flexibility?
@@ -459,12 +511,12 @@ public class DefaultPageService implemen
         return persistedRegion.getRegionWidgets().get(position);
     }
 
-    private void moveWithinRegion(long regionWidgetId, int newPosition, Region target) {
+    private void moveWithinRegion(String regionWidgetId, int newPosition, Region target) {
         replaceRegionWidget(regionWidgetId, newPosition, target, target);
         updateRenderSequences(target.getRegionWidgets());
     }
 
-    private void moveBetweenRegions(long regionWidgetId, int newPosition, long fromRegion, Region target) {
+    private void moveBetweenRegions(String regionWidgetId, int newPosition, String fromRegion, Region target) {
         Region source = getFromRepository(fromRegion, regionRepository);
         replaceRegionWidget(regionWidgetId, newPosition, target, source);
         updateRenderSequences(source.getRegionWidgets());
@@ -472,7 +524,7 @@ public class DefaultPageService implemen
         regionRepository.save(source);
     }
 
-    private void replaceRegionWidget(long regionWidgetId, int newPosition, Region target, Region source) {
+    private void replaceRegionWidget(String regionWidgetId, int newPosition, Region target, Region source) {
         RegionWidget widget = findRegionWidgetById(regionWidgetId, source.getRegionWidgets());
         source.getRegionWidgets().remove(widget);
         target.getRegionWidgets().add(newPosition, widget);
@@ -510,9 +562,9 @@ public class DefaultPageService implemen
         long renderSequence = defaultUserPage.size() + 1;
         page = new PageImpl();
         page.setName(pageName);
-        page.setOwner(user);
+        page.setOwnerId(user.getId());
         page.setPageLayout(pageLayout);
-        PageUser pageUser = new PageUserImpl(page.getOwner(), page, renderSequence);
+        PageUser pageUser = new PageUserImpl(page.getOwnerId(), page, renderSequence);
         pageUser.setPageStatus(PageInvitationStatus.OWNER);
         pageUser.setEditor(true);
 
@@ -539,7 +591,7 @@ public class DefaultPageService implemen
         }
     }
 
-    private Page doMovePage(long pageId, long moveAfterPageId) {
+    private Page doMovePage(String pageId, String moveAfterPageId) {
         // get the logged in user
         User user = userService.getAuthenticatedUser();
         // get the page to move and the page to move after
@@ -569,7 +621,7 @@ public class DefaultPageService implemen
         return movingPageUser.getPage();
     }
 
-    private static <T> T getFromRepository(long id, Repository<T> repo) {
+    private static <T> T getFromRepository(String id, Repository<T> repo) {
         T object = repo.get(id);
         if (object == null) {
             throw new IllegalArgumentException("Could not find object of given id in " + repo.getClass().getSimpleName());
@@ -585,7 +637,7 @@ public class DefaultPageService implemen
         }
     }
 
-    private static RegionWidget findRegionWidgetById(Long id, List<RegionWidget> regionWidgets) {
+    private static RegionWidget findRegionWidgetById(String id, List<RegionWidget> regionWidgets) {
         for (RegionWidget widget : regionWidgets) {
             if (widget.getId().equals(id)) {
                 return widget;

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultRegionWidgetService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultRegionWidgetService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultRegionWidgetService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultRegionWidgetService.java Fri Dec 28 17:43:23 2012
@@ -44,7 +44,7 @@ public class DefaultRegionWidgetService 
     }
 
     @Override
-    public RegionWidget getRegionWidget(long regionWidgetId) {
+    public RegionWidget getRegionWidget(String regionWidgetId) {
         return regionWidgetRepository.get(regionWidgetId);
     }
 
@@ -57,7 +57,7 @@ public class DefaultRegionWidgetService 
     @Override
     @Synchronized(discriminator = "'RegionWidget'", id = "#regionWidgetId")
     @Transactional
-    public List<RegionWidgetPreference> saveRegionWidgetPreferences(long regionWidgetId,
+    public List<RegionWidgetPreference> saveRegionWidgetPreferences(String regionWidgetId,
                                                                     List<RegionWidgetPreference> preferences) {
         RegionWidget regionWidget = this.getValidRegionWidget(regionWidgetId);
         ModelUtils.normalizeRegionWidgetPreferences(regionWidgetId, preferences);
@@ -68,7 +68,7 @@ public class DefaultRegionWidgetService 
     @Override
     @Synchronized(discriminator = "'RegionWidget'", id = "#regionWidgetId")
     @Transactional
-    public RegionWidgetPreference saveRegionWidgetPreference(long regionWidgetId, RegionWidgetPreference preference) {
+    public RegionWidgetPreference saveRegionWidgetPreference(String regionWidgetId, RegionWidgetPreference preference) {
         RegionWidget regionWidget = this.getValidRegionWidget(regionWidgetId);
         ModelUtils.normalizeRegionWidgetPreference(regionWidgetId, preference);
         reconcileRegionWidgetPreferences(regionWidget.getPreferences(), Arrays.asList(preference), false);
@@ -86,13 +86,13 @@ public class DefaultRegionWidgetService 
 
     @Override
     @Transactional
-    public RegionWidget saveRegionWidgetCollapsedState(long regionWidgetId, boolean collapsed) {
+    public RegionWidget saveRegionWidgetCollapsedState(String regionWidgetId, boolean collapsed) {
         RegionWidget regionWidget = getValidRegionWidget(regionWidgetId);
         regionWidget.setCollapsed(collapsed);
         return saveRegionWidget(regionWidget);
     }
     
-    private RegionWidget getValidRegionWidget(long regionWidgetId) {
+    private RegionWidget getValidRegionWidget(String regionWidgetId) {
         RegionWidget regionWidget = this.getRegionWidget(regionWidgetId);
         if (regionWidget == null) {
             throw new IllegalArgumentException("Invalid RegionWidget ID");

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultTagService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultTagService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultTagService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultTagService.java Fri Dec 28 17:43:23 2012
@@ -24,6 +24,7 @@ import org.apache.rave.portal.repository
 import org.apache.rave.portal.service.TagService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -39,7 +40,7 @@ public class DefaultTagService implement
     }
 
     @Override
-    public Tag getTagById(long entityId) {
+    public Tag getTagById(String entityId) {
         return repository.get(entityId);
     }
 
@@ -56,11 +57,17 @@ public class DefaultTagService implement
     }
 
     @Override
-    public List<Tag> getAvailableTagsByWidgetId(Long widgetId) {
-
-        return repository.getAvailableTagsByWidgetId(widgetId);
-
+    @Transactional
+    public Tag save(Tag tag) {
+        return repository.save(tag);
     }
 
+//    @Override
+//    public List<Tag> getAvailableTagsByWidgetId(String widgetId) {
+//
+//        return repository.getAvailableTagsByWidgetId(widgetId);
+//
+//    }
+
 
 }

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java Fri Dec 28 17:43:23 2012
@@ -20,26 +20,12 @@
 package org.apache.rave.portal.service.impl;
 
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.rave.portal.model.PageType;
 import org.apache.rave.portal.model.Person;
 import org.apache.rave.portal.model.User;
 import org.apache.rave.portal.model.util.SearchResult;
-import org.apache.rave.portal.repository.CategoryRepository;
-import org.apache.rave.portal.repository.PageRepository;
-import org.apache.rave.portal.repository.PageTemplateRepository;
-import org.apache.rave.portal.repository.PersonRepository;
-import org.apache.rave.portal.repository.UserRepository;
-import org.apache.rave.portal.repository.WidgetCommentRepository;
-import org.apache.rave.portal.repository.WidgetRatingRepository;
-import org.apache.rave.portal.repository.WidgetRepository;
+import org.apache.rave.portal.repository.*;
 import org.apache.rave.portal.service.EmailService;
 import org.apache.rave.portal.service.UserService;
 import org.slf4j.Logger;
@@ -60,6 +46,8 @@ import org.springframework.security.open
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.*;
+
 /**
  *
  */
@@ -70,8 +58,6 @@ public class DefaultUserService implemen
     private final UserRepository userRepository;
     private final PageRepository pageRepository;
     private final PageTemplateRepository pageTemplateRepository;
-    private final WidgetRatingRepository widgetRatingRepository;
-    private final WidgetCommentRepository widgetCommentRepository;
     private final WidgetRepository widgetRepository;
     private final CategoryRepository categoryRepository;
     private final PersonRepository personRepository;
@@ -115,16 +101,12 @@ public class DefaultUserService implemen
     @Autowired
     public DefaultUserService(PageRepository pageRepository,
                               UserRepository userRepository,
-                              WidgetRatingRepository widgetRatingRepository,
-                              WidgetCommentRepository widgetCommentRepository,
                               WidgetRepository widgetRepository,
                               PageTemplateRepository pageTemplateRepository,
                               CategoryRepository categoryRepository,
                               PersonRepository personRepository) {
         this.userRepository = userRepository;
         this.pageRepository = pageRepository;
-        this.widgetRatingRepository = widgetRatingRepository;
-        this.widgetCommentRepository = widgetCommentRepository;
         this.widgetRepository = widgetRepository;
         this.pageTemplateRepository = pageTemplateRepository;
         this.categoryRepository = categoryRepository;
@@ -153,7 +135,7 @@ public class DefaultUserService implemen
     }
 
     @Override
-    public void setAuthenticatedUser(long userId) {
+    public void setAuthenticatedUser(String userId) {
         final User user = userRepository.get(userId);
         if (user == null) {
             throw new UsernameNotFoundException("User with id '" + userId + "' was not found!");
@@ -207,7 +189,7 @@ public class DefaultUserService implemen
     }
 
     @Override
-    public User getUserById(Long id) {
+    public User getUserById(String id) {
         return userRepository.get(id);
     }
 
@@ -255,7 +237,7 @@ public class DefaultUserService implemen
     @Override
     @Transactional
     // TODO RAVE-300: add security check that is is called by admin or the user itself
-    public void deleteUser(Long userId) {
+    public void deleteUser(String userId) {
         log.info("about to delete userId: " + userId);
         User user = userRepository.get(userId);
         if (user == null) {
@@ -270,23 +252,26 @@ public class DefaultUserService implemen
         // delete all person pages
         int numDeletedPersonPages = pageRepository.deletePages(userId, PageType.PERSON_PROFILE);
         // delete all the widget comments
-        int numWidgetComments = widgetCommentRepository.deleteAll(userId);
+        int numWidgetComments = widgetRepository.deleteAllWidgetComments(userId);
         // delete all the widget ratings
-        int numWidgetRatings = widgetRatingRepository.deleteAll(userId);
+        int numWidgetRatings = widgetRepository.deleteAllWidgetRatings(userId);
         // unassign the user from any widgets where they were the owner
         int numWidgetsOwned = widgetRepository.unassignWidgetOwner(userId);
         // unassign the user from any category records they created or modified
         int numCategoriesTouched = categoryRepository.removeFromCreatedOrModifiedFields(userId);
+        // remove any person associations created with other users
+        int numAssociationsRemoved = personRepository.removeAllFriendsAndRequests(userId);
 
         // finally delete the user
         userRepository.delete(user);
         log.info("Deleted user [" + userId + ',' + username + "] - numPages: " + numDeletedPages + ", numPersonPages:" +
                  numDeletedPersonPages + ", numWidgetComments: " + numWidgetComments + ", numWidgetRatings: " +
-                 numWidgetRatings + ", numWidgetsOwned: " + numWidgetsOwned + ",numCategoriesTouched:" + numCategoriesTouched);
+                 numWidgetRatings + ", numWidgetsOwned: " + numWidgetsOwned + ", numCategoriesTouched:" + numCategoriesTouched +
+                 ", numAssociationRemoved:" + numAssociationsRemoved);
     }
 
     @Override
-    public List<Person> getAllByAddedWidget(long widgetId) {
+    public List<Person> getAllByAddedWidget(String widgetId) {
         List<Person> persons = new ArrayList<Person>();
         List<User> users = userRepository.getAllByAddedWidget(widgetId);
         for (User u : users) {

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetMarketplaceService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetMarketplaceService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetMarketplaceService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetMarketplaceService.java Fri Dec 28 17:43:23 2012
@@ -1,4 +1,5 @@
 /*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -20,22 +21,17 @@ package org.apache.rave.portal.service.i
 
 import java.nio.charset.Charset;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.rave.portal.model.PortalPreference;
-import org.apache.rave.portal.model.User;
 import org.apache.rave.portal.model.Widget;
-import org.apache.rave.portal.model.WidgetStatus;
 import org.apache.rave.portal.model.util.SearchResult;
 import org.apache.rave.portal.model.util.WidgetMarketplaceSearchResult;
 import org.apache.rave.portal.model.util.WidgetMarketplaceWidgetResult;
 import org.apache.rave.portal.service.PortalPreferenceService;
-import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.service.WidgetMarketplaceService;
-import org.apache.rave.portal.service.WidgetMetadataResolver;
-import org.apache.rave.portal.service.WidgetService;
+import org.apache.rave.portal.service.RemoteWidgetResolverService;
 import org.apache.rave.portal.web.util.PortalPreferenceKeys;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -57,10 +53,8 @@ import org.springframework.web.client.Re
 @Service
 public class DefaultWidgetMarketplaceService implements WidgetMarketplaceService {
 
-    private final WidgetService widgetService;
-    private final UserService userService;
     private PortalPreferenceService portalPreferenceService;
-    private Map<String, WidgetMetadataResolver> widgetMetadataResolverMap;
+    private RemoteWidgetResolverService widgetResolverService;
     private static final String DEFAULT_URL = null;
     private static final Logger logger = LoggerFactory.getLogger(DefaultWidgetMarketplaceService.class);
     private static final String SEARCH = "search?q=${SEARCHTERM}&start=${OFFSET}&rows=${LIMIT}";
@@ -69,16 +63,10 @@ public class DefaultWidgetMarketplaceSer
     private static final String CATEGORY_LIST = "tag/all";
     
     @Autowired
-    public DefaultWidgetMarketplaceService(WidgetService widgetService, UserService userService, 
-        PortalPreferenceService pps,  List<WidgetMetadataResolver> widgetMetadataResolvers){
-        this.widgetService = widgetService;
-        this.userService = userService;
+    public DefaultWidgetMarketplaceService(RemoteWidgetResolverService widgetResolverService, PortalPreferenceService pps){
+        this.widgetResolverService = widgetResolverService;
         this.portalPreferenceService = pps;
-        widgetMetadataResolverMap = new HashMap<String, WidgetMetadataResolver>();
-        for (WidgetMetadataResolver widgetMetadataResolver : widgetMetadataResolvers) {
-            widgetMetadataResolverMap.put(widgetMetadataResolver.getSupportedContext(), widgetMetadataResolver);
-        }
-	}
+    }
 
     /* (non-Javadoc)
      * @see org.apache.rave.portal.service.WidgetMarketplaceService#getWidgetsByFreeTextSearch(java.lang.String, int, int)
@@ -185,48 +173,6 @@ public class DefaultWidgetMarketplaceSer
         return restTemplate;
     }
 
-    /*
-     * (non-Javadoc)
-     * @see org.apache.rave.portal.service.WidgetMarketplaceService#getWidgetMetadata(java.lang.String, java.lang.String)
-     */
-    public Widget getWidgetMetadata(String url, String type) throws Exception{
-        Widget widget = null;
-        // check for namespaces in the the type element
-        if(type.contains("#")){
-            String[] deNamespacedType = type.split("#");
-            if(deNamespacedType.length > 0){
-                type = deNamespacedType[1];
-            }
-        }
-        if (type.equals("W3C") || type.equals("W3C Widget") || type.equals("W3CWidget")){
-            widget = widgetMetadataResolverMap.get("W3C").publishRemote(url);
-        } else if (type.equals("OpenSocial") || type.startsWith("OpenSocial")|| type.startsWith("Open Social")){
-            widget = widgetMetadataResolverMap.get("OpenSocial").getMetadata(url);
-        }else{
-            // there may be resources in a marketplace store other than W3C & OpenSocial 
-            // gadgets so return null if it isn't one of the supported types in rave.
-            throw new Exception("Unsupported Widget format");
-        }
-        return widget;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.rave.portal.service.WidgetMarketplaceService#addWidget(org.apache.rave.portal.model.Widget)
-     */
-    @Override
-    public Widget addWidget(Widget widget) throws Exception{
-        PortalPreference status = portalPreferenceService.getPreference(PortalPreferenceKeys.INITIAL_WIDGET_STATUS);
-        User user = userService.getAuthenticatedUser();
-        widget.setOwner(user);
-        if (status != null && status.getValue().equals("PUBLISHED")){
-            widget.setWidgetStatus(WidgetStatus.PUBLISHED);
-        } else {
-            widget.setWidgetStatus(WidgetStatus.PREVIEW);
-        }
-        widgetService.registerNewWidget(widget);
-        return widget;
-    }
-
     /* (non-Javadoc)
      * @see org.apache.rave.portal.service.WidgetMarketplaceService#getWidget(java.lang.String)
      */
@@ -240,4 +186,14 @@ public class DefaultWidgetMarketplaceSer
         return widget;
     }
 
+    @Override
+    public Widget addWidget(Widget widget) throws Exception {
+        return widgetResolverService.addWidget(widget);
+    }
+
+    @Override
+    public Widget resolveWidgetMetadata(String url, String type) throws Exception {
+       return widgetResolverService.resolveAndDownloadWidgetMetadata(url, type);
+    }
+
 }

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java Fri Dec 28 17:43:23 2012
@@ -21,10 +21,7 @@ package org.apache.rave.portal.service.i
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.rave.exception.DuplicateItemException;
-import org.apache.rave.portal.model.Category;
-import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.Widget;
-import org.apache.rave.portal.model.WidgetStatus;
+import org.apache.rave.portal.model.*;
 import org.apache.rave.portal.model.util.SearchResult;
 import org.apache.rave.portal.model.util.WidgetStatistics;
 import org.apache.rave.portal.repository.CategoryRepository;
@@ -35,6 +32,7 @@ import org.springframework.beans.factory
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -87,7 +85,7 @@ public class DefaultWidgetService implem
     }
 
     @Override
-    public Widget getWidget(long id) {
+    public Widget getWidget(String id) {
         return widgetRepository.get(id);
     }
 
@@ -123,7 +121,7 @@ public class DefaultWidgetService implem
     }
 
     @Override
-    public SearchResult<Widget> getWidgetsByOwner(Long ownerId, int offset, int pageSize) {
+    public SearchResult<Widget> getWidgetsByOwner(String ownerId, int offset, int pageSize) {
         final User user = userRepository.get(ownerId);
         final int count = widgetRepository.getCountByOwner(user, offset, pageSize);
         final List<Widget> widgets = widgetRepository.getByOwner(user, offset, pageSize);
@@ -153,12 +151,12 @@ public class DefaultWidgetService implem
     }
 
     @Override
-    public WidgetStatistics getWidgetStatistics(long widgetId, long userId) {
+    public WidgetStatistics getWidgetStatistics(String widgetId, String userId) {
         return widgetRepository.getWidgetStatistics(widgetId, userId);
     }
 
     @Override
-    public Map<Long, WidgetStatistics> getAllWidgetStatistics(long userId) {
+    public Map<String, WidgetStatistics> getAllWidgetStatistics(String userId) {
         return widgetRepository.getAllWidgetStatistics(userId);
     }
 
@@ -180,11 +178,105 @@ public class DefaultWidgetService implem
     }
 
     @Override
-    public SearchResult<Widget> getWidgetsByCategory(long categoryId, int offset, int pageSize) {
-        List<Widget> widgets = categoryRepository.get(categoryId).getWidgets();
+    public SearchResult<Widget> getWidgetsByCategory(String categoryId, int offset, int pageSize) {
+        Category category = categoryRepository.get(categoryId);
+        if (category == null) {
+            return new SearchResult<Widget>(new ArrayList<Widget>(), 0);
+        }
+
+        List<Widget> widgets = category.getWidgets();
         SearchResult<Widget> searchResult = new SearchResult<Widget>(widgets, widgets.size());
         searchResult.setOffset(offset);
         searchResult.setPageSize(pageSize);
         return searchResult;
     }
+
+    @Override
+    public WidgetTag getWidgetTag(String id) {
+        return widgetRepository.getTagById(id);
+    }
+
+
+    @Override
+    @Transactional
+    public WidgetTag createWidgetTag(String widgetId, WidgetTag widgetTag) {
+        return widgetRepository.saveWidgetTag(widgetId, widgetTag);
+    }
+
+    @Override
+    public WidgetTag getWidgetTagByWidgetIdAndKeyword(String widgetId, String keyword) {
+        return widgetRepository.getTagByWidgetIdAndKeyword(widgetId, keyword);
+    }
+
+    // ***************************************************************************************************************
+    // Widget Comment Methods
+    // ***************************************************************************************************************
+
+    @Override
+    public WidgetComment getWidgetComment(String widgetId, String commentId) {
+        return widgetRepository.getCommentById(widgetId, commentId);
+    }
+
+    @Override
+    @Transactional
+    public void createWidgetComment(String widgetId, WidgetComment widgetComment) {
+        widgetRepository.createWidgetComment(widgetId, widgetComment);
+    }
+
+    @Override
+    @Transactional
+    public void updateWidgetComment(String widgetId, WidgetComment widgetComment) {
+        widgetRepository.updateWidgetComment(widgetId, widgetComment);
+    }
+
+    @Override
+    @Transactional
+    public void removeWidgetComment(String widgetId, String commentId) {
+        widgetRepository.deleteWidgetComment(widgetId, getWidgetComment(widgetId, commentId));
+    }
+
+    @Override
+    @Transactional
+    public int deleteAllWidgetComments(String userId) {
+        return widgetRepository.deleteAllWidgetComments(userId);
+    }
+
+    @Override
+    public WidgetRating getWidgetRatingByWidgetIdAndUserId(String widgetId, String userId) {
+        return widgetRepository.getWidgetRatingsByWidgetIdAndUserId(widgetId, userId);
+    }
+
+    @Override
+    @Transactional
+    public void updateWidgetRatingScore(String widgetId, WidgetRating widgetRating, Integer score) {
+        widgetRating.setScore(score);
+        widgetRepository.updateWidgetRating(widgetId, widgetRating);
+    }
+
+    @Override
+    @Transactional
+    public void saveWidgetRating(String widgetId, WidgetRating rating) {
+        WidgetRating existingRating = getWidgetRatingByWidgetIdAndUserId(widgetId, rating.getUserId());
+        if (existingRating == null) {
+            widgetRepository.createWidgetRating(widgetId, rating);
+        } else {
+            updateWidgetRatingScore(widgetId, existingRating, rating.getScore());
+        }
+    }
+
+    @Override
+    @Transactional
+    public void removeWidgetRating(String widgetId, String userId) {
+        WidgetRating widgetRating = widgetRepository.getWidgetRatingsByWidgetIdAndUserId(widgetId, userId);
+        if (widgetRating == null) {
+            return;
+        }
+        widgetRepository.deleteWidgetRating(widgetId, widgetRating);
+    }
+
+    @Override
+    @Transactional
+    public int removeAllWidgetRatings(String userId) {
+        return widgetRepository.deleteAllWidgetRatings(userId);
+    }
 }

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java Fri Dec 28 17:43:23 2012
@@ -19,9 +19,9 @@
 
 package org.apache.rave.portal.web.renderer;
 
-import org.apache.rave.portal.model.RegionWidget;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 
 /**
  * Scoped renderer that provides additional RegionWidget related rendering operations
  */
-public interface RegionWidgetRenderer extends Renderer<RegionWidget> {}
+public interface RegionWidgetRenderer extends Renderer<RegionWidgetWrapper> {}

Modified: rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.java
URL: http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.java?rev=1426593&r1=1426592&r2=1426593&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.java (original)
+++ rave/branches/mongo/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.java Fri Dec 28 17:43:23 2012
@@ -19,7 +19,7 @@
 
 package org.apache.rave.portal.web.renderer;
 
-import org.apache.rave.portal.model.RegionWidget;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
 
 import java.util.Collection;
@@ -35,13 +35,12 @@ public interface RenderService {
     Collection<String> getSupportedWidgetTypes();
 
     /**
-     * Renders the {@link org.apache.rave.portal.model.RegionWidget} as a String
+     * Renders the {@link org.apache.rave.portal.model.RegionWidget} as a String\
      *
-     *
-     * @param widget widget to renderer
+     * @param regionWidgetWrapper widget to renderer
      * @param context the cotnext under which to render the widget
      * @return a String representing the rendered widget
      */
-    String render(RegionWidget widget, RenderContext context);
+    String render(RegionWidgetWrapper regionWidgetWrapper, RenderContext context);
 
 }