Author: mfranklin
Date: Fri Mar 29 20:50:09 2013
New Revision: 1462637

URL: http://svn.apache.org/r1462637
Log:
Added basic render support for API RAVE-924

Added:
    
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PagesResource.java
      - copied, changed from r1462082, 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PageResource.java
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/model/
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/model/OpenSocialRegionWidget.java
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialRegionWidgetRenderer.java
Removed:
    
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PageResource.java
Modified:
    
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/PageList.java
    
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/impl/DefaultRenderService.java
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
    
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/web/renderer/RenderServiceTest.java
    
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/cxf-applicationContext.xml
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/OpenSocialService.java
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/SecurityTokenService.java
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/DefaultOpenSocialService.java
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/EncryptedBlobSecurityTokenService.java

Copied: 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PagesResource.java
 (from r1462082, 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PageResource.java)
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PagesResource.java?p2=rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PagesResource.java&p1=rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PageResource.java&r1=1462082&r2=1462637&rev=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PageResource.java
 (original)
+++ 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/PagesResource.java
 Fri Mar 29 20:50:09 2013
@@ -9,7 +9,8 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import java.io.File;
 
-public interface PageResource {
+@Path("/pages")
+public interface PagesResource {
 
     /**
      * Deletes the given page
@@ -17,7 +18,7 @@ public interface PageResource {
      * @return
      */
     @DELETE
-    @Path("/pages/{id}")
+    @Path("/{id}")
     Response deletePage(@PathParam("id") String id);
 
     /**
@@ -26,7 +27,7 @@ public interface PageResource {
      * @return
      */
     @GET
-    @Path("/pages/{id}")
+    @Path("/{id}")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response getPage(@PathParam("id") String id);
 
@@ -37,7 +38,7 @@ public interface PageResource {
      * @return
      */
     @PUT
-    @Path("/pages/{id}")
+    @Path("/{id}")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response updatePage(@PathParam("id") String id, Page page);
@@ -48,7 +49,7 @@ public interface PageResource {
      * @return
      */
     @GET
-    @Path("/pages/{id}")
+    @Path("/{id}")
     @Produces({"application/vnd.omdl+xml"})
     Response getPageOmdl(@PathParam("id") String id);
 
@@ -61,7 +62,7 @@ public interface PageResource {
      * @return
      */
     @GET
-    @Path("/{context}/{identifier}/pages")
+    @Path("/{context}/{identifier}")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response getPagesForRender(@PathParam("context") String context, 
@PathParam("identifier") String identifier);
 
@@ -74,7 +75,7 @@ public interface PageResource {
      * @return
      */
     @GET
-    @Path("/{context}/{identifier}/pages/{id}")
+    @Path("/{context}/{identifier}/{id}")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response getPageForRender(@PathParam("context") String context,
                               @PathParam("identifier") String identifier,
@@ -90,7 +91,7 @@ public interface PageResource {
      * @return
      */
     @POST
-    @Path("/{context}/{identifier}/pages/{id}/clone")
+    @Path("/{context}/{identifier}/{id}/clone")
     Response clonePage(@PathParam("context") String context,
                        @PathParam("identifier") String identifier,
                        @PathParam("id") String id);
@@ -103,7 +104,7 @@ public interface PageResource {
      * @return
      */
     @POST
-    @Path("/{context}/{identifier}/pages")
+    @Path("/{context}/{identifier}")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({"application/vnd.omdl+xml"})
     Response importOmdlPage(@PathParam("context") String context,
@@ -118,7 +119,7 @@ public interface PageResource {
      * @return
      */
     @POST
-    @Path("/{context}/{identifier}/pages")
+    @Path("/{context}/{identifier}")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response createPage(@PathParam("context") String context,
@@ -131,7 +132,7 @@ public interface PageResource {
      * @return
      */
     @DELETE
-    @Path("/{context}/{identifier}/pages/{id}")
+    @Path("/{context}/{identifier}/{id}")
     Response deletePageInContext(@PathParam("id") String id);
 
     /**
@@ -141,7 +142,7 @@ public interface PageResource {
      * @return
      */
     @PUT
-    @Path("/{context}/{identifier}/pages/{id}")
+    @Path("/{context}/{identifier}/{id}")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response updatePageInContext(@PathParam("id") String id, Page page);
@@ -154,7 +155,7 @@ public interface PageResource {
      */
     @PUT
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
-    @Path("/{context}/{identifier}/pages/{id}/move")
+    @Path("/{context}/{identifier}/{id}/move")
     Response movePage(@PathParam("id") String id, 
@QueryParam("moveAfterPageId") final String moveAfterPageId);
 
 
@@ -165,7 +166,7 @@ public interface PageResource {
      * @return
      */
     @POST
-    @Path("/{context}/{identifier}/pages/{id}/regionWidgets")
+    @Path("/{context}/{identifier}/{id}/regionWidgets")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response addWidgetToPage(@PathParam("id") String id, RegionWidget widget);
@@ -177,7 +178,7 @@ public interface PageResource {
      * @return
      */
     @DELETE
-    @Path("/{context}/{identifier}/pages/{id}/regionWidgets/{regionWidgetId}")
+    @Path("/{context}/{identifier}/{id}/regionWidgets/{regionWidgetId}")
     Response removeWidgetFromPage(@PathParam("id") String id, 
@PathParam("regionWidgetId") String regionWidgetId);
 
     /**
@@ -188,7 +189,7 @@ public interface PageResource {
      * @return
      */
     @POST
-    
@Path("/{context}/{identifier}/pages/{id}/regions/{regionId}/regionWidgets")
+    @Path("/{context}/{identifier}/{id}/regions/{regionId}/regionWidgets")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response addWidgetToRegion(@PathParam("id") String id, 
@PathParam("regionId") String regionId, RegionWidget widget);
@@ -202,7 +203,7 @@ public interface PageResource {
      * @return
      */
     @PUT
-    
@Path("/{context}/{identifier}/pages/{id}/regions/{toRegionId}/regionWidgets/{regionWidgetId}/move")
+    
@Path("/{context}/{identifier}/{id}/regions/{toRegionId}/regionWidgets/{regionWidgetId}/move")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response moveWidgetOnPage(@PathParam("id") String id,
@@ -217,7 +218,7 @@ public interface PageResource {
      * @return
      */
     @PUT
-    
@Path("/{context}/{identifier}/pages/{targetPageId}/regionWidgets/{regionWidgetId}/move")
+    
@Path("/{context}/{identifier}/{targetPageId}/regionWidgets/{regionWidgetId}/move")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response moveWidgetToPage(@PathParam("targetPageId") String targetPageId,
@@ -228,20 +229,20 @@ public interface PageResource {
      * @return
      */
     @POST
-    @Path("/{context}/{identifier}/pages/{id}/members")
+    @Path("/{context}/{identifier}/{id}/members")
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     Response addMemberToPage(@PathParam("id") String id);
 
     @DELETE
-    @Path("/{context}/{identifier}/pages/{id}/members/{userId}")
+    @Path("/{context}/{identifier}/{id}/members/{userId}")
     Response removeMemberFromPage(@PathParam("id") String id, 
@PathParam("userId") String userId);
 
     @PUT
-    @Path("/{context}/{identifier}/pages/{id}/members/{userId}/status")
+    @Path("/{context}/{identifier}/{id}/members/{userId}/status")
     Response updateSharedPageStatus(@PathParam("id") String id, 
@PathParam("userId") String userId, String status);
 
     @PUT
-    @Path("/{context}/{identifier}/pages/{id}/members/{userId}/editor")
+    @Path("/{context}/{identifier}/{id}/members/{userId}/editor")
     Response updatePageEditingStatus(@PathParam("id") String id, 
@PathParam("userId") String userId, boolean editor);
 }

Modified: 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/PageList.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/PageList.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/PageList.java
 (original)
+++ 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/PageList.java
 Fri Mar 29 20:50:09 2013
@@ -15,6 +15,12 @@ public class PageList {
     @XmlElement(name = "Page")
     private List<Page> pages;
 
+    public PageList() { }
+
+    public PageList(List<Page> pages) {
+        this.pages = pages;
+    }
+
     public List<Page> getPages() {
         if(pages == null) pages = new ArrayList<Page>();
         return pages;

Modified: 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
 (original)
+++ 
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
 Fri Mar 29 20:50:09 2013
@@ -17,24 +17,26 @@ import java.util.Map;
 public class RegionWidget {
 
     @XmlAttribute(name="id")
-    private String id;
+    protected String id;
     @XmlAttribute(name="type")
-    private String type;
+    protected String type;
     @XmlElement(name = "widgetId")
-    private String widgetId;
+    protected String widgetId;
     @XmlElement(name = "widgetUrl")
-    private String widgetUrl;
+    protected String widgetUrl;
     @XmlElement(name = "regionId")
-    private String regionId;
+    protected String regionId;
     @XmlElement(name = "collapsed")
-    private boolean collapsed;
+    protected boolean collapsed;
     @XmlElement(name = "locked")
-    private boolean locked;
+    protected boolean locked;
     @XmlElement(name = "hideChrome")
-    private boolean hideChrome;
+    protected boolean hideChrome;
+    @XmlElement(name = "ownerId")
+    protected String ownerId;
     @XmlElement(name = "userPrefs")
     @XmlJavaTypeAdapter(value = XmlMapAdapter.class)
-    private Map<String, String> userPrefs;
+    protected Map<String, String> userPrefs;
 
     public RegionWidget() {  }
 
@@ -44,6 +46,7 @@ public class RegionWidget {
         this.regionId = widget.getRegion().getId();
         this.collapsed = widget.isCollapsed();
         this.locked = widget.isLocked();
+        this.ownerId = widget.getRegion().getPage().getOwnerId();
         this.hideChrome = widget.isHideChrome();
         this.userPrefs = createPrefs(widget);
     }
@@ -112,15 +115,23 @@ public class RegionWidget {
         this.hideChrome = hideChrome;
     }
 
-    public Map getUserPrefs() {
+    public Map<String, String> getUserPrefs() {
         return userPrefs;
     }
 
-    public void setUserPrefs(Map userPrefs) {
+    public void setUserPrefs(Map<String, String> userPrefs) {
         this.userPrefs = userPrefs;
     }
 
-    private Map<String, String> createPrefs(org.apache.rave.model.RegionWidget 
widget) {
+    public String getOwnerId() {
+        return ownerId;
+    }
+
+    public void setOwnerId(String ownerId) {
+        this.ownerId = ownerId;
+    }
+
+    protected Map<String, String> 
createPrefs(org.apache.rave.model.RegionWidget widget) {
         Map<String, String> created = null;
         List<RegionWidgetPreference> preferences = widget.getPreferences();
         if(preferences != null) {

Added: 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java?rev=1462637&view=auto
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java
 (added)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java
 Fri Mar 29 20:50:09 2013
@@ -0,0 +1,5 @@
+package org.apache.rave.portal.web.renderer;
+
+import org.apache.rave.rest.model.RegionWidget;
+
+public interface RegionWidgetRenderer extends Renderer<RegionWidget> {  }

Modified: 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/impl/DefaultRenderService.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/impl/DefaultRenderService.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/impl/DefaultRenderService.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/impl/DefaultRenderService.java
 Fri Mar 29 20:50:09 2013
@@ -19,17 +19,27 @@
 
 package org.apache.rave.portal.web.renderer.impl;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import org.apache.rave.exception.NotSupportedException;
+import org.apache.rave.model.Widget;
 import org.apache.rave.portal.repository.WidgetRepository;
+import org.apache.rave.portal.web.renderer.RegionWidgetRenderer;
+import org.apache.rave.portal.web.renderer.RegionWidgetWrapperRenderer;
+import org.apache.rave.portal.web.renderer.RenderService;
+import org.apache.rave.portal.web.renderer.Renderer;
 import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
-import org.apache.rave.portal.web.renderer.*;
 import org.apache.rave.rest.model.Page;
+import org.apache.rave.rest.model.Region;
 import org.apache.rave.rest.model.RegionWidget;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Default implementation of {@link RenderService}
@@ -43,15 +53,24 @@ public class DefaultRenderService implem
     public static final String WIDGET_CONTEXT_KEY = "widget";
 
     private final Map<String, RegionWidgetWrapperRenderer> supportedWidgets;
+    private final Map<String, RegionWidgetRenderer> supportedApiWidgets;
+    private final WidgetRepository repository;
 
     @Autowired
-    public DefaultRenderService(List<RegionWidgetWrapperRenderer> 
widgetRenderers, WidgetRepository widgetRepository) {
-        this.supportedWidgets = new HashMap<String, 
RegionWidgetWrapperRenderer>();
+    public DefaultRenderService(List<RegionWidgetWrapperRenderer> 
widgetRenderers,
+                                List<RegionWidgetRenderer> apiWidgetRenderers,
+                                WidgetRepository widgetRepository) {
+
+        this.repository = widgetRepository;
+        this.supportedWidgets = Maps.newHashMap();
+        this.supportedApiWidgets = Maps.newHashMap();
         mapRenderersByType(this.supportedWidgets, widgetRenderers);
+        mapRenderersByType(this.supportedApiWidgets, apiWidgetRenderers);
     }
 
     @Override
     public Collection<String> getSupportedWidgetTypes() {
+        //TODO: change to API when refactor of rendering is complete
         return supportedWidgets.keySet();
     }
 
@@ -59,7 +78,7 @@ public class DefaultRenderService implem
      * Renders the given rw iff there is a {@link 
org.apache.rave.portal.web.renderer.RegionWidgetWrapperRenderer } for the
      * rw type
      *
-     * @param rw RegionWidget to renderer
+     * @param rw      RegionWidget to renderer
      * @param context
      * @return the String representation of the rendered RegionWidget
      * @throws {@link org.apache.rave.exception.NotSupportedException}
@@ -67,7 +86,7 @@ public class DefaultRenderService implem
     @Override
     public String render(RegionWidgetWrapper rw, RenderContext context) {
         RegionWidgetWrapperRenderer renderer = 
supportedWidgets.get(rw.getWidget().getType());
-        if(renderer == null) {
+        if (renderer == null) {
             throw new NotSupportedException(rw.getWidget().getType() + " is 
not supported");
         }
         return renderer.render(rw, context);
@@ -75,17 +94,47 @@ public class DefaultRenderService implem
 
     @Override
     public RegionWidget prepareForRender(RegionWidget source) {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+        if (source.getType() == null || source.getWidgetUrl() == null) {
+            updateRegionWidget(source);
+        }
+        RegionWidgetRenderer renderer = 
supportedApiWidgets.get(source.getType());
+        if (renderer == null) {
+            throw new NotSupportedException(source.getType() + " is not 
supported");
+        }
+        return renderer.prepareForRender(source);
     }
 
     @Override
     public Page prepareForRender(Page source) {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+        for (Region region : source.getRegions()) {
+            List<RegionWidget> widgetList = 
Lists.newArrayListWithCapacity(region.getRegionWidgets().size());
+            for (RegionWidget widget : region.getRegionWidgets()) {
+                widgetList.add(prepareForRender(widget));
+            }
+            region.setRegionWidgets(widgetList);
+        }
+        if(source.getSubPages() != null) {
+            for (Page sub : source.getSubPages()) {
+                prepareForRender(sub);
+            }
+        }
+        return source;
     }
 
     private static <T extends Renderer> void mapRenderersByType(Map<String, T> 
map, List<T> renderers) {
-        for(T renderer : renderers) {
-            map.put(renderer.getSupportedContext(), renderer);
+        if (renderers != null) {
+            for (T renderer : renderers) {
+                map.put(renderer.getSupportedContext(), renderer);
+            }
+        }
+    }
+
+    private void updateRegionWidget(RegionWidget source) {
+        Widget widget = repository.get(source.getWidgetId());
+        if (widget == null) {
+            throw new IllegalArgumentException("Could not retrieve widget for 
RegionWidget " + source.getId());
         }
+        source.setType(widget.getType());
+        source.setWidgetUrl(widget.getUrl());
     }
 }

Modified: 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
 Fri Mar 29 20:50:09 2013
@@ -1,26 +1,30 @@
 package org.apache.rave.rest.impl;
 
 
-import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+import com.google.common.collect.Lists;
 import org.apache.rave.portal.service.PageService;
+import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.web.renderer.RenderService;
-import org.apache.rave.rest.PageResource;
+import org.apache.rave.rest.PagesResource;
 import org.apache.rave.rest.model.Page;
+import org.apache.rave.rest.model.PageList;
 import org.apache.rave.rest.model.RegionWidget;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Response;
 import java.io.File;
+import java.util.Arrays;
+import java.util.List;
 
-public class DefaultPageResource implements PageResource {
+public class DefaultPageResource implements PagesResource {
 
+    public static final String SELF = "@self";
     private Logger logger = LoggerFactory.getLogger(getClass());
     private PageService pageService;
     private RenderService renderService;
+    private UserService userService;
 
     @Override
     public Response deletePage(String id) {
@@ -32,101 +36,118 @@ public class DefaultPageResource impleme
     @Override
     public Response getPage(String id) {
         logger.debug("Retrieving page for export: " + id);
-        return Response.ok(pageService.getPage(id)).build();
+        org.apache.rave.model.Page fromDb = pageService.getPage(id);
+        return fromDb == null ? 
Response.status(Response.Status.NOT_FOUND).build() : Response.ok(new 
Page(fromDb)).build();
     }
 
     @Override
     public Response updatePage(String id, Page page) {
-        return Response.ok(pageService.updatePage(id, page.getName(), 
page.getPageLayoutCode())).build();
+        org.apache.rave.model.Page fromDb = pageService.updatePage(id, 
page.getName(), page.getPageLayoutCode());
+        return Response.ok(new Page(fromDb)).build();
     }
 
     @Override
-    public Response getPageOmdl(@PathParam("id") String id) {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    public Response getPageOmdl(String id) {
+        return null;
     }
 
     @Override
-    public Response getPagesForRender(@PathParam("context") String context, 
@PathParam("identifier") String identifier) {
-        return null;
+    public Response getPagesForRender(String context, String identifier) {
+        List<org.apache.rave.model.Page> pages;
+        if("portal".equals(context)) {
+            String userId = SELF.equals(identifier) ? 
userService.getAuthenticatedUser().getId() : identifier;
+            pages = pageService.getAllUserPages(userId);
+        } else if("profile".equals(context)) {
+            pages = 
Arrays.asList(pageService.getPersonProfilePage(identifier));
+        } else {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        }
+        List<Page> converted = Lists.newArrayList();
+        for(org.apache.rave.model.Page page : pages) {
+            Page convert = new Page(page);
+            converted.add(renderService.prepareForRender(convert));
+        }
+        return Response.ok(new PageList(converted)).build();
     }
 
     @Override
-    public Response getPageForRender(@PathParam("context") String context, 
@PathParam("identifier") String identifier, @PathParam("id") String id) {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    public Response getPageForRender(String context, String identifier, String 
id) {
+        org.apache.rave.model.Page page = pageService.getPage(id);
+        return Response.ok(renderService.prepareForRender(new 
Page(page))).build();
     }
 
     @Override
-    public Response clonePage(@PathParam("context") String context, 
@PathParam("identifier") String identifier, @PathParam("id") String id) {
+    public Response clonePage(String context, String identifier, String id) {
         return null;
     }
 
     @Override
-    public Response importOmdlPage(@PathParam("context") String context, 
@PathParam("identifier") String identifier, @Multipart(value = "root", type = 
"application/octet-stream") File page) {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    public Response importOmdlPage(String context, String identifier, File 
page) {
+        return null;
     }
 
     @Override
-    public Response createPage(@PathParam("context") String context, 
@PathParam("identifier") String identifier, Page page) {
+    public Response createPage(String context, String identifier, Page page) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response deletePageInContext(@PathParam("id") String id) {
+    public Response deletePageInContext(String id) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response updatePageInContext(@PathParam("id") String id, Page page) 
{
+    public Response updatePageInContext(String id, Page page) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response movePage(@PathParam("id") String id, 
@QueryParam("moveAfterPageId") String moveAfterPageId) {
+    public Response movePage(String id, String moveAfterPageId) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response addWidgetToPage(@PathParam("id") String id, RegionWidget 
widget) {
+    public Response addWidgetToPage(String id, RegionWidget widget) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response removeWidgetFromPage(@PathParam("id") String id, 
@PathParam("regionWidgetId") String regionWidgetId) {
+    public Response removeWidgetFromPage(String id, String regionWidgetId) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response addWidgetToRegion(@PathParam("id") String id, 
@PathParam("regionId") String regionId, RegionWidget widget) {
+    public Response addWidgetToRegion(String id, String regionId, RegionWidget 
widget) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response moveWidgetOnPage(@PathParam("id") String id, 
@PathParam("toRegionId") String toRegionId, @PathParam("regionWidgetId") String 
regionWidgetId, @QueryParam("position") int position) {
+    public Response moveWidgetOnPage(String id, String toRegionId, String 
regionWidgetId, int position) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response moveWidgetToPage(@PathParam("targetPageId") String 
targetPageId, @PathParam("regionWidgetId") String regionWidgetId) {
+    public Response moveWidgetToPage(String targetPageId, String 
regionWidgetId) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response addMemberToPage(@PathParam("id") String id) {
+    public Response addMemberToPage(String id) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response removeMemberFromPage(@PathParam("id") String id, 
@PathParam("userId") String userId) {
+    public Response removeMemberFromPage(String id, String userId) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response updateSharedPageStatus(@PathParam("id") String id, 
@PathParam("userId") String userId, String status) {
+    public Response updateSharedPageStatus(String id, String userId, String 
status) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
     @Override
-    public Response updatePageEditingStatus(@PathParam("id") String id, 
@PathParam("userId") String userId, boolean editor) {
+    public Response updatePageEditingStatus(String id, String userId, boolean 
editor) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
@@ -134,4 +155,14 @@ public class DefaultPageResource impleme
     public void setPageService(PageService pageService) {
         this.pageService = pageService;
     }
+
+    @Inject
+    public void setRenderService(RenderService renderService) {
+        this.renderService = renderService;
+    }
+
+    @Inject
+    public void setUserService(UserService userService) {
+        this.userService = userService;
+    }
 }

Modified: 
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/web/renderer/RenderServiceTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/web/renderer/RenderServiceTest.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/web/renderer/RenderServiceTest.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/web/renderer/RenderServiceTest.java
 Fri Mar 29 20:50:09 2013
@@ -146,12 +146,12 @@ public class RenderServiceTest {
     private void constructFooBarRenderService() {
         widgetRenderers.add(widgetRenderer1);
         widgetRenderers.add(widgetRenderer2);
-        service = new DefaultRenderService(widgetRenderers, widgetRepository);
+        service = new DefaultRenderService(widgetRenderers, null, 
widgetRepository);
     }
 
     private void constructFooRenderService() {
         widgetRenderers.add(widgetRenderer1);
-        service = new DefaultRenderService(widgetRenderers, widgetRepository);
+        service = new DefaultRenderService(widgetRenderers, null, 
widgetRepository);
     }
 
     private void replayMocks() {

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/cxf-applicationContext.xml
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/cxf-applicationContext.xml?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/cxf-applicationContext.xml
 (original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/cxf-applicationContext.xml
 Fri Mar 29 20:50:09 2013
@@ -21,6 +21,7 @@
         <jaxrs:serviceBeans>
             <ref bean="peopleBean"/>
             <ref bean="usersBean"/>
+            <ref bean="pagesBean" />
             <ref bean="categoriesBean"/>
         </jaxrs:serviceBeans>
     </jaxrs:server>
@@ -37,4 +38,7 @@
         <property name="categoryService" ref="defaultCategoryService"/>
         <property name="userService" ref="userService"/>
     </bean>
+
+    <bean id="pagesBean" class="org.apache.rave.rest.impl.DefaultPageResource" 
autowire="byType" />
+
 </beans>
\ No newline at end of file

Modified: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/OpenSocialService.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/OpenSocialService.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/OpenSocialService.java
 (original)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/OpenSocialService.java
 Fri Mar 29 20:50:09 2013
@@ -19,6 +19,8 @@
 
 package org.apache.rave.provider.opensocial.service;
 
+import org.apache.rave.rest.model.RegionWidget;
+
 public interface OpenSocialService {
     /**
      * Fetches gadget metadata for the specified gadget URL.
@@ -34,4 +36,11 @@ public interface OpenSocialService {
      * @return a valid, encrypted securityToken
      */
     String getEncryptedSecurityToken(String pageId, String widget);
+
+    /**
+     * Gets a security token for the given RegionWidget
+     * @param item the region widget to get a security token for
+     * @return a valid, encrypted securityToken
+     */
+    String getEncryptedSecurityToken(RegionWidget item);
 }
\ No newline at end of file

Modified: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/SecurityTokenService.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/SecurityTokenService.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/SecurityTokenService.java
 (original)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/SecurityTokenService.java
 Fri Mar 29 20:50:09 2013
@@ -32,4 +32,6 @@ public interface SecurityTokenService {
     SecurityToken decryptSecurityToken(String encryptedSecurityToken) throws 
SecurityTokenException;
 
     String refreshEncryptedSecurityToken(String encryptedSecurityToken) throws 
SecurityTokenException;
+
+    String getEncryptedSecurityToken(String moduleId, String url, String 
ownerId);
 }
\ No newline at end of file

Modified: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/DefaultOpenSocialService.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/DefaultOpenSocialService.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/DefaultOpenSocialService.java
 (original)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/DefaultOpenSocialService.java
 Fri Mar 29 20:50:09 2013
@@ -63,9 +63,12 @@ public class DefaultOpenSocialService im
         // Use a dummy RegionWidget to generate the security token
         RegionWidget regionWidget = new 
RegionWidgetImpl(String.valueOf(System.currentTimeMillis()),"-1",
                 new RegionImpl("-1", page, -1));
-        String securityToken = "";
-        securityToken = tokenService.getEncryptedSecurityToken(regionWidget, 
widget);
-        return securityToken;
+        return tokenService.getEncryptedSecurityToken(regionWidget, widget);
+    }
+
+    @Override
+    public String 
getEncryptedSecurityToken(org.apache.rave.rest.model.RegionWidget item) {
+        return tokenService.getEncryptedSecurityToken(item.getId(), 
item.getWidgetUrl(), item.getOwnerId());
     }
 
     private void validate(Widget widget) {

Modified: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/EncryptedBlobSecurityTokenService.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/EncryptedBlobSecurityTokenService.java?rev=1462637&r1=1462636&r2=1462637&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/EncryptedBlobSecurityTokenService.java
 (original)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/service/impl/EncryptedBlobSecurityTokenService.java
 Fri Mar 29 20:50:09 2013
@@ -148,19 +148,28 @@ public class EncryptedBlobSecurityTokenS
         return getEncryptedSecurityToken(regionWidget, new WidgetImpl("-1", 
securityToken.getAppUrl()));
     }
 
+    @Override
+    public String getEncryptedSecurityToken(String moduleId, String url, 
String ownerId) {
+        String encryptedToken;
+
+        try {
+            BlobCrypterSecurityToken securityToken = 
this.getBlobCrypterSecurityToken(url, moduleId,  ownerId, 
userService.getAuthenticatedUser());
+            encryptedToken = this.encryptSecurityToken(securityToken);
+        } catch (Exception e) {
+            throw new SecurityTokenException("Error creating security token 
from regionWidget", e);
+        }
+
+        return encryptedToken;
+    }
+
     private BlobCrypterSecurityToken getBlobCrypterSecurityToken(RegionWidget 
regionWidget, Widget widget)
             throws SecurityTokenException {
+        String moduleUrl = widget != null ? widget.getUrl() : "";
+        String moduleId = String.valueOf(regionWidget.getId());
+        String ownerId = regionWidget.getRegion().getPage().getOwnerId();
         User user = userService.getAuthenticatedUser();
 
-        Map<String, String> values = new HashMap<String, String>();
-        values.put(AbstractSecurityToken.Keys.APP_URL.getKey(), widget != null 
? widget.getUrl() : "");
-        values.put(AbstractSecurityToken.Keys.MODULE_ID.getKey(), 
String.valueOf(regionWidget.getId()));
-        values.put(AbstractSecurityToken.Keys.OWNER.getKey(),
-                
String.valueOf(userService.getUserById(regionWidget.getRegion().getPage().getOwnerId()).getUsername()));
-        values.put(AbstractSecurityToken.Keys.VIEWER.getKey(), 
String.valueOf(user.getUsername()));
-        values.put(AbstractSecurityToken.Keys.TRUSTED_JSON.getKey(), "");
-
-        BlobCrypterSecurityToken securityToken = new 
BlobCrypterSecurityToken(container, domain, null, values);
+        BlobCrypterSecurityToken securityToken = 
getBlobCrypterSecurityToken(moduleUrl, moduleId, ownerId, user);
 
         if (logger.isTraceEnabled()) {
             logger.trace("Token created for regionWidget " + 
regionWidget.toString() + " and user " + user.toString());
@@ -169,6 +178,17 @@ public class EncryptedBlobSecurityTokenS
         return securityToken;
     }
 
+    private BlobCrypterSecurityToken getBlobCrypterSecurityToken(String 
moduleUrl, String moduleId, String ownerId, User user) {
+       Map<String, String> values = new HashMap<String, String>();
+        values.put(AbstractSecurityToken.Keys.APP_URL.getKey(), moduleUrl);
+        values.put(AbstractSecurityToken.Keys.MODULE_ID.getKey(), moduleId);
+        values.put(AbstractSecurityToken.Keys.OWNER.getKey(), 
String.valueOf(userService.getUserById(ownerId).getUsername()));
+        values.put(AbstractSecurityToken.Keys.VIEWER.getKey(), 
String.valueOf(user.getUsername()));
+        values.put(AbstractSecurityToken.Keys.TRUSTED_JSON.getKey(), "");
+        values.put(AbstractSecurityToken.Keys.EXPIRES.getKey(), 
String.valueOf(System.currentTimeMillis() + (24 * 60 * 60 * 1000)));
+        return new BlobCrypterSecurityToken(container, domain, null, values);
+    }
+
     private String encryptSecurityToken(BlobCrypterSecurityToken 
securityToken) throws SecurityTokenException {
         String encryptedToken = null;
 

Added: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/model/OpenSocialRegionWidget.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/model/OpenSocialRegionWidget.java?rev=1462637&view=auto
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/model/OpenSocialRegionWidget.java
 (added)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/model/OpenSocialRegionWidget.java
 Fri Mar 29 20:50:09 2013
@@ -0,0 +1,45 @@
+package org.apache.rave.provider.opensocial.web.model;
+
+import org.apache.rave.rest.model.RegionWidget;
+
+public class OpenSocialRegionWidget extends RegionWidget {
+    protected String securityToken;
+    protected String metadata;
+
+    public OpenSocialRegionWidget() {  }
+
+    public OpenSocialRegionWidget(RegionWidget base, String securityToken, 
String metadata) {
+        this(base);
+        this.securityToken = securityToken;
+        this.metadata = metadata;
+    }
+
+    public OpenSocialRegionWidget(RegionWidget base) {
+        this.id = base.getId();
+        this.type = base.getType();
+        this.widgetId = base.getWidgetId();
+        this.widgetUrl = base.getWidgetUrl();
+        this.regionId = base.getRegionId();
+        this.collapsed = base.isCollapsed();
+        this.locked = base.isLocked();
+        this.hideChrome = base.isHideChrome();
+        this.ownerId = base.getOwnerId();
+        this.userPrefs = base.getUserPrefs();
+    }
+
+    public String getSecurityToken() {
+        return securityToken;
+    }
+
+    public void setSecurityToken(String securityToken) {
+        this.securityToken = securityToken;
+    }
+
+    public String getMetadata() {
+        return metadata;
+    }
+
+    public void setMetadata(String metadata) {
+        this.metadata = metadata;
+    }
+}

Added: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialRegionWidgetRenderer.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialRegionWidgetRenderer.java?rev=1462637&view=auto
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialRegionWidgetRenderer.java
 (added)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialRegionWidgetRenderer.java
 Fri Mar 29 20:50:09 2013
@@ -0,0 +1,44 @@
+package org.apache.rave.provider.opensocial.web.renderer;
+
+import org.apache.rave.portal.web.renderer.RegionWidgetRenderer;
+import org.apache.rave.portal.web.renderer.model.RenderContext;
+import org.apache.rave.provider.opensocial.Constants;
+import org.apache.rave.provider.opensocial.service.OpenSocialService;
+import org.apache.rave.provider.opensocial.web.model.OpenSocialRegionWidget;
+import org.apache.rave.rest.model.RegionWidget;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class OpenSocialRegionWidgetRenderer implements RegionWidgetRenderer {
+    private static Logger logger = 
LoggerFactory.getLogger(OpenSocialRegionWidgetRenderer.class);
+
+    private final OpenSocialService openSocialService;
+
+    @Autowired
+    public OpenSocialRegionWidgetRenderer(OpenSocialService openSocialService) 
{
+        this.openSocialService = openSocialService;
+    }
+
+    @Override
+    public String getSupportedContext() {
+        return Constants.WIDGET_TYPE;
+    }
+
+    @Override
+    public String render(RegionWidget item, RenderContext context) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public RegionWidget prepareForRender(RegionWidget item) {
+        logger.debug("Building OpenSocialRegionWidget for " + item.getId());
+        return new OpenSocialRegionWidget(
+                item,
+                openSocialService.getEncryptedSecurityToken(item),
+                openSocialService.getGadgetMetadata(item.getWidgetUrl())
+        );
+    }
+}


Reply via email to