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