Author: mfranklin
Date: Tue Nov 19 23:55:21 2013
New Revision: 1543653
URL: http://svn.apache.org/r1543653
Log:
Committing patch for RAVE-1075
Added:
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cRegionWidgetRenderer.java
Modified:
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Widget.java
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Widget.java
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/WidgetImpl.java
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaWidgetConverter.java
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaWidgetConverterTest.java
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaWidgetRepositoryTest.java
rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java
rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverterTest.java
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.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/W3cWidgetWrapperRenderer.java
Modified:
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Widget.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Widget.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Widget.java
(original)
+++
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Widget.java
Tue Nov 19 23:55:21 2013
@@ -21,6 +21,7 @@ package org.apache.rave.model;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlTransient;
import java.util.List;
+import java.util.Map;
@XmlTransient
public interface Widget {
@@ -106,4 +107,20 @@ public interface Widget {
boolean isFeatured();
void setFeatured(boolean featured);
+
+ /**
+ * Generic property bag for extension of the 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);
}
Modified:
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Widget.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Widget.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Widget.java
(original)
+++
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Widget.java
Tue Nov 19 23:55:21 2013
@@ -21,6 +21,7 @@ package org.apache.rave.rest.model;
import org.apache.rave.model.WidgetStatus;
import javax.xml.bind.annotation.*;
+import java.util.Map;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Widget", propOrder = {
@@ -51,6 +52,8 @@ public class Widget {
private String description;
@XmlElement(name = "status")
private WidgetStatus status;
+ @XmlElement(name = "properties")
+ private Map<String, Object> properties;
@XmlElement(name = "disable")
private boolean disable;
@XmlElement(name = "disabledMessage")
@@ -75,6 +78,7 @@ public class Widget {
this.disable = base.isDisableRendering();
this.disabledMessage = base.getDisableRenderingMessage();
this.featured = base.isFeatured();
+ this.properties = base.getProperties();
}
@@ -166,6 +170,14 @@ public class Widget {
this.status = status;
}
+ public Map<String, Object> getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
public boolean isDisable() {
return disable;
}
Modified:
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/WidgetImpl.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/WidgetImpl.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/WidgetImpl.java
(original)
+++
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/WidgetImpl.java
Tue Nov 19 23:55:21 2013
@@ -22,6 +22,7 @@ import org.apache.rave.model.*;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
public class WidgetImpl implements Widget {
private String id;
@@ -43,6 +44,7 @@ public class WidgetImpl implements Widge
private List<WidgetTag> tags = new ArrayList<WidgetTag>();
private List<Category> categories = new ArrayList<Category>();
private boolean featured;
+ private Map<String, Object> properties;
public WidgetImpl() {}
@@ -207,6 +209,14 @@ public class WidgetImpl implements Widge
this.featured = featured;
}
+ public Map<String, Object> getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
Modified:
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java
(original)
+++
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java
Tue Nov 19 23:55:21 2013
@@ -81,5 +81,6 @@ public class DefaultWidgetsResource impl
fromDb.setDisableRendering(widget.isDisable());
fromDb.setDisableRenderingMessage(widget.getDisabledMessage());
fromDb.setFeatured(widget.isFeatured());
+ fromDb.setProperties(widget.getProperties());
}
}
Modified:
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java
(original)
+++
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java
Tue Nov 19 23:55:21 2013
@@ -20,6 +20,7 @@ package org.apache.rave.rest.impl;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import org.apache.rave.model.Widget;
import org.apache.rave.model.WidgetStatus;
import org.apache.rave.portal.model.impl.WidgetImpl;
@@ -31,6 +32,7 @@ import org.junit.Before;
import org.junit.Test;
import java.util.List;
+import java.util.Map;
import static org.easymock.EasyMock.*;
import static org.hamcrest.CoreMatchers.*;
@@ -60,6 +62,9 @@ public class DefaultWidgetsResourceTest
w1.setDisableRendering(true);
w1.setDisableRenderingMessage("");
w1.setFeatured(true);
+ Map<String, Object> properties = Maps.newHashMap();
+ properties.put("foo", "bar");
+ w1.setProperties(properties);
w2 = new WidgetImpl("2", "http://example.com/2");
w3 = new WidgetImpl("1", "http://example.com/2");
}
@@ -130,5 +135,6 @@ public class DefaultWidgetsResourceTest
assertThat(widget.isDisable(),
is(equalTo(source.isDisableRendering())));
assertThat(widget.getDisabledMessage(),
is(equalTo(source.getDisableRenderingMessage())));
assertThat(widget.isFeatured(), is(equalTo(source.isFeatured())));
+ assertThat((String)widget.getProperties().get("foo"),
is(equalTo("bar")));
}
}
Modified:
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java
Tue Nov 19 23:55:21 2013
@@ -54,7 +54,7 @@ import java.util.*;
})
@Access(AccessType.FIELD)
public class JpaPage implements BasicEntity, Serializable, Page {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 2L;
public static final String DELETE_BY_USER_ID_AND_PAGE_TYPE =
"JpaPage.deleteByUserIdAndPageType";
public static final String USER_HAS_PERSON_PAGE = "JpaPage.hasPersonPage";
Modified:
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java
Tue Nov 19 23:55:21 2013
@@ -19,37 +19,19 @@
package org.apache.rave.portal.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.rave.model.*;
import org.apache.rave.portal.model.conversion.ConvertingListProxyFactory;
+import org.apache.rave.util.JsonUtils;
-import javax.persistence.Access;
-import javax.persistence.AccessType;
-import javax.persistence.Basic;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.Lob;
-import javax.persistence.ManyToMany;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
+import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* A widget
@@ -84,7 +66,7 @@ import java.util.List;
@NamedQuery(name = JpaWidget.WIDGET_UNASSIGN_OWNER, query = "UPDATE
JpaWidget w SET w.ownerId = null " + JpaWidget.WHERE_CLAUSE_OWNER )
})
public class JpaWidget implements BasicEntity, Serializable, Widget {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 2L;
public static final String PARAM_SEARCH_TERM = "searchTerm";
public static final String PARAM_STATUS = "widgetStatus";
@@ -218,6 +200,15 @@ public class JpaWidget implements BasicE
@Column(name = "featured", columnDefinition = "boolean default false")
private boolean featured;
+ @Lob @JsonIgnore
+ @Column(name = "serialized_data")
+ private String serializedData;
+
+ //It will be the responsibility of the repository to ensure that this
+ //property is set when the page is retrieved from the database
+ @Transient
+ private Map<String, Object> properties;
+
public JpaWidget() {
}
@@ -465,6 +456,38 @@ public class JpaWidget implements BasicE
}
@Override
+ public Map<String, Object> getProperties() {
+ return properties;
+ }
+
+ @Override
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
+ public String getSerializedData() {
+ return serializedData;
+ }
+
+ public void setSerializedData(String serializedData) {
+ this.serializedData = serializedData;
+ }
+
+ public void serializeData() {
+ Map<String, Object> properties = this.getProperties();
+ if(properties != null) {
+ serializedData = JsonUtils.stringify(properties);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public void deserializeData() {
+ if(serializedData != null) {
+ this.setProperties(JsonUtils.parse(serializedData, Map.class));
+ }
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
Modified:
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaWidgetConverter.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaWidgetConverter.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaWidgetConverter.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaWidgetConverter.java
Tue Nov 19 23:55:21 2013
@@ -73,5 +73,6 @@ public class JpaWidgetConverter implemen
converted.setTags(source.getTags());
converted.setCategories(source.getCategories());
converted.setFeatured(source.isFeatured());
+ converted.setProperties(source.getProperties());
}
}
Modified:
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java
Tue Nov 19 23:55:21 2013
@@ -93,13 +93,13 @@ public class JpaWidgetRepository impleme
public List<Widget> getAll() {
log.warn("Requesting potentially large resultset of Widget. No
pagesize set.");
TypedQuery<JpaWidget> query =
manager.createNamedQuery(JpaWidget.GET_ALL, JpaWidget.class);
- return CollectionUtils.<Widget>toBaseTypedList(query.getResultList());
+ return expandProperties(query.getResultList());
}
@Override
public List<Widget> getLimitedList(int offset, int pageSize) {
TypedQuery<JpaWidget> query =
manager.createNamedQuery(JpaWidget.GET_ALL, JpaWidget.class);
- return
CollectionUtils.<Widget>toBaseTypedList(getPagedResultList(query, offset,
pageSize));
+ return expandProperties(getPagedResultList(query, offset, pageSize));
}
@Override
@@ -114,7 +114,7 @@ public class JpaWidgetRepository impleme
TypedQuery<JpaWidget> query =
manager.createNamedQuery(JpaWidget.WIDGET_GET_BY_FREE_TEXT,
JpaWidget.class);
setFreeTextSearchTerm(query, searchTerm);
- return
CollectionUtils.<Widget>toBaseTypedList(getPagedResultList(query, offset,
pageSize));
+ return expandProperties(getPagedResultList(query, offset, pageSize));
}
@Override
@@ -130,7 +130,7 @@ public class JpaWidgetRepository impleme
TypedQuery<JpaWidget> query =
manager.createNamedQuery(JpaWidget.WIDGET_GET_BY_STATUS,
JpaWidget.class);
query.setParameter(JpaWidget.PARAM_STATUS, widgetStatus);
- return
CollectionUtils.<Widget>toBaseTypedList(getPagedResultList(query, offset,
pageSize));
+ return expandProperties(getPagedResultList(query, offset, pageSize));
}
@Override
@@ -150,7 +150,7 @@ public class JpaWidgetRepository impleme
query.where(getStatusAndTypeAndFreeTextPredicates(cb, widgetType,
widgetStatus, type, searchTerm));
query.orderBy(getOrderByTitleAsc(cb, widgetType));
- return
CollectionUtils.<Widget>toBaseTypedList(getPagedResultList(manager.createQuery(query),
offset, pageSize));
+ return expandProperties(getPagedResultList(manager.createQuery(query),
offset, pageSize));
}
@Override
@@ -169,7 +169,7 @@ public class JpaWidgetRepository impleme
public List<Widget> getByOwner(User owner, int offset, int pageSize) {
TypedQuery<JpaWidget> query =
manager.createNamedQuery(JpaWidget.WIDGET_GET_BY_OWNER, JpaWidget.class);
query.setParameter(JpaWidget.PARAM_OWNER, owner.getId());
- return
CollectionUtils.<Widget>toBaseTypedList(getPagedResultList(query, offset,
pageSize));
+ return expandProperties(getPagedResultList(query, offset, pageSize));
}
@Override
@@ -190,7 +190,7 @@ public class JpaWidgetRepository impleme
// url is a unique field, so no paging needed
query.setParameter(JpaWidget.PARAM_URL, widgetUrl);
final List<JpaWidget> resultList = query.getResultList();
- return getSingleResult(resultList);
+ return expandProperties(getSingleResult(resultList));
}
@Override
@@ -300,7 +300,7 @@ public class JpaWidgetRepository impleme
Tag tag = tagRepository.getByKeyword(tagKeyword);
TypedQuery<JpaWidget> query =
manager.createNamedQuery(JpaWidget.WIDGET_GET_BY_TAG, JpaWidget.class);
query.setParameter(JpaWidget.PARAM_TAG_ID, tag == null ? null :
Long.parseLong(tag.getId()));
- return
CollectionUtils.<Widget>toBaseTypedList(getPagedResultList(query, offset,
pageSize));
+ return expandProperties(getPagedResultList(query, offset, pageSize));
}
@Override
@@ -329,12 +329,14 @@ public class JpaWidgetRepository impleme
@Override
public Widget get(String id) {
- return manager.find(JpaWidget.class, Long.parseLong(id));
+ return expandProperties(manager.find(JpaWidget.class,
Long.parseLong(id)));
}
@Override
public Widget save(Widget item) {
- return saveOrUpdate(item.getId(), manager, converter.convert(item));
+ JpaWidget converted = converter.convert(item);
+ converted.serializeData();
+ return expandProperties(saveOrUpdate(item.getId(), manager,
converted));
}
@Override
@@ -514,4 +516,18 @@ public class JpaWidgetRepository impleme
query.setParameter("userId", userId == null ? null :
Long.parseLong(userId));
return query.executeUpdate();
}
+
+ private List<Widget> expandProperties(List<JpaWidget> widgets) {
+ for(JpaWidget widget : widgets) {
+ expandProperties(widget);
+ }
+ return CollectionUtils.<Widget>toBaseTypedList(widgets);
+ }
+
+ private JpaWidget expandProperties(JpaWidget widget) {
+ if(widget != null) {
+ widget.deserializeData();
+ }
+ return widget;
+ }
}
Modified:
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaWidgetConverterTest.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaWidgetConverterTest.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaWidgetConverterTest.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaWidgetConverterTest.java
Tue Nov 19 23:55:21 2013
@@ -18,6 +18,7 @@
*/
package org.apache.rave.portal.model.conversion;
+import com.google.common.collect.Maps;
import org.apache.rave.model.*;
import org.apache.rave.portal.model.*;
import org.apache.rave.portal.model.impl.WidgetImpl;
@@ -79,6 +80,7 @@ public class JpaWidgetConverterTest {
template.setTags(new ArrayList<WidgetTag>());
template.setCategories(new ArrayList<Category>());
template.setFeatured(true);
+ template.setProperties(Maps.<String,Object>newHashMap());
Widget jpaTemplate = converter.convert(template);
@@ -103,6 +105,7 @@ public class JpaWidgetConverterTest {
assertThat(jpaTemplate.getTags(), is(equalTo(template.getTags())));
assertThat(jpaTemplate.getCategories(),
is(equalTo(template.getCategories())));
assertThat(jpaTemplate.isFeatured(),
is(equalTo(template.isFeatured())));
+ assertThat(jpaTemplate.getProperties(),
is(equalTo(template.getProperties())));
}
}
Modified:
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaWidgetRepositoryTest.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaWidgetRepositoryTest.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaWidgetRepositoryTest.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaWidgetRepositoryTest.java
Tue Nov 19 23:55:21 2013
@@ -19,8 +19,10 @@
package org.apache.rave.portal.repository.impl;
+import com.google.common.collect.Maps;
import org.apache.rave.model.*;
import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.model.impl.WidgetImpl;
import org.apache.rave.portal.model.util.WidgetStatistics;
import org.apache.rave.portal.repository.TagRepository;
import org.apache.rave.portal.repository.WidgetRepository;
@@ -74,6 +76,7 @@ public class JpaWidgetRepositoryTest {
JpaWidget widget = (JpaWidget)repository.get("1");
assertThat(widget, is(notNullValue()));
assertThat(widget.getEntityId(), is(equalTo(1L)));
+ validateProperties(widget);
}
@Test
@@ -85,10 +88,11 @@ public class JpaWidgetRepositoryTest {
@Test
public void getByUrl_valid() {
final String widgetUrl =
-
"http://hosting.gmodules.com/ig/gadgets/file/112581010116074801021/hamster.xml";
+ "http://www.widget-dico.com/wikipedia/google/wikipedia.xml";
final Widget widget = repository.getByUrl(widgetUrl);
assertNotNull(widget);
assertEquals(widgetUrl, widget.getUrl());
+ validateProperties(widget);
}
@Test
@@ -110,6 +114,13 @@ public class JpaWidgetRepositoryTest {
}
@Test
+ public void getByFreeTextSearch_wiki() {
+ List<Widget> widgets = repository.getByFreeTextSearch("AA", 0, 1);
+ assertEquals(1, widgets.size());
+ validateProperties(widgets);
+ }
+
+ @Test
public void countFreeTextSearch() {
int count = repository.getCountFreeTextSearch("gAdGet");
assertTrue(count >= 2);
@@ -120,14 +131,17 @@ public class JpaWidgetRepositoryTest {
List<Widget> widgets = repository.getAll();
assertThat(widgets, is(notNullValue()));
assertThat(widgets.size() > 4, is(true));
+ validateProperties(widgets);
}
@Test
public void getLimitedList() {
final int pageSize = 3;
+ //Widget 1 should always appear in the list because the query is
ordered
List<Widget> widgets = repository.getLimitedList(0, pageSize);
assertNotNull(widgets);
assertTrue(widgets.size() <= pageSize);
+ validateProperties(widgets);
}
@Test
@@ -142,6 +156,7 @@ public class JpaWidgetRepositoryTest {
List<Widget> published =
repository.getByStatus(WidgetStatus.PUBLISHED, 0, pageSize);
assertNotNull(published);
assertTrue(published.size() > 0);
+ validateProperties(published);
List<Widget> preview = repository.getByStatus(WidgetStatus.PREVIEW, 0,
pageSize);
assertNotNull(preview);
@@ -181,6 +196,16 @@ public class JpaWidgetRepositoryTest {
}
@Test
+ public void getByStatusAndTypeAndFreeText_wiki() {
+ final String searchTerm = "AA";
+ final String type = "OpenSocial";
+ List<Widget> widgets =
repository.getByStatusAndTypeAndFreeTextSearch(WidgetStatus.PUBLISHED, type,
+ searchTerm, 0, 1);
+ assertEquals(1, widgets.size());
+ validateProperties(widgets);
+ }
+
+ @Test
public void countByStatusAndTypeAndFreeText() {
final String searchTerm = "gAdGet";
final String type = "OpenSocial";
@@ -192,6 +217,7 @@ public class JpaWidgetRepositoryTest {
public void getByOwner() {
final User user = new JpaUser(2L);
List<Widget> widgets = repository.getByOwner(user, 0, 10);
+ validateProperties(widgets);
assertEquals(1, widgets.size());
}
@@ -221,6 +247,36 @@ public class JpaWidgetRepositoryTest {
}
@Test
+ @Transactional(readOnly = false)
+ @Rollback
+ @SuppressWarnings("unchecked")
+ public void saveWidgetWithProperties() {
+ final String url = "http://example.com/doesnotexistyet";
+ final String longDescription = "Foo";
+
+ Widget doesnotexist = repository.getByUrl(url);
+ assertNull(doesnotexist);
+
+ Map<String, Object> properties = Maps.newHashMap();
+ Map<String, String> sub = Maps.newHashMap();
+ sub.put("bar", "none");
+ properties.put("sub", sub);
+ properties.put("foo", "bar");
+
+ Widget widget = new WidgetImpl();
+ widget.setTitle("Widget with properties");
+ widget.setUrl(url);
+ widget.setDescription(longDescription);
+ widget.setProperties(properties);
+ widget = repository.save(widget);
+ assertNotNull(widget.getId());
+ assertEquals(longDescription, widget.getDescription());
+ assertEquals(widget.getProperties().get("foo"), "bar");
+
assertEquals(((Map<String,String>)widget.getProperties().get("sub")).get("bar"),
"none");
+ assertNotNull(((JpaWidget)widget).getSerializedData());
+ }
+
+ @Test
public void getAllWidgetStatistics() {
Map<String, WidgetStatistics> widgetStatistics =
repository.getAllWidgetStatistics("1");
@@ -495,4 +551,19 @@ public class JpaWidgetRepositoryTest {
repository.delete(widget);
assertThat(repository.get(WIDGET_ID), is(nullValue()));
}
+
+ private void validateProperties(List<Widget> widgets) {
+ for(Widget w: widgets) {
+ if(w.getId().equals("1")) {
+ validateProperties(w);
+ return;
+ }
+ }
+ throw new RuntimeException("Widget not found in test data");
+ }
+
+ private void validateProperties(Widget w) {
+ assertThat(w.getProperties(), is(not(nullValue())));
+ assertThat(w.getProperties().get("sub"), is(not(nullValue())));
+ }
}
Modified: rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
--- rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql
(original)
+++ rave/trunk/rave-components/rave-jpa/src/test/resources/test_data.sql Tue
Nov 19 23:55:21 2013
@@ -197,8 +197,8 @@ UPDATE RAVE_PORTAL_SEQUENCES SET seq_cou
--- gadget data ---
-- wikipedia widget
set @wikipedia_widget_id = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES WHERE
seq_name = @widget_seq);
-insert into widget (entity_id, title, url, type, description, author,
widget_status, owner_id)
-values(@wikipedia_widget_id,
'Wikipedia','http://www.widget-dico.com/wikipedia/google/wikipedia.xml',
'OpenSocial', 'A Wikipedia Search and Go widget. Language choice.', 'WidgetMe',
'PUBLISHED', @user_id_2);
+insert into widget (entity_id, title, url, type, description, author,
widget_status, serialized_data ,owner_id)
+values(@wikipedia_widget_id,
'AA_Wikipedia','http://www.widget-dico.com/wikipedia/google/wikipedia.xml',
'OpenSocial', 'A Wikipedia Search and Go widget. Language choice.', 'WidgetMe',
'PUBLISHED', '{"sub":{"bar":"none"}, "foo":"bar"}', @user_id_2);
UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name =
@widget_seq;
-- translate widget
Modified:
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java
(original)
+++
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java
Tue Nov 19 23:55:21 2013
@@ -138,6 +138,7 @@ public class MongoDbWidgetConverter impl
converted.setDisableRenderingMessage(source.getDisableRenderingMessage());
converted.setFeatured(source.isFeatured());
converted.setOwnerId(source.getOwnerId());
+ converted.setProperties(source.getProperties());
}
public void setCategoryRepository(CategoryRepository categoryRepository) {
Modified:
rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverterTest.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverterTest.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverterTest.java
(original)
+++
rave/trunk/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverterTest.java
Tue Nov 19 23:55:21 2013
@@ -20,6 +20,7 @@
package org.apache.rave.portal.model.conversion.impl;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import org.apache.rave.model.*;
import org.apache.rave.portal.model.*;
import org.apache.rave.portal.model.impl.*;
@@ -142,6 +143,9 @@ public class MongoDbWidgetConverterTest
WidgetRating wr = new WidgetRatingImpl();
source.getRatings().add(wr);
+ source.setProperties(Maps.<String, Object>newHashMap());
+ source.getProperties().put("sub", "foo");
+
converted = converter.convert(source);
assertThat(converted.getUrl(), is(equalTo("http://mitre.org")));
@@ -181,6 +185,8 @@ public class MongoDbWidgetConverterTest
//Test convertRatings method
assertNotNull(converted.getRatings());
assertNotNull(converted.getRatings().get(0).getId());
+
+ assertThat((String)converted.getProperties().get("sub"),
is(equalTo("foo")));
}
@Test
Modified:
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.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/OpenSocialWidgetWrapperRenderer.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.java
(original)
+++
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetWrapperRenderer.java
Tue Nov 19 23:55:21 2013
@@ -30,6 +30,7 @@ import org.apache.rave.portal.web.render
import org.apache.rave.provider.opensocial.Constants;
import org.apache.rave.provider.opensocial.service.OpenSocialService;
import org.apache.rave.provider.opensocial.service.SecurityTokenService;
+import org.apache.rave.util.JsonUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
@@ -74,7 +75,8 @@ public class OpenSocialWidgetWrapperRend
" widgetId: '%9$s'," +
" locked: %10$s," +
" hideChrome: %11$s," +
- " subPage: {id: %12$s, name: '%13$s', isDefault: %14$s}" +
+ " subPage: {id: %12$s, name: '%13$s', isDefault: %14$s}," +
+ " properties: %15$s" +
"})});</script>";
private static final String MARKUP = "<!-- RegionWidget '%1$s' placeholder
-->";
@@ -154,7 +156,8 @@ public class OpenSocialWidgetWrapperRend
item.isHideChrome(),
pageId,
pageName,
- isDefault
+ isDefault,
+ JsonUtils.stringify(widget.getProperties())
);
}
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=1543653&r1=1543652&r2=1543653&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
Tue Nov 19 23:55:21 2013
@@ -19,6 +19,7 @@
package org.apache.rave.provider.opensocial.web.renderer;
+import com.google.common.collect.Maps;
import org.apache.rave.exception.NotSupportedException;
import org.apache.rave.model.*;
import org.apache.rave.portal.model.impl.*;
@@ -37,6 +38,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Map;
import static org.easymock.EasyMock.*;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -96,6 +98,9 @@ public class OpenSocialWidgetRendererTes
w.setId(WIDGET_ID);
w.setType(Constants.WIDGET_TYPE);
w.setUrl(VALID_GADGET_URL);
+ Map<String, Object> props = Maps.newHashMap();
+ w.setProperties(props);
+ props.put("foo","bar");
Region region = new RegionImpl(REGION_ID);
region.setPage(subPage);
@@ -121,7 +126,8 @@ public class OpenSocialWidgetRendererTes
" widgetId: '" + WIDGET_ID + "'," +
" locked: " + VALID_LOCKED + "," +
" hideChrome: " + VALID_HIDE_CHROME + "," +
- " subPage: {id: '" + VALID_SUBPAGE_ID + "', name: '" +
VALID_SUBPAGE_NAME + "', isDefault: " + VALID_IS_DEFAULT_SUBPAGE + "}" +
+ " subPage: {id: '" + VALID_SUBPAGE_ID + "', name: '" +
VALID_SUBPAGE_NAME + "', isDefault: " + VALID_IS_DEFAULT_SUBPAGE + "}," +
+ " properties: {\"foo\":\"bar\"}" +
"})" +
"});</script>";
@@ -171,7 +177,8 @@ public class OpenSocialWidgetRendererTes
" widgetId: 'null'," +
" locked: false," +
" hideChrome: false," +
- " subPage: {id: null, name: '', isDefault: false}" +
+ " subPage: {id: null, name: '', isDefault: false}," +
+ " properties: null" +
"})" +
"});</script>";
Added:
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cRegionWidgetRenderer.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cRegionWidgetRenderer.java?rev=1543653&view=auto
==============================================================================
---
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cRegionWidgetRenderer.java
(added)
+++
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cRegionWidgetRenderer.java
Tue Nov 19 23:55:21 2013
@@ -0,0 +1,69 @@
+/*
+ * 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.provider.w3c.web.renderer;
+
+
+import org.apache.rave.model.User;
+import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.service.WidgetProviderService;
+import org.apache.rave.portal.service.WidgetService;
+import org.apache.rave.portal.web.renderer.RegionWidgetRenderer;
+import org.apache.rave.portal.web.renderer.model.RenderContext;
+import org.apache.rave.provider.w3c.service.impl.W3CWidget;
+import org.apache.rave.rest.model.RegionWidget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import static org.apache.rave.provider.w3c.Constants.WIDGET_TYPE;
+
+@Component
+public class W3cRegionWidgetRenderer implements RegionWidgetRenderer {
+
+ private final WidgetProviderService widgetService;
+ private final UserService userService;
+ private final WidgetService coreWidgetService;
+
+ @Autowired
+ public W3cRegionWidgetRenderer(@Qualifier("wookieWidgetService")
WidgetProviderService widgetService,
+ UserService userService, WidgetService
coreWidgetService) {
+ this.widgetService = widgetService;
+ this.userService = userService;
+ this.coreWidgetService = coreWidgetService;
+ }
+
+ @Override
+ public String getSupportedContext() {
+ return WIDGET_TYPE;
+ }
+
+ @Override
+ public String render(RegionWidget item, RenderContext context) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public RegionWidget prepareForRender(RegionWidget item) {
+ User user = userService.getAuthenticatedUser();
+ String sharedDataKey = String.valueOf(item.getId());
+ W3CWidget contextualizedWidget = (W3CWidget)
widgetService.getWidget(user, sharedDataKey,
coreWidgetService.getWidget(item.getWidgetId()));
+ item.setWidgetUrl(contextualizedWidget.getUrl());
+ return item;
+ }
+}
Modified:
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetWrapperRenderer.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetWrapperRenderer.java?rev=1543653&r1=1543652&r2=1543653&view=diff
==============================================================================
---
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetWrapperRenderer.java
(original)
+++
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetWrapperRenderer.java
Tue Nov 19 23:55:21 2013
@@ -30,6 +30,7 @@ import org.apache.rave.portal.web.render
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.apache.rave.util.JsonUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
@@ -74,7 +75,8 @@ public class W3cWidgetWrapperRenderer im
" widgetId: %8$s, " +
" locked: %9$s, " +
" hideChrome: %10$s, " +
- " subPage: {id: %11$s, name: '%12$s', isDefault: %13$s}" +
+ " subPage: {id: %11$s, name: '%12$s', isDefault: %13$s}," +
+ " properties: %14$s" +
"})});</script>";
private static final String MARKUP = "<!-- RegionWidget %1$s placeholder
-->";
@@ -188,7 +190,8 @@ public class W3cWidgetWrapperRenderer im
item.isHideChrome(),
pageId,
pageName,
- isDefault);
+ isDefault,
+ JsonUtils.stringify(widget.getProperties()));
}
private boolean isDefaultSubPage(Page subPage) {