RAVE-1276 | Ability to set properties on page template widgets in a page template and have them show up in the derived page's region widgets
diff --git a/rave-components/rave-core-api/src/main/java/org/apache/rave/model/PageTemplateWidget.java b/rave-components/rave-core-api/src/main/java/org/apache/rave/model/PageTemplateWidget.java
index 23e7bfb..0b64dfb 100644
--- a/rave-components/rave-core-api/src/main/java/org/apache/rave/model/PageTemplateWidget.java
+++ b/rave-components/rave-core-api/src/main/java/org/apache/rave/model/PageTemplateWidget.java
@@ -19,6 +19,7 @@
package org.apache.rave.model;
import javax.xml.bind.annotation.XmlTransient;
+import java.util.Map;
/**
*/
@@ -46,4 +47,20 @@
boolean isHideChrome();
void setHideChrome(boolean hideChrome);
+
+ /**
+ * Generic property bag for extension of the page template widget object.
+ *
+ * Rave makes no attempt to understand the shape of properties in the bag.
+ *
+ * @return a valid Map of String to JSON Serializable Object.
+ */
+ Map<String, Object> getProperties();
+
+ /**
+ * Overrides the current properties with a new set.
+ *
+ * @param properties a non-null map of string to JSON serializable objects
+ */
+ void setProperties(Map<String, Object> properties);
}
diff --git a/rave-components/rave-core-api/src/main/java/org/apache/rave/model/RegionWidget.java b/rave-components/rave-core-api/src/main/java/org/apache/rave/model/RegionWidget.java
index 9fe3e7f..36cb82d 100644
--- a/rave-components/rave-core-api/src/main/java/org/apache/rave/model/RegionWidget.java
+++ b/rave-components/rave-core-api/src/main/java/org/apache/rave/model/RegionWidget.java
@@ -23,6 +23,7 @@
import javax.xml.bind.annotation.XmlTransient;
import java.util.List;
+import java.util.Map;
@XmlTransient
public interface RegionWidget {
@@ -60,4 +61,20 @@
boolean isHideChrome();
void setHideChrome(boolean hideChrome);
+
+ /**
+ * Generic property bag for extension of the region widget object.
+ *
+ * Rave makes no attempt to understand the shape of properties in the bag.
+ *
+ * @return a valid Map of String to JSON Serializable Object.
+ */
+ Map<String, Object> getProperties();
+
+ /**
+ * Overrides the current properties with a new set.
+ *
+ * @param properties a non-null map of string to JSON serializable objects
+ */
+ void setProperties(Map<String, Object> properties);
}
diff --git a/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java b/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
index cef2499..96451fd 100644
--- a/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
+++ b/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
@@ -24,6 +24,7 @@
import javax.xml.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RegionWidget", propOrder = {
@@ -52,6 +53,8 @@
protected String ownerId;
@XmlElement(name = "userPrefs")
protected HashMap<String, String> userPrefs;
+ @XmlElement(name = "properties")
+ private Map<String,Object> properties;
public RegionWidget() { }
@@ -64,6 +67,7 @@
this.ownerId = widget.getRegion().getPage().getOwnerId();
this.hideChrome = widget.isHideChrome();
this.userPrefs = createPrefs(widget);
+ this.properties = widget.getProperties();
}
public String getId() {
@@ -146,6 +150,14 @@
this.ownerId = ownerId;
}
+ public Map<String, Object> getProperties() {
+ return this.properties;
+ }
+
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
protected HashMap<String, String> createPrefs(org.apache.rave.model.RegionWidget widget) {
HashMap<String, String> created = null;
List<RegionWidgetPreference> preferences = widget.getPreferences();
diff --git a/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageTemplateWidgetImpl.java b/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageTemplateWidgetImpl.java
index e7d610a..11898e3 100644
--- a/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageTemplateWidgetImpl.java
+++ b/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageTemplateWidgetImpl.java
@@ -21,6 +21,8 @@
import org.apache.rave.model.PageTemplateRegion;
import org.apache.rave.model.PageTemplateWidget;
+import java.util.Map;
+
public class PageTemplateWidgetImpl implements PageTemplateWidget {
private String id;
private PageTemplateRegion pageTemplateRegion;
@@ -28,6 +30,7 @@
private String widgetId;
private boolean locked;
private boolean hideChrome;
+ private Map<String, Object> properties;
public PageTemplateWidgetImpl() {
@@ -86,6 +89,16 @@
}
@Override
+ public Map<String, Object> getProperties() {
+ return this.properties;
+ }
+
+ @Override
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
+ @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof PageTemplateWidgetImpl)) return false;
diff --git a/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/RegionWidgetImpl.java b/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/RegionWidgetImpl.java
index 4d6ac6e..4104b9b 100644
--- a/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/RegionWidgetImpl.java
+++ b/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/RegionWidgetImpl.java
@@ -24,6 +24,7 @@
import org.apache.rave.model.RegionWidgetPreference;
import java.util.List;
+import java.util.Map;
public class RegionWidgetImpl implements RegionWidget {
private String id;
@@ -34,6 +35,7 @@
private List<RegionWidgetPreference> preferences;
private Boolean locked = false;
private Boolean hideChrome = false;
+ private Map<String,Object> properties;
@JsonBackReference
private Region region;
@@ -149,6 +151,16 @@
}
@Override
+ public Map<String, Object> getProperties() {
+ return this.properties;
+ }
+
+ @Override
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
+ @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof RegionWidgetImpl)) return false;
diff --git a/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/PageUtil.java b/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/PageUtil.java
index 93244ba..c2021f9 100644
--- a/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/PageUtil.java
+++ b/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/PageUtil.java
@@ -111,6 +111,7 @@
regionWidget.setHideChrome(ptw.isHideChrome());
regionWidget.setRenderOrder((int) ptw.getRenderSeq());
regionWidget.setWidgetId(ptw.getWidgetId());
+ regionWidget.setProperties(ptw.getProperties());
widgets.add(regionWidget);
}
return widgets;
diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplateWidget.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplateWidget.java
index fbbd6b1..dba1307 100644
--- a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplateWidget.java
+++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplateWidget.java
@@ -18,12 +18,14 @@
*/
package org.apache.rave.portal.model;
+import com.google.common.collect.Maps;
import org.apache.rave.model.PageTemplateRegion;
import org.apache.rave.model.PageTemplateWidget;
import org.apache.rave.portal.model.conversion.JpaConverter;
import javax.persistence.*;
import java.io.Serializable;
+import java.util.Map;
@Entity
@Table(name= "page_template_widget")
@@ -127,4 +129,14 @@
public void setHideChrome(boolean hideChrome) {
this.hideChrome = hideChrome;
}
+
+ @Override
+ public Map<String, Object> getProperties() {
+ return Maps.newHashMap();
+ }
+
+ @Override
+ public void setProperties(Map<String, Object> properties) {
+ // TODO: Implement this
+ }
}
diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaRegionWidget.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaRegionWidget.java
index 2ee328d..62f73ff 100644
--- a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaRegionWidget.java
+++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaRegionWidget.java
@@ -18,6 +18,7 @@
*/
package org.apache.rave.portal.model;
+import com.google.common.collect.Maps;
import org.apache.rave.model.Region;
import org.apache.rave.model.RegionWidget;
import org.apache.rave.model.RegionWidgetPreference;
@@ -29,6 +30,7 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* A widget within a region
@@ -262,6 +264,16 @@
}
@Override
+ public Map<String, Object> getProperties() {
+ return Maps.newHashMap();
+ }
+
+ @Override
+ public void setProperties(Map<String, Object> properties) {
+ // TODO: Implement this
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
diff --git a/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.java b/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.java
index c128516..aaf6203 100644
--- a/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.java
+++ b/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.java
@@ -78,6 +78,7 @@
" subPage: {id: %12$s, name: '%13$s', isDefault: %14$s}," +
" properties: %15$s," +
" regionProperties: %16$s," +
+ " regionWidgetProperties: %17$s" +
"})});</script>";
private static final String MARKUP = "<!-- RegionWidget '%1$s' placeholder -->";
@@ -160,6 +161,7 @@
isDefault,
JsonUtils.stringify(widget.getProperties()),
JsonUtils.stringify(item.getRegion().getProperties()),
+ JsonUtils.stringify(item.getProperties())
);
}
diff --git a/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java b/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
index d113278..30f73e2 100644
--- a/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
+++ b/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
@@ -19,6 +19,7 @@
package org.apache.rave.provider.opensocial.web.renderer;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.apache.rave.exception.NotSupportedException;
import org.apache.rave.model.*;
@@ -114,6 +115,7 @@
rw.setPreferences(Arrays.asList((RegionWidgetPreference) new RegionWidgetPreferenceImpl("1", "color", "blue"),
new RegionWidgetPreferenceImpl("1", "speed", "fast"),
new RegionWidgetPreferenceImpl("1", null, null)));
+ rw.setProperties(ImmutableMap.<String, Object>of("rwFoo", "rwBar"));
final String markup =
"<script>require(['rave'], function(rave){" +
@@ -130,6 +132,7 @@
" subPage: {id: '" + VALID_SUBPAGE_ID + "', name: '" + VALID_SUBPAGE_NAME + "', isDefault: " + VALID_IS_DEFAULT_SUBPAGE + "}," +
" properties: {\"foo\":\"bar\"}," +
" regionProperties: {\"regionFoo\":\"regionBar\"}," +
+ " regionWidgetProperties: {\"rwFoo\":\"rwBar\"}" +
"})" +
"});</script>";
@@ -182,6 +185,7 @@
" subPage: {id: null, name: '', isDefault: false}," +
" properties: null," +
" regionProperties: null," +
+ " regionWidgetProperties: null" +
"})" +
"});</script>";