Author: mfranklin
Date: Wed Oct 31 21:17:31 2012
New Revision: 1404356

URL: http://svn.apache.org/viewvc?rev=1404356&view=rev
Log:
Refactored RegionWidgetRenderer to take a RegionWidgetWrapper that includes the 
Widget instance

Added:
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/model/RegionWidgetWrapper.java
    
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ModelContextTag.java
    
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/WidgetTag.java
Modified:
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.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/test/java/org/apache/rave/portal/web/renderer/RenderServiceTest.java
    
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/PageController.java
    
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java
    
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/PersonTag.java
    
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/RegionWidgetTag.java
    rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld
    
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/PageControllerTest.java
    
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java
    
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/RegionWidgetTagTest.java
    
rave/trunk/rave-portal/src/test/java/renderer/RenderServiceIntegrationTest.java
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.java
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
    
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java
    
rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java

Modified: 
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=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RegionWidgetRenderer.java
 Wed Oct 31 21:17:31 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/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/RenderService.java
 Wed Oct 31 21:17:31 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);
 
 }

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=1404356&r1=1404355&r2=1404356&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
 Wed Oct 31 21:17:31 2012
@@ -20,9 +20,8 @@
 package org.apache.rave.portal.web.renderer.impl;
 
 import org.apache.rave.exception.NotSupportedException;
-import org.apache.rave.portal.model.RegionWidget;
-import org.apache.rave.portal.model.Widget;
 import org.apache.rave.portal.repository.WidgetRepository;
