Author: mfranklin
Date: Thu Mar  7 20:45:38 2013
New Revision: 1454092

URL: http://svn.apache.org/r1454092
Log:
Fixed issue with mongodb region widgets

Modified:
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/ScriptLocation.java
    
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java
    
rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepositoryTest.java
    
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/templates/base_layout.jsp
    rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js
    
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_person_profile.js

Modified: 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/ScriptLocation.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/ScriptLocation.java?rev=1454092&r1=1454091&r2=1454092&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/ScriptLocation.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/renderer/ScriptLocation.java
 Thu Mar  7 20:45:38 2013
@@ -24,6 +24,10 @@ package org.apache.rave.portal.web.rende
  */
 public enum ScriptLocation {
     /**
+     * Renders the given script in the head
+     */
+    HEAD,
+    /**
      * Renders before any third party Rave dependencies
      */
     BEFORE_LIB,

Modified: 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java?rev=1454092&r1=1454091&r2=1454092&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java
 (original)
+++ 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java
 Thu Mar  7 20:45:38 2013
@@ -26,12 +26,13 @@ import org.apache.rave.portal.model.impl
 import org.apache.rave.portal.repository.MongoPageOperations;
 import org.apache.rave.portal.repository.RegionWidgetRepository;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
 import static org.springframework.data.mongodb.core.query.Criteria.where;
+import static org.springframework.data.mongodb.core.query.Query.query;
 
 @Repository
 public class MongoDbRegionWidgetRepository implements RegionWidgetRepository {
@@ -81,7 +82,19 @@ public class MongoDbRegionWidgetReposito
     }
 
     private RegionWidget getRegionWidgetById(Page page, String id) {
-        for(Region region : page.getRegions()) {
+        List<Region> regions = page.getRegions();
+        RegionWidget regionWidget = getRegionWidget(id, regions);
+        if(regionWidget == null && page.getSubPages() != null) {
+            for(Page subPage : page.getSubPages()) {
+                regionWidget = getRegionWidgetById(subPage, id);
+                if(regionWidget != null) break;
+            }
+        }
+        return regionWidget;
+    }
+
+    private RegionWidget getRegionWidget(String id, List<Region> regions) {
+        for(Region region : regions) {
             for(RegionWidget widget : region.getRegionWidgets()) {
                 if(widget.getId().equals(id)) {
                     return widget;
@@ -92,7 +105,20 @@ public class MongoDbRegionWidgetReposito
     }
 
     private int replaceOrRemoveWidget(Page page, RegionWidget item, boolean 
replace) {
-        for(Region region : page.getRegions()) {
+        List<Region> regions = page.getRegions();
+        int index = replaceOrRemoveWidget(item, replace, regions);
+        if(index == -1 && page.getSubPages() != null) {
+            for(Page subPage : page.getSubPages()) {
+                index = replaceOrRemoveWidget(item, replace, 
page.getRegions());
+                if(index != -1) break;
+            }
+        }
+        if(index == -1) throw new IllegalStateException("Widget does not exist 
in parent page regions");
+        return index;
+    }
+
+    private int replaceOrRemoveWidget(RegionWidget item, boolean replace, 
List<Region> regions) {
+        for(Region region : regions) {
             List<RegionWidget> regionWidgets = region.getRegionWidgets();
             for(int i=0; i< regionWidgets.size(); i++) {
                 if(regionWidgets.get(i).getId().equals(item.getId())) {
@@ -104,7 +130,7 @@ public class MongoDbRegionWidgetReposito
                 }
             }
         }
-        throw new IllegalStateException("Widget does not exist in parent page 
regions");
+        return -1;
     }
 
     private Region getRegionById(String id, List<Region> regions) {
@@ -126,7 +152,12 @@ public class MongoDbRegionWidgetReposito
     }
 
     private Page getPageByRegionWidgetId(String id) {
-        return template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))));
+        Criteria criteria = getRegionWidgetIdCriteria(id);
+        return template.findOne(query(new Criteria().orOperator(criteria, 
where("subPages").elemMatch(criteria))));
+    }
+
+    private Criteria getRegionWidgetIdCriteria(String id) {
+        return 
where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)));
     }
 
     public void setTemplate(MongoPageOperations template) {

Modified: 
rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepositoryTest.java?rev=1454092&r1=1454091&r2=1454092&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepositoryTest.java
 (original)
+++ 
rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepositoryTest.java
 Thu Mar  7 20:45:38 2013
@@ -31,6 +31,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 
 import java.util.ArrayList;
@@ -38,9 +39,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import static org.easymock.EasyMock.*;
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.hamcrest.CoreMatchers.*;
 import static org.junit.Assert.*;
 import static org.springframework.data.mongodb.core.query.Criteria.where;
 
@@ -80,7 +79,7 @@ public class MongoDbRegionWidgetReposito
         region.setRegionWidgets(Arrays.<RegionWidget>asList(widget));
         widget.setRegion(region);
 
-        expect(template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))))).andReturn(page);
+        expect(template.findOne(getQuery(id))).andReturn(page);
         replay(template);
         RegionWidget result = widgetRepository.get(id);
         assertNull(result);
