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


Project: http://git-wip-us.apache.org/repos/asf/rave/repo
Commit: http://git-wip-us.apache.org/repos/asf/rave/commit/2b91629c
Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/2b91629c
Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/2b91629c

Branch: refs/heads/master
Commit: 2b91629c79ee8130a77ee554f29bb177e88597a7
Parents: 0c1ee0e
Author: Stanton Sievers <[email protected]>
Authored: Mon Aug 11 13:43:57 2014 -0400
Committer: Stanton Sievers <[email protected]>
Committed: Mon Aug 11 13:43:57 2014 -0400

----------------------------------------------------------------------
 .../org/apache/rave/model/PageTemplateWidget.java  | 17 +++++++++++++++++
 .../java/org/apache/rave/model/RegionWidget.java   | 17 +++++++++++++++++
 .../org/apache/rave/rest/model/RegionWidget.java   | 12 ++++++++++++
 .../portal/model/impl/PageTemplateWidgetImpl.java  | 13 +++++++++++++
 .../rave/portal/model/impl/RegionWidgetImpl.java   | 12 ++++++++++++
 .../java/org/apache/rave/portal/util/PageUtil.java |  1 +
 .../rave/portal/model/JpaPageTemplateWidget.java   | 12 ++++++++++++
 .../apache/rave/portal/model/JpaRegionWidget.java  | 12 ++++++++++++
 .../renderer/OpenSocialWidgetWrapperRenderer.java  |  2 ++
 .../web/renderer/OpenSocialWidgetRendererTest.java |  4 ++++
 10 files changed, 102 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-components/rave-core-api/src/main/java/org/apache/rave/model/PageTemplateWidget.java
----------------------------------------------------------------------
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 @@ public interface PageTemplateWidget {
     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);
 }

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-components/rave-core-api/src/main/java/org/apache/rave/model/RegionWidget.java
----------------------------------------------------------------------
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 com.fasterxml.jackson.annotation.JsonBackReference;
 
 import javax.xml.bind.annotation.XmlTransient;
 import java.util.List;
+import java.util.Map;
 
 @XmlTransient
 public interface RegionWidget {
@@ -60,4 +61,20 @@ public interface RegionWidget {
     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);
 }

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
----------------------------------------------------------------------
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 org.apache.rave.model.RegionWidgetPreference;
 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 @@ public class RegionWidget  implements RestEntity{
     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 @@ public class RegionWidget  implements RestEntity{
         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 @@ public class RegionWidget  implements RestEntity{
         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();

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageTemplateWidgetImpl.java
----------------------------------------------------------------------
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 @@ package org.apache.rave.portal.model.impl;
 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 @@ public class PageTemplateWidgetImpl implements 
PageTemplateWidget {
     private String widgetId;
     private boolean locked;
     private boolean hideChrome;
+    private Map<String, Object> properties;
 
     public PageTemplateWidgetImpl() {
 
@@ -86,6 +89,16 @@ public class PageTemplateWidgetImpl implements 
PageTemplateWidget {
     }
 
     @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;

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/RegionWidgetImpl.java
----------------------------------------------------------------------
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.RegionWidget;
 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 @@ public class RegionWidgetImpl implements RegionWidget {
     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 @@ public class RegionWidgetImpl implements RegionWidget {
     }
 
     @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;

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/PageUtil.java
----------------------------------------------------------------------
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 @@ public class PageUtil {
             regionWidget.setHideChrome(ptw.isHideChrome());
             regionWidget.setRenderOrder((int) ptw.getRenderSeq());
             regionWidget.setWidgetId(ptw.getWidgetId());
+            regionWidget.setProperties(ptw.getProperties());
             widgets.add(regionWidget);
         }
         return widgets;

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplateWidget.java
----------------------------------------------------------------------
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 class JpaPageTemplateWidget implements BasicEntity, 
Serializable, PageTem
     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
+    }
 }

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaRegionWidget.java
----------------------------------------------------------------------
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 javax.persistence.*;
 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 @@ public class JpaRegionWidget implements BasicEntity, 
Serializable, RegionWidget
     }
 
     @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;

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.java
----------------------------------------------------------------------
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 @@ public class OpenSocialWidgetWrapperRenderer implements 
RegionWidgetWrapperRende
             " 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 @@ public class OpenSocialWidgetWrapperRenderer implements 
RegionWidgetWrapperRende
                 isDefault,
                 JsonUtils.stringify(widget.getProperties()),
                 JsonUtils.stringify(item.getRegion().getProperties()),
+                JsonUtils.stringify(item.getProperties())
                 );
     }
 

http://git-wip-us.apache.org/repos/asf/rave/blob/2b91629c/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
----------------------------------------------------------------------
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 @@ public class OpenSocialWidgetRendererTest {
         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 @@ public class OpenSocialWidgetRendererTest {
                         " 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 @@ public class OpenSocialWidgetRendererTest {
                         " subPage: {id: null, name: '', isDefault: false}," +
                         " properties: null," +
                         " regionProperties: null," +
+                        " regionWidgetProperties: null" +
                         "})" +
                         "});</script>";
 

Reply via email to