+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.springframework.beans.factory.annotation.Autowired;
@@ -39,15 +38,14 @@ import java.util.*;
 @Service
 public class DefaultRenderService implements RenderService {
 
-    private final Map<String, RegionWidgetRenderer> supportedWidgets;
+    public static final String WIDGET_CONTEXT_KEY = "widget";
 
-    private final WidgetRepository widgetRepository;
+    private final Map<String, RegionWidgetRenderer> supportedWidgets;
 
     @Autowired
     public DefaultRenderService(List<RegionWidgetRenderer> widgetRenderers, 
WidgetRepository widgetRepository) {
         this.supportedWidgets = new HashMap<String, RegionWidgetRenderer>();
         mapRenderersByType(this.supportedWidgets, widgetRenderers);
-        this.widgetRepository = widgetRepository;
     }
 
     @Override
@@ -65,11 +63,10 @@ public class DefaultRenderService implem
      * @throws {@link org.apache.rave.exception.NotSupportedException}
      */
     @Override
-    public String render(RegionWidget rw, RenderContext context) {
-        Widget widget = widgetRepository.get(rw.getWidgetId());
-        RegionWidgetRenderer renderer = supportedWidgets.get(widget.getType());
+    public String render(RegionWidgetWrapper rw, RenderContext context) {
+        RegionWidgetRenderer renderer = 
supportedWidgets.get(rw.getWidget().getType());
         if(renderer == null) {
-            throw new NotSupportedException(widget.getType() + " is not 
supported");
+            throw new NotSupportedException(rw.getWidget().getType() + " is 
not supported");
         }
         return renderer.render(rw, context);
     }

Added: 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/model/RegionWidgetWrapper.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/model/RegionWidgetWrapper.java?rev=1404356&view=auto
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/model/RegionWidgetWrapper.java
 (added)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/model/RegionWidgetWrapper.java
 Wed Oct 31 21:17:31 2012
@@ -0,0 +1,52 @@
+/*
+ * 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
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.rave.portal.web.renderer.model;
+
+
+import org.apache.rave.portal.model.RegionWidget;
+import org.apache.rave.portal.model.Widget;
+
+public class RegionWidgetWrapper {
+    private Widget widget;
+    private RegionWidget regionWidget;
+
+    public RegionWidgetWrapper() { }
+
+    public RegionWidgetWrapper(Widget widget, RegionWidget regionWidget) {
+        this.widget = widget;
+        this.regionWidget = regionWidget;
+    }
+
+    public Widget getWidget() {
+        return widget;
+    }
+
+    public void setWidget(Widget widget) {
+        this.widget = widget;
+    }
+
+    public RegionWidget getRegionWidget() {
+        return regionWidget;
+    }
+
+    public void setRegionWidget(RegionWidget regionWidget) {
+        this.regionWidget = regionWidget;
+    }
+}

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=1404356&r1=1404355&r2=1404356&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
 Wed Oct 31 21:17:31 2012
@@ -25,6 +25,7 @@ import org.apache.rave.portal.model.impl
 import org.apache.rave.portal.model.impl.WidgetImpl;
 import org.apache.rave.portal.repository.WidgetRepository;
 import org.apache.rave.portal.web.renderer.impl.DefaultRenderService;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
 import org.junit.Before;
 import org.junit.Test;
@@ -94,12 +95,14 @@ public class RenderServiceTest {
         RegionWidget rw = new RegionWidgetImpl();
         rw.setWidgetId(w.getId());
 
-        expect(widgetRenderer1.render(rw, context)).andReturn(RENDERED_TYPE_1);
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
+
+        expect(widgetRenderer1.render(wrapper, 
context)).andReturn(RENDERED_TYPE_1);
         expect(widgetRepository.get("1")).andReturn(w);
         replayMocks();
 
         constructFooBarRenderService();
-        assertThat(service.render(rw, context), is(equalTo(RENDERED_TYPE_1)));
+        assertThat(service.render(wrapper, context), 
is(equalTo(RENDERED_TYPE_1)));
     }
 
     @Test
@@ -110,12 +113,14 @@ public class RenderServiceTest {
         RegionWidget rw = new RegionWidgetImpl();
         rw.setWidgetId(w.getId());
 
-        expect(widgetRenderer2.render(rw, context)).andReturn(RENDERED_TYPE_2);
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
+
+        expect(widgetRenderer2.render(wrapper, 
context)).andReturn(RENDERED_TYPE_2);
         expect(widgetRepository.get("1")).andReturn(w);
         replayMocks();
 
         constructFooBarRenderService();
-        assertThat(service.render(rw, context), is(equalTo(RENDERED_TYPE_2)));
+        assertThat(service.render(wrapper, context), 
is(equalTo(RENDERED_TYPE_2)));
     }
 
     @Test(expected = NotSupportedException.class)
@@ -127,12 +132,14 @@ public class RenderServiceTest {
         RegionWidget rw = new RegionWidgetImpl();
         rw.setWidgetId(w.getId());
 
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
+
         expect(widgetRepository.get("1")).andReturn(w);
 
         replayMocks();
 
         constructFooBarRenderService();
-        service.render(rw, context);
+        service.render(wrapper, context);
     }
 
 

Modified: 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/PageController.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/PageController.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/PageController.java
 (original)
+++ 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/PageController.java
 Wed Oct 31 21:17:31 2012
@@ -22,7 +22,6 @@ import org.apache.rave.portal.model.*;
 import org.apache.rave.portal.service.PageLayoutService;
 import org.apache.rave.portal.service.PageService;
 import org.apache.rave.portal.service.UserService;
-import org.apache.rave.portal.service.WidgetService;
 import org.apache.rave.portal.web.controller.util.ControllerUtils;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
@@ -50,16 +49,13 @@ public class PageController {
 
     private PageService pageService;
     private UserService userService;
-    private WidgetService widgetService;
     private PageLayoutService pageLayoutService;
 
     @Autowired
-    public PageController(PageService pageService, UserService userService, 
PageLayoutService pageLayoutService,
-                          WidgetService widgetService) {
+    public PageController(PageService pageService, UserService userService, 
PageLayoutService pageLayoutService) {
         this.pageService = pageService;
         this.userService = userService;
         this.pageLayoutService = pageLayoutService;
-        this.widgetService = widgetService;
     }
 
     @RequestMapping(value = {"/login"}, method = RequestMethod.GET)
@@ -79,16 +75,8 @@ public class PageController {
                 currentPageUser = pageUser;
             }
         }
-        List<Widget> widgets = new ArrayList<Widget>();
-        if (page.getRegions() != null) {
-            for(Region region : page.getRegions()) {
-                for (RegionWidget regionWidget : region.getRegionWidgets()) {
-                    
widgets.add(widgetService.getWidget(regionWidget.getWidgetId()));
-                }
-            }
-        }
         List<PageLayout> pageLayouts = 
pageLayoutService.getAllUserSelectable();
-        addAttributesToModel(model, page, currentPageUser, pages, pageLayouts, 
widgets);
+        addAttributesToModel(model, page, currentPageUser, pages, pageLayouts);
         String view = ControllerUtils.getDeviceAppropriateView(request, 
ViewNames.getPageView(page.getPageLayout().getCode()), ViewNames.MOBILE_HOME);
         ControllerUtils.addNavItemsToModel(view, model, page.getId(), 
userService.getAuthenticatedUser(), currentPageUser.isEditor());
         return view;
@@ -106,16 +94,8 @@ public class PageController {
                     currentPageUser = pageUser;
                 }
             }
-            List<Widget> widgets = new ArrayList<Widget>();
-            if (page.getRegions() != null) {
-                for(Region region : page.getRegions()) {
-                    for (RegionWidget regionWidget : 
region.getRegionWidgets()) {
-                        
widgets.add(widgetService.getWidget(regionWidget.getWidgetId()));
-                    }
-                }
-            }
             List<PageLayout> pageLayouts = 
pageLayoutService.getAllUserSelectable();
-            addAttributesToModel(model, page, currentPageUser, pages, 
pageLayouts, widgets);
+            addAttributesToModel(model, page, currentPageUser, pages, 
pageLayouts);
             String view = ControllerUtils.getDeviceAppropriateView(request, 
ViewNames.getPageView(page.getPageLayout().getCode()), ViewNames.MOBILE_HOME);
             ControllerUtils.addNavItemsToModel(view, model, page.getId(), 
thisUser, currentPageUser.isEditor());
             return view;
@@ -149,11 +129,10 @@ public class PageController {
         return viewablePages;
     }
 
-    private void addAttributesToModel(Model model, Page page, PageUser 
pageUser, List<Page> pages, List<PageLayout> pageLayouts, List<Widget> widgets) 
{
+    private void addAttributesToModel(Model model, Page page, PageUser 
pageUser, List<Page> pages, List<PageLayout> pageLayouts) {
         model.addAttribute(ModelKeys.PAGE, page);
         model.addAttribute(ModelKeys.PAGES, pages);
         model.addAttribute(ModelKeys.PAGE_LAYOUTS, pageLayouts);
         model.addAttribute(ModelKeys.PAGE_USER, pageUser);
-        model.addAttribute(ModelKeys.WIDGETS, widgets);
     }
 }

Modified: 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java
 (original)
+++ 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java
 Wed Oct 31 21:17:31 2012
@@ -19,10 +19,11 @@
 
 package org.apache.rave.portal.web.controller;
 
-import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.Person;
+import org.apache.rave.portal.model.User;
 import org.apache.rave.portal.service.PageService;
 import org.apache.rave.portal.service.UserService;
-import org.apache.rave.portal.service.WidgetService;
 import org.apache.rave.portal.web.controller.util.ControllerUtils;
 import org.apache.rave.portal.web.model.NavigationItem;
 import org.apache.rave.portal.web.model.NavigationMenu;
@@ -32,13 +33,11 @@ import org.apache.rave.portal.web.util.V
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @Controller
@@ -49,13 +48,11 @@ public class ProfileController {
 
        private final UserService userService;
        private final PageService pageService;
-    private final WidgetService widgetService;
 
        @Autowired
-       public ProfileController(UserService userService, PageService 
pageService, WidgetService widgetService) {
+       public ProfileController(UserService userService, PageService 
pageService) {
                this.userService = userService;
         this.pageService = pageService;
-        this.widgetService = widgetService;
        }
 
     /**
@@ -107,16 +104,6 @@ public class ProfileController {
         Page personProfilePage = 
pageService.getPersonProfilePage(user.getId());
         addAttributesToModel(model, user, referringPageId);
 
-        List<Widget> widgets = new ArrayList<Widget>();
-        if (personProfilePage.getRegions() != null) {
-            for(Region region : personProfilePage.getRegions()) {
-                for (RegionWidget regionWidget : region.getRegionWidgets()) {
-                    
widgets.add(widgetService.getWidget(regionWidget.getWidgetId()));
-                }
-            }
-        }
-        model.addAttribute(ModelKeys.WIDGETS, widgets);
-
         model.addAttribute(ModelKeys.PAGE, personProfilePage);
         String view =  
ViewNames.getPersonPageView(personProfilePage.getPageLayout().getCode());
         List<Person> friendRequests = 
userService.getFriendRequestsReceived(user.getUsername());

Added: 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ModelContextTag.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ModelContextTag.java?rev=1404356&view=auto
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ModelContextTag.java
 (added)
+++ 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ModelContextTag.java
 Wed Oct 31 21:17:31 2012
@@ -0,0 +1,110 @@
+/*
+ * 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
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.rave.portal.web.tag;
+
+import org.apache.rave.persistence.Repository;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+
+/**
+ * Adds the model of the specified type ot the page context
+ */
+public class ModelContextTag<T, E extends Repository<T>> extends 
AbstractContextAwareSingletonBeanDependentTag<E> {
+
+    protected ModelContextTag(Class<E> clazz) {
+        super(clazz);
+        this.init();
+    }
+
+    protected String var;
+    protected String id;
+    protected int scope;
+    protected boolean scopeSpecified;
+
+    @Override
+    public int doStartTag() throws JspException {
+        return super.doStartTag();
+    }
+
+    @Override
+    public int doEndTag() throws JspException {
+        this.updateContext(this.getBean().get(id));
+        this.init();
+        return EVAL_PAGE;
+    }
+
+    public String getVar() {
+        return var;
+    }
+
+    public void setVar(String var) {
+        this.var = var;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public int getScope() {
+        return scope;
+    }
+
+    public void setScope(int scope) {
+        this.scope = scope;
+        scopeSpecified = true;
+    }
+
+    protected void init() {
+        this.var = null;
+        this.id = null;
+        this.scope = PageContext.PAGE_SCOPE;
+    }
+
+    protected void updateContext(T result) throws JspException {
+        if (var != null) {
+            /*
+             * Store the result, letting an IllegalArgumentException
+             * propagate back if the scope is invalid (e.g., if an attempt
+             * is made to store something in the session without any
+             * HttpSession existing).
+             */
+            if (result != null) {
+                pageContext.setAttribute(var, result, scope);
+            } else {
+                if (scopeSpecified) {
+                    pageContext.removeAttribute(var, scope);
+                } else {
+                    pageContext.removeAttribute(var);
+                }
+            }
+        } else {
+            handleNoVar(result);
+        }
+    }
+
+    protected void handleNoVar(T result) throws JspException {
+        writeString(result.toString());
+    }
+}

Modified: 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/PersonTag.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/PersonTag.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/PersonTag.java
 (original)
+++ 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/PersonTag.java
 Wed Oct 31 21:17:31 2012
@@ -4,86 +4,18 @@ import org.apache.rave.portal.model.Pers
 import org.apache.rave.portal.repository.PersonRepository;
 
 import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
 
 /**
  * Adds the requested person to the requested scope for access via JSPs
  */
-public class PersonTag extends 
AbstractContextAwareSingletonBeanDependentTag<PersonRepository> {
-
-    private String var;
-
-    private String id;
-    private int scope;
-    private boolean scopeSpecified;
+public class PersonTag extends ModelContextTag<Person, PersonRepository> {
 
     public PersonTag() {
         super(PersonRepository.class);
-        this.init();
-    }
-
-    @Override
-    public int doStartTag() throws JspException {
-        return super.doStartTag();
     }
 
     @Override
-    public int doEndTag() throws JspException {
-        this.updateContext(this.getBean().get(id));
-        this.init();
-        return EVAL_PAGE;
-    }
-
-    public String getVar() {
-        return var;
-    }
-
-    public void setVar(String var) {
-        this.var = var;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public int getScope() {
-        return scope;
-    }
-
-    public void setScope(int scope) {
-        this.scope = scope;
-        scopeSpecified = true;
-    }
-
-    private void init() {
-        this.var = null;
-        this.id = null;
-        this.scope = PageContext.PAGE_SCOPE;
-    }
-
-    private void updateContext(Person result) throws JspException {
-        if (var != null) {
-            /*
-             * Store the result, letting an IllegalArgumentException
-             * propagate back if the scope is invalid (e.g., if an attempt
-             * is made to store something in the session without any
-             * HttpSession existing).
-             */
-            if (result != null) {
-                pageContext.setAttribute(var, result, scope);
-            } else {
-                if (scopeSpecified) {
-                    pageContext.removeAttribute(var, scope);
-                } else {
-                    pageContext.removeAttribute(var);
-                }
-            }
-        } else {
-            writeString(result.getUsername());
-        }
+    protected void handleNoVar(Person result) throws JspException {
+        writeString(result.getUsername());
     }
 }

Modified: 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/RegionWidgetTag.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/RegionWidgetTag.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/RegionWidgetTag.java
 (original)
+++ 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/RegionWidgetTag.java
 Wed Oct 31 21:17:31 2012
@@ -22,11 +22,11 @@ package org.apache.rave.portal.web.tag;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.rave.portal.model.RegionWidget;
 import org.apache.rave.portal.model.Widget;
-import org.apache.rave.portal.repository.WidgetRepository;
 import org.apache.rave.portal.web.renderer.RenderScope;
 import org.apache.rave.portal.web.renderer.RenderService;
 import org.apache.rave.portal.web.renderer.ScriptLocation;
 import org.apache.rave.portal.web.renderer.ScriptManager;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.servlet.jsp.JspException;
@@ -94,7 +94,7 @@ public class RegionWidgetTag extends Abs
                 String key = REGISTER_DISABLED_WIDGET_KEY + "-" + 
widget.getId();
                 scriptManager.registerScriptBlock(key, widgetScript, 
ScriptLocation.AFTER_RAVE, RenderScope.CURRENT_REQUEST, getContext());
             } else {
-                writeString(getBean().render(regionWidget, getContext()));
+                writeString(getBean().render(new RegionWidgetWrapper(widget, 
regionWidget), getContext()));
             }
         }
         else {
@@ -103,6 +103,7 @@ public class RegionWidgetTag extends Abs
         //Certain JSP implementations use tag pools.  Setting the regionWidget 
to null ensures that there is no chance a given tag
         //will accidentally re-use a region widget if the attribute in the JSP 
is empty
         regionWidget = null;
+        widget = null;
         return EVAL_BODY_INCLUDE;
     }
 }

Added: 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/WidgetTag.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/WidgetTag.java?rev=1404356&view=auto
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/WidgetTag.java
 (added)
+++ 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/WidgetTag.java
 Wed Oct 31 21:17:31 2012
@@ -0,0 +1,34 @@
+/*
+ * 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
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.rave.portal.web.tag;
+
+import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.repository.WidgetRepository;
+
+/**
+ * Adds the requested person to the requested scope for access via JSPs
+ */
+public class WidgetTag extends ModelContextTag<Widget, WidgetRepository> {
+    public WidgetTag() {
+        super(WidgetRepository.class);
+    }
+
+
+}

Modified: 
rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld 
(original)
+++ rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld 
Wed Oct 31 21:17:31 2012
@@ -50,6 +50,30 @@
         </attribute>
     </tag>
     <tag>
+        <description>Allows access to a org.apache.rave.model.Widget object 
via the configured variable</description>
+        <name>widget</name>
+        <tag-class>org.apache.rave.portal.web.tag.PersonTag</tag-class>
+        <body-content>JSP</body-content>
+        <attribute>
+            <description>The ID of the widget to load</description>
+            <name>id</name>
+            <required>true</required>
+            <rtexprvalue>true</rtexprvalue>
+        </attribute>
+        <attribute>
+            <description>The variable to assign the resulting widget 
to</description>
+            <name>var</name>
+            <required>true</required>
+            <rtexprvalue>true</rtexprvalue>
+        </attribute>
+        <attribute>
+            <description>The scope under which the assignment is 
valid</description>
+            <name>scope</name>
+            <required>false</required>
+            <rtexprvalue>true</rtexprvalue>
+        </attribute>
+    </tag>
+    <tag>
         <description>Renders a given RegionWidget in the page</description>
         <name>render-widget</name>
         <tag-class>org.apache.rave.portal.web.tag.RegionWidgetTag</tag-class>

Modified: 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/PageControllerTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/PageControllerTest.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/PageControllerTest.java
 (original)
+++ 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/PageControllerTest.java
 Wed Oct 31 21:17:31 2012
@@ -74,8 +74,7 @@ public class PageControllerTest {
         userService = createMock(UserService.class);
         pageService = createMock(PageService.class);
         pageLayoutService = createMock(PageLayoutService.class);
-        widgetService = createMock(WidgetService.class);
-        pageController = new PageController(pageService, userService, 
pageLayoutService, widgetService);
+        pageController = new PageController(pageService, userService, 
pageLayoutService);
         model = new ExtendedModelMap();
         request = new MockHttpServletRequest();
 

Modified: 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java
 (original)
+++ 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java
 Wed Oct 31 21:17:31 2012
@@ -19,17 +19,6 @@
 
 package org.apache.rave.portal.web.controller;
 
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.rave.portal.model.Page;
 import org.apache.rave.portal.model.PageLayout;
 import org.apache.rave.portal.model.Person;
@@ -49,6 +38,14 @@ import org.junit.Test;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.ui.ModelMap;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.easymock.EasyMock.*;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
 /**
  * Test class for {@link ProfileController}
  */
@@ -74,8 +71,7 @@ public class ProfileControllerTest {
        public void setup() {
                userService = createMock(UserService.class);
                pageService = createMock(PageService.class);
-        widgetService = createMock(WidgetService.class);
-               profileController = new ProfileController(userService, 
pageService, widgetService);
+               profileController = new ProfileController(userService, 
pageService);
 
         validPageLayout = new PageLayoutImpl();
         validPageLayout.setCode(VALID_PAGE_LAYOUT_CODE);

Modified: 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/RegionWidgetTagTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/RegionWidgetTagTest.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/RegionWidgetTagTest.java
 (original)
+++ 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/RegionWidgetTagTest.java
 Wed Oct 31 21:17:31 2012
@@ -24,11 +24,11 @@ import org.apache.rave.portal.model.Regi
 import org.apache.rave.portal.model.impl.RegionImpl;
 import org.apache.rave.portal.model.impl.RegionWidgetImpl;
 import org.apache.rave.portal.model.impl.WidgetImpl;
-import org.apache.rave.portal.repository.WidgetRepository;
 import org.apache.rave.portal.web.renderer.RenderScope;
 import org.apache.rave.portal.web.renderer.RenderService;
 import org.apache.rave.portal.web.renderer.ScriptLocation;
 import org.apache.rave.portal.web.renderer.ScriptManager;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
 import org.junit.Before;
 import org.junit.Test;
@@ -92,8 +92,10 @@ public class RegionWidgetTagTest {
         Set<String> strings = new HashSet<String>();
         strings.add(WIDGET_TYPE);
 
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(widget, 
regionWidget);
+
         expect(service.getSupportedWidgetTypes()).andReturn(strings);
-        expect(service.render(regionWidget, context)).andReturn(RENDERED);
+        expect(service.render(wrapper, context)).andReturn(RENDERED);
         replay(service);
 
         JspWriter writer = createNiceMock(JspWriter.class);

Modified: 
rave/trunk/rave-portal/src/test/java/renderer/RenderServiceIntegrationTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal/src/test/java/renderer/RenderServiceIntegrationTest.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-portal/src/test/java/renderer/RenderServiceIntegrationTest.java 
(original)
+++ 
rave/trunk/rave-portal/src/test/java/renderer/RenderServiceIntegrationTest.java 
Wed Oct 31 21:17:31 2012
@@ -28,6 +28,7 @@ import org.apache.rave.portal.model.impl
 import org.apache.rave.portal.web.renderer.RenderService;
 import org.apache.rave.portal.web.renderer.ScriptLocation;
 import org.apache.rave.portal.web.renderer.ScriptManager;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
 import 
org.apache.rave.provider.opensocial.repository.impl.ShindigGadgetMetadataRepository;
 import org.easymock.EasyMock;
@@ -119,9 +120,11 @@ public class RenderServiceIntegrationTes
         RegionWidget rw = new RegionWidgetImpl("1", w.getId(), region);
         region.setRegionWidgets(Arrays.asList(rw));
 
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
+
         RenderContext context = new RenderContext();
         context.setProperties(new HashMap());
-        String rendered = service.render(rw, context);
+        String rendered = service.render(wrapper, context);
         assertThat(rendered, is(notNullValue()));
         assertThat(rendered.contains("<!--"), is(true));
         assertThat(scriptManager.getScriptBlocks(ScriptLocation.AFTER_RAVE, 
context).size(), is(equalTo(1)));

Modified: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.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/OpenSocialWidgetRenderer.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.java
 (original)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.java
 Wed Oct 31 21:17:31 2012
@@ -21,12 +21,11 @@ package org.apache.rave.provider.opensoc
 
 import org.apache.rave.exception.NotSupportedException;
 import org.apache.rave.portal.model.*;
-import org.apache.rave.portal.repository.WidgetRepository;
-import org.apache.rave.portal.service.WidgetService;
 import org.apache.rave.portal.web.renderer.RegionWidgetRenderer;
 import org.apache.rave.portal.web.renderer.RenderScope;
 import org.apache.rave.portal.web.renderer.ScriptLocation;
 import org.apache.rave.portal.web.renderer.ScriptManager;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
 import org.apache.rave.provider.opensocial.Constants;
 import org.apache.rave.provider.opensocial.service.OpenSocialService;
@@ -52,17 +51,14 @@ public class OpenSocialWidgetRenderer im
     private OpenSocialService openSocialService;
     private SecurityTokenService securityTokenService;
     private ScriptManager scriptManager;
-    private WidgetService widgetService;
 
     @Autowired
     public OpenSocialWidgetRenderer(OpenSocialService openSocialService,
                                     SecurityTokenService securityTokenService,
-                                    ScriptManager scriptManager,
-                                    WidgetService widgetService) {
+                                    ScriptManager scriptManager) {
         this.openSocialService = openSocialService;
         this.securityTokenService = securityTokenService;
         this.scriptManager = scriptManager;
-        this.widgetService = widgetService;
     }
 
     //Note the widgets.push() call.  This defines the widget objects, which are
@@ -96,20 +92,21 @@ public class OpenSocialWidgetRenderer im
      * @return valid HTML markup
      */
     @Override
-    public String render(RegionWidget item, RenderContext context) {
-        Widget widget = widgetService.getWidget(item.getWidgetId());
+    public String render(RegionWidgetWrapper item, RenderContext context) {
+        Widget widget = item.getWidget();
         String type = widget.getType();
         if (!Constants.WIDGET_TYPE.equals(type)) {
             throw new NotSupportedException("Invalid widget type passed to 
renderer: " + type);
         }
 
-        String widgetScript = getWidgetScript(item, widget);
+        RegionWidget regionWidget = item.getRegionWidget();
+        String widgetScript = getWidgetScript(regionWidget, widget);
         // the key is based off the RegionWidget.id to ensure uniqueness
-        String key = REGISTER_WIDGET_KEY  + (item.getId() == null ? "" :  "-" 
+ item.getId());
+        String key = REGISTER_WIDGET_KEY  + (regionWidget.getId() == null ? "" 
:  "-" + regionWidget.getId());
         scriptManager.registerScriptBlock(key, widgetScript, 
ScriptLocation.AFTER_RAVE, RenderScope.CURRENT_REQUEST, context);
         logger.debug("Gadget Script Data from OpenSocialWidgetRenderer: " + 
widgetScript);
 
-        return String.format(MARKUP, item.getId());
+        return String.format(MARKUP, regionWidget.getId());
     }
 
     private String getWidgetScript(RegionWidget item, Widget widget) {

Modified: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
 (original)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
 Wed Oct 31 21:17:31 2012
@@ -22,12 +22,12 @@ package org.apache.rave.provider.opensoc
 import org.apache.rave.exception.NotSupportedException;
 import org.apache.rave.portal.model.*;
 import org.apache.rave.portal.model.impl.*;
-import org.apache.rave.portal.repository.WidgetRepository;
 import org.apache.rave.portal.service.WidgetService;
 import org.apache.rave.portal.web.renderer.RenderScope;
 import org.apache.rave.portal.web.renderer.Renderer;
 import org.apache.rave.portal.web.renderer.ScriptLocation;
 import org.apache.rave.portal.web.renderer.ScriptManager;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
 import org.apache.rave.provider.opensocial.Constants;
 import org.apache.rave.provider.opensocial.service.OpenSocialService;
@@ -48,7 +48,7 @@ public class OpenSocialWidgetRendererTes
     private OpenSocialService openSocialService;
     private SecurityTokenService securityTokenService;
     private ScriptManager scriptManager;
-    private Renderer<RegionWidget> renderer;
+    private Renderer<RegionWidgetWrapper> renderer;
     private WidgetService widgetService;
 
     private static final String VALID_GADGET_URL = 
"http://www.example.com/gadget.xml";;
@@ -66,7 +66,7 @@ public class OpenSocialWidgetRendererTes
         scriptManager = createStrictMock(ScriptManager.class);
         openSocialService = createNiceMock(OpenSocialService.class);
         securityTokenService = createNiceMock(SecurityTokenService.class);
-        renderer = new OpenSocialWidgetRenderer(openSocialService, 
securityTokenService, scriptManager, widgetService);
+        renderer = new OpenSocialWidgetRenderer(openSocialService, 
securityTokenService, scriptManager);
     }
 
     @Test
@@ -139,7 +139,9 @@ public class OpenSocialWidgetRendererTes
         //expectLastCall();
         //replay(scriptManager);
 
-        String result = renderer.render(rw, renderContext);
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
+
+        String result = renderer.render(wrapper, renderContext);
 
         assertThat(result, is(equalTo("<!-- RegionWidget " + REGION_WIDGET_ID 
+ " placeholder -->")));
         //verify(scriptManager);
@@ -184,7 +186,10 @@ public class OpenSocialWidgetRendererTes
         
scriptManager.registerScriptBlock(OpenSocialWidgetRenderer.REGISTER_WIDGET_KEY, 
markup, ScriptLocation.AFTER_RAVE, RenderScope.CURRENT_REQUEST, null);
         expectLastCall();
         replay(scriptManager);
-        String result = renderer.render(rw, null);
+
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
+
+        String result = renderer.render(wrapper, null);
         verify(scriptManager);
     }
 
@@ -200,6 +205,8 @@ public class OpenSocialWidgetRendererTes
         RegionWidget rw = new RegionWidgetImpl("1");
         rw.setWidgetId(w.getId());
 
-        renderer.render(rw, null);
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
+
+        renderer.render(wrapper, null);
     }
 }

Modified: 
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java
 (original)
+++ 
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java
 Wed Oct 31 21:17:31 2012
@@ -21,13 +21,13 @@ package org.apache.rave.provider.w3c.web
 
 import org.apache.rave.exception.NotSupportedException;
 import org.apache.rave.portal.model.*;
-import org.apache.rave.portal.repository.WidgetRepository;
 import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.service.WidgetProviderService;
 import org.apache.rave.portal.web.renderer.RegionWidgetRenderer;
 import org.apache.rave.portal.web.renderer.RenderScope;
 import org.apache.rave.portal.web.renderer.ScriptLocation;
 import org.apache.rave.portal.web.renderer.ScriptManager;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
 import org.apache.rave.provider.w3c.service.impl.W3CWidget;
 import org.json.JSONException;
@@ -52,15 +52,13 @@ public class W3cWidgetRenderer implement
     private final WidgetProviderService widgetService;
     private final UserService userService;
     private ScriptManager scriptManager;
-    private WidgetRepository widgetRepository;
 
     @Autowired
     public W3cWidgetRenderer(@Qualifier("wookieWidgetService") 
WidgetProviderService widgetService,
-                             UserService userService, ScriptManager 
scriptManager, WidgetRepository widgetRepository) {
+                             UserService userService, ScriptManager 
scriptManager) {
         this.widgetService = widgetService;
         this.userService = userService;
         this.scriptManager = scriptManager;
-        this.widgetRepository = widgetRepository;
     }
 
     /**
@@ -89,18 +87,19 @@ public class W3cWidgetRenderer implement
     /**
      * Renders a {@link org.apache.rave.portal.model.RegionWidget} as HTML 
markup
      *
-     * @param item RegionWidgetImpl to render
+     * @param wrapper RegionWidgetImpl to render
      * @param context
      * @return valid HTML markup
      */
     @Override
-    public String render(RegionWidget item, RenderContext context) {
-        Widget widget = widgetRepository.get(item.getWidgetId());
+    public String render(RegionWidgetWrapper wrapper, RenderContext context) {
+        Widget widget = wrapper.getWidget();
+        RegionWidget item = wrapper.getRegionWidget();
         if(!WIDGET_TYPE.equals(widget.getType())) {
             throw new NotSupportedException("Invalid widget type passed to 
renderer: " + widget.getType());
         }
 
-        String widgetScript = getWidgetScript(item);
+        String widgetScript = getWidgetScript(item, widget);
         // the key is based off the RegionWidget.id to ensure uniqueness
         String key = REGISTER_WIDGET_KEY + "-" + item.getId();
         scriptManager.registerScriptBlock(key, widgetScript, 
ScriptLocation.AFTER_RAVE, RenderScope.CURRENT_REQUEST, context);
@@ -111,10 +110,12 @@ public class W3cWidgetRenderer implement
 
     /**
      * Create a widget script block
+     *
      * @param item the RegionWidget to create a script block for
+     * @param widget
      * @return the script block
      */
-    private String getWidgetScript(RegionWidget item) {
+    private String getWidgetScript(RegionWidget item, Widget widget) {
         User user = userService.getAuthenticatedUser();
 
         //
@@ -125,7 +126,6 @@ public class W3cWidgetRenderer implement
         //
         // Get the Rave Widget for this regionWidget instance
         //
-        Widget widget = widgetRepository.get(item.getWidgetId());
         W3CWidget contextualizedWidget = (W3CWidget) 
widgetService.getWidget(user, sharedDataKey, widget);
 
         //

Modified: 
rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java?rev=1404356&r1=1404355&r2=1404356&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java
 (original)
+++ 
rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java
 Wed Oct 31 21:17:31 2012
@@ -22,11 +22,11 @@ package org.apache.rave.provider.w3c.web
 import org.apache.rave.exception.NotSupportedException;
 import org.apache.rave.portal.model.*;
 import org.apache.rave.portal.model.impl.*;
-import org.apache.rave.portal.repository.WidgetRepository;
 import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.service.WidgetProviderService;
 import org.apache.rave.portal.web.renderer.Renderer;
 import org.apache.rave.portal.web.renderer.ScriptManager;
+import org.apache.rave.portal.web.renderer.model.RegionWidgetWrapper;
 import org.apache.rave.portal.web.renderer.model.RenderContext;
 import org.apache.rave.provider.w3c.Constants;
 import org.apache.rave.provider.w3c.service.impl.W3CWidget;
@@ -47,12 +47,11 @@ public class W3cWidgetRendererTest {
 
     private static final String VALID_WIDGET_URL = 
"http://example.com/widgets/1";;
     private static final String VALID_WIDGET_INSTANCE_URL = 
"http://example.com/widgetinstances/1";;
-    private Renderer<RegionWidget> renderer;
+    private Renderer<RegionWidgetWrapper> renderer;
     private WidgetProviderService wookieService;
     private UserService userService;
     private RenderContext renderContext;
     private ScriptManager scriptManager;
-    private WidgetRepository widgetRepository;
 
     @Before
     public void setup() {
@@ -61,8 +60,7 @@ public class W3cWidgetRendererTest {
         wookieService = createNiceMock(WidgetProviderService.class);
         userService = createNiceMock(UserService.class);
         scriptManager = createNiceMock(ScriptManager.class);
-        widgetRepository = createMock(WidgetRepository.class);
-        renderer = new W3cWidgetRenderer(wookieService, userService, 
scriptManager, widgetRepository);
+        renderer = new W3cWidgetRenderer(wookieService, userService, 
scriptManager);
     }
 
     @Test
@@ -103,14 +101,12 @@ public class W3cWidgetRendererTest {
         W3CWidget wookieWidget = new W3CWidget();
         wookieWidget.setUrl(VALID_WIDGET_INSTANCE_URL);
 
-        expect(widgetRepository.get("1")).andReturn(w);
-        expect(widgetRepository.get("1")).andReturn(w);
-        replay(widgetRepository);
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
 
-        expect(wookieService.getWidget(eq(user), eq(rw.getId().toString()), 
isA(Widget.class))).andReturn(wookieWidget);
+        expect(wookieService.getWidget(eq(user), eq(rw.getId()), 
isA(Widget.class))).andReturn(wookieWidget);
         replay(wookieService);
 
-        String placeholder = renderer.render(rw, renderContext);
+        String placeholder = renderer.render(wrapper, renderContext);
         assertEquals("Script block for widget is incorrect", "<!-- 
RegionWidget " + REGION_WIDGET_ID + " placeholder -->", placeholder);
     }
 
@@ -122,10 +118,9 @@ public class W3cWidgetRendererTest {
         RegionWidget rw = new RegionWidgetImpl("1");
         rw.setWidgetId(w.getId());
 
-        expect(widgetRepository.get("1")).andReturn(w);
-        replay(widgetRepository);
+        RegionWidgetWrapper wrapper = new RegionWidgetWrapper(w, rw);
 
         RenderContext renderContext = createNiceMock(RenderContext.class);
-        renderer.render(rw, renderContext);
+        renderer.render(wrapper, renderContext);
     }
 }


Reply via email to