@@ -96,7 +95,7 @@ public class MongoDbRegionWidgetReposito
         RegionWidgetImpl widget = new RegionWidgetImpl();
         region.setRegionWidgets(Arrays.<RegionWidget>asList(widget));
         widget.setId("123");
-        expect(template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))))).andReturn(found);
+        expect(template.findOne(getQuery(id))).andReturn(found);
         replay(template);
 
         assertThat(widget, is(sameInstance(widgetRepository.get(id))));
@@ -107,7 +106,7 @@ public class MongoDbRegionWidgetReposito
         String id = "321";
         Page found = new MongoDbPage();
         found.setRegions(new ArrayList<Region>());
-        expect(template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))))).andReturn(found);
+        expect(template.findOne(getQuery(id))).andReturn(found);
         replay(template);
         assertNull(widgetRepository.get(id));
     }
@@ -130,7 +129,7 @@ public class MongoDbRegionWidgetReposito
         parent.setRegions(regions);
         region.setRegionWidgets(regionWidgets);
 
-        expect(template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))))).andReturn(parent);
+        expect(template.findOne(getQuery(id))).andReturn(parent);
         expect(template.save(parent)).andReturn(parent);
         replay(template);
 
@@ -149,7 +148,7 @@ public class MongoDbRegionWidgetReposito
         Page page = new PageImpl();
         page.setRegions(new ArrayList<Region>());
 
-        expect(template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))))).andReturn(page);
+        expect(template.findOne(getQuery(id))).andReturn(page);
         replay(template);
 
         thrown.expect(IllegalStateException.class);
@@ -277,7 +276,7 @@ public class MongoDbRegionWidgetReposito
         found.setRegions(regions);
         region.setRegionWidgets(regionWidgets);
 
-        expect(template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))))).andReturn(found);
+        expect(template.findOne(getQuery(id))).andReturn(found);
         expect(template.save(found)).andReturn(null);
         replay(template);
 
@@ -295,7 +294,7 @@ public class MongoDbRegionWidgetReposito
         Page page = new PageImpl();
         page.setRegions(new ArrayList<Region>());
 
-        expect(template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))))).andReturn(page);
+        expect(template.findOne(getQuery(id))).andReturn(page);
         replay(template);
 
         thrown.expect(IllegalStateException.class);
@@ -304,6 +303,10 @@ public class MongoDbRegionWidgetReposito
         widgetRepository.delete(item);
     }
 
+    private Query getQuery(String id) {
+        return new Query(new 
Criteria().orOperator(where("subPages").elemMatch(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))),where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))));
+    }
+
     @Test
     public void delete_DifferentId() {
         RegionWidgetImpl widget = new RegionWidgetImpl();
@@ -317,7 +320,7 @@ public class MongoDbRegionWidgetReposito
         String id = "4344";
         item.setId(id);
 
-        expect(template.findOne(new 
Query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("_id").is(id)))))).andReturn(page);
+        expect(template.findOne(getQuery(id))).andReturn(page);
         replay(template);
 
         thrown.expect(IllegalStateException.class);

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/templates/base_layout.jsp
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/templates/base_layout.jsp?rev=1454092&r1=1454091&r2=1454092&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/templates/base_layout.jsp
 (original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/templates/base_layout.jsp
 Thu Mar  7 20:45:38 2013
@@ -30,6 +30,7 @@ under the License.
     <rave:rave_css/>
     <rave:custom_css/>
     <rave:third_party_head_js/>
+    <portal:render-script location="${'HEAD'}" />
  </head>
 <body>
 <div class="wrapper">

Modified: rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js?rev=1454092&r1=1454091&r2=1454092&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js 
(original)
+++ rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js Thu 
Mar  7 20:45:38 2013
@@ -992,11 +992,10 @@ var rave = rave || (function () {
         var widgetBody = $(["#widget-", widget.regionWidgetId, 
"-body"].join(""));
         if (widgetBody.length === 0) {
             return;
-        } else {
-            // Widget has already been initialized
-            if (typeof widgetBody.children !== "undefined" && 
widgetBody.children().length !== 0) {
-                return;
-            }
+        }
+        // Widget has already been initialized
+        if (widget.initialized) {
+            return;
         }
 
         if (widget.type == "DISABLED") {
@@ -1009,6 +1008,7 @@ var rave = rave || (function () {
         } else {
             provider.initWidget(widget);
         }
+        widget.initialized = true;
     }
 
     function addProviderToList(provider) {

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_person_profile.js
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_person_profile.js?rev=1454092&r1=1454091&r2=1454092&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_person_profile.js
 (original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_person_profile.js
 Thu Mar  7 20:45:38 2013
@@ -46,7 +46,7 @@ rave.personprofile = rave.personprofile 
              if (subPagesViewedStatus[page] == false) {
                  $(target + " .widget-wrapper").each(function(){
                      var regionWidget = 
rave.getRegionWidgetById(rave.getObjectIdFromDomId(this.id));
-                     regionWidget.restore();
+                     if(regionWidget.restore) regionWidget.restore();
                  });
                  // mark that this sub page has been viewed at least once and 
there is no need to refresh
                  // the widgets in future views


Reply via email to