Author: mfranklin
Date: Wed Nov 6 21:46:34 2013
New Revision: 1539471
URL: http://svn.apache.org/r1539471
Log:
Committing patch for RAVE-1024
Modified:
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Page.java
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.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/conversion/JpaPageConverter.java
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaPageConverterTest.java
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPageRepositoryTest.java
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java
Modified:
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Page.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Page.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Page.java
(original)
+++
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/model/Page.java
Wed Nov 6 21:46:34 2013
@@ -20,6 +20,7 @@ package org.apache.rave.model;
import javax.xml.bind.annotation.XmlTransient;
import java.util.List;
+import java.util.Map;
@XmlTransient
public interface Page {
@@ -63,4 +64,20 @@ public interface Page {
List<PageUser> getMembers();
void setMembers(List<PageUser> members);
+
+ /**
+ * Generic property bag for extension of the page object.
+ *
+ * Rave makes no attempt to understand the shape of the property bag.
+ *
+ * @return a valid Map of String to Object.
+ */
+ Map<String, Object> getProperties();
+
+ /**
+ * Overrides the current properties with a new set.
+ *
+ * @param properties a non-null map of string to JSON serializable object
+ */
+ void setProperties(Map<String, Object> properties);
}
Modified:
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java
(original)
+++
rave/trunk/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java
Wed Nov 6 21:46:34 2013
@@ -22,6 +22,7 @@ package org.apache.rave.rest.model;
import javax.xml.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Page", propOrder = {
@@ -40,6 +41,8 @@ public class Page implements RestEntity
private String pageType;
@XmlElement(name="pageLayoutCode")
private String pageLayoutCode;
+ @XmlElement(name="properties")
+ private Map<String, Object> properties;
@XmlElementWrapper(name = "subPages")
@XmlElement(name="Page")
private List<Page> subPages;
@@ -58,6 +61,7 @@ public class Page implements RestEntity
this.ownerId = source.getOwnerId();
this.pageType = source.getPageType().toString();
this.pageLayoutCode = source.getPageLayout().getCode();
+ this.properties = source.getProperties();
this.subPages = createSubPages(source);
this.regions = createRegions(source);
this.members = createPageUsers(source);
@@ -103,6 +107,14 @@ public class Page implements RestEntity
this.pageLayoutCode = pageLayoutCode;
}
+ public Map<String, Object> getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
public List<Page> getSubPages() {
return subPages;
}
Modified:
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
(original)
+++
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
Wed Nov 6 21:46:34 2013
@@ -21,6 +21,7 @@ package org.apache.rave.portal.model.imp
import org.apache.rave.model.*;
import java.util.List;
+import java.util.Map;
public class PageImpl implements Page {
private String id;
@@ -33,6 +34,7 @@ public class PageImpl implements Page {
private List<Region> regions;
private String pageType;
private List<PageUser> members;
+ private Map<String, Object> properties;
public PageImpl() {}
@@ -146,6 +148,16 @@ public class PageImpl implements Page {
}
@Override
+ public Map<String, Object> getProperties() {
+ return properties;
+ }
+
+ @Override
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
Modified:
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
(original)
+++
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
Wed Nov 6 21:46:34 2013
@@ -27,6 +27,7 @@ import org.springframework.security.acce
import org.springframework.security.access.prepost.PreAuthorize;
import java.util.List;
+import java.util.Map;
/**
* @author carlucci
@@ -240,6 +241,8 @@ public interface PageService {
@PreAuthorize("hasPermission(#regionWidgetId,
'org.apache.rave.model.RegionWidget', 'delete')")
Region removeWidgetFromPage(String regionWidgetId);
+ //TODO re-design update methodology to support a wider set of properties
and re-collapse to a single method
+
/**
* Updates the page properties.
*
@@ -250,6 +253,23 @@ public interface PageService {
@PreAuthorize("hasPermission(#pageId, 'org.apache.rave.model.Page',
'update')")
Page updatePage(String pageId, String name, String pageLayoutCode);
+ //There are cases where we need to update more than just hte name &
layout, but those need to be thought through.
+ //Properties are intended to be managed by the client and to Rave is an
opaque data bag. Rather than re-design the entire
+ //page update methodology as part of adding properties, this addition
allows us to update properties from the client
+ //without making breaking changes to existing code or page mutability
assumptions.
+ /**
+ * Updates the page properties.
+ *
+ * @param pageId the id of the page to update
+ * @param name the new name for the page
+ * @param pageLayoutCode the new layout for the page
+ * @param properties the properties of the page to set. MUST NOT be
null. To clear properties, call with empty map.
+ */
+ @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.model.Page',
'update')")
+ Page updatePage(String pageId, String name, String pageLayoutCode,
Map<String, Object> properties);
+
+ //END TODO
+
/**
* Moves a page to be rendered after another page in order for a user
*
Modified:
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
(original)
+++
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
Wed Nov 6 21:46:34 2013
@@ -42,6 +42,7 @@ import org.springframework.transaction.a
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
@Service
public class DefaultPageService implements PageService {
@@ -330,6 +331,12 @@ public class DefaultPageService implemen
@Override
@Transactional
public Page updatePage(String pageId, String name, String pageLayoutCode) {
+ return updatePage(pageId, name, pageLayoutCode, null);
+ }
+
+ @Override
+ @Transactional
+ public Page updatePage(String pageId, String name, String pageLayoutCode,
Map<String, Object> properties) {
Page page = pageRepository.get(pageId);
PageLayout newLayout =
pageLayoutRepository.getByPageLayoutCode(pageLayoutCode);
PageLayout curLayout = page.getPageLayout();
@@ -352,9 +359,11 @@ public class DefaultPageService implemen
//save the new page properties
page.setName(name);
page.setPageLayout(newLayout);
- pageRepository.save(page);
-
- return page;
+ //Forces callers to send an empty map rather than a null value to
clear properties
+ if(properties != null) {
+ page.setProperties(properties);
+ }
+ return pageRepository.save(page);
}
@Transactional
Modified:
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
(original)
+++
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
Wed Nov 6 21:46:34 2013
@@ -102,7 +102,8 @@ public class DefaultPageResource impleme
throw new BadRequestException("Page pageLayoutCode property must
be defined.");
}
//TODO: a bad page layout code can corrupt the data
- org.apache.rave.model.Page fromDb = pageService.updatePage(id,
page.getName(), page.getPageLayoutCode());
+ //As part of the model refactor, this needs to be made more concise
and clear what properties of a page are mutable and why
+ org.apache.rave.model.Page fromDb = pageService.updatePage(id,
page.getName(), page.getPageLayoutCode(), page.getProperties());
Page responsePage = new Page(fromDb);
return responsePage;
Modified:
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
(original)
+++
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
Wed Nov 6 21:46:34 2013
@@ -20,6 +20,7 @@
package org.apache.rave.portal.service.impl;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import org.apache.rave.model.Page;
import org.apache.rave.model.PageLayout;
import org.apache.rave.model.PageTemplate;
@@ -52,6 +53,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import static org.easymock.EasyMock.*;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -736,7 +738,7 @@ public class DefaultPageServiceTest {
RegionWidget instance = pageService.addWidgetToPage(PAGE_ID,
WIDGET_ID);
- verify(pageRepository,regionRepository,widgetRepository);
+ verify(pageRepository, regionRepository, widgetRepository);
verifyPositions(0, instance, true);
assertThat(originalRegion.getRegionWidgets().get(0),
is(sameInstance(instance)));
@@ -973,6 +975,37 @@ public class DefaultPageServiceTest {
}
@Test
+ public void updatePage_properties() {
+ String newName = "new page name";
+ String layoutName = "layout name";
+ Map<String, Object> props = Maps.newHashMap();
+
+ PageLayoutImpl layout = createStrictMock(PageLayoutImpl.class);
+
expect(layout.getNumberOfRegions()).andReturn(Long.valueOf(2L)).anyTimes();
+ replay(layout);
+
+ //create a strict mock that ensures that the appropriate setters are
+ //called, rather than checking the return value from the function
+ Page curPage = createStrictMock(PageImpl.class);
+ expect(curPage.getPageLayout()).andReturn(layout);
+ curPage.setName(newName);
+ curPage.setPageLayout(layout);
+ curPage.setProperties(props);
+ replay(curPage);
+
+ expect(pageRepository.get(PAGE_ID)).andReturn(curPage);
+ expect(pageRepository.save(curPage)).andReturn(curPage);
+ replay(pageRepository);
+
+
expect(pageLayoutRepository.getByPageLayoutCode(layoutName)).andReturn(layout);
+ replay(pageLayoutRepository);
+
+ pageService.updatePage(PAGE_ID, newName, layoutName, props);
+
+ verify(curPage);
+ }
+
+ @Test
public void updatePage_addRegion() {
String newName = "new page name";
String layoutName = "layout name";
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=1539471&r1=1539470&r2=1539471&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
Wed Nov 6 21:46:34 2013
@@ -18,18 +18,17 @@
*/
package org.apache.rave.portal.model;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.apache.rave.model.*;
import org.apache.rave.portal.model.conversion.ConvertingListProxyFactory;
import org.apache.rave.portal.model.conversion.JpaConverter;
+import org.apache.rave.util.JsonUtils;
import javax.persistence.*;
import javax.xml.bind.annotation.*;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
/**
* A page, which consists of regions, and which may be owned by a {@link
JpaUser} (note the ownership will likely need to
@@ -50,6 +49,7 @@ import java.util.List;
@NamedQuery(name = JpaPage.GET_COUNT, query="SELECT count(p) FROM
JpaPage p"),
@NamedQuery(name = JpaPage.DELETE_BY_USER_ID_AND_PAGE_TYPE,
query="DELETE FROM JpaPage p WHERE p.ownerId = :userId and p.pageType =
:pageType"),
@NamedQuery(name = JpaPage.USER_HAS_PERSON_PAGE, query="SELECT
count(p) FROM JpaPage p WHERE p.ownerId = :userId and p.pageType = :pageType"),
+ @NamedQuery(name = JpaPage.HAS_CONTEXT_PAGE, query="SELECT count(p)
FROM JpaPage p WHERE p.contextId = :contextId and p.pageType = :pageType"),
@NamedQuery(name = JpaPage.GET_BY_CONTEXT_AND_PAGE_TYPE, query="SELECT
p FROM JpaPage p WHERE p.contextId = :contextId and p.pageType = :pageType")
})
@Access(AccessType.FIELD)
@@ -60,6 +60,7 @@ public class JpaPage implements BasicEnt
public static final String USER_HAS_PERSON_PAGE = "JpaPage.hasPersonPage";
public static final String GET_ALL = "JpaPage.getAll";
public static final String GET_COUNT = "JpaPage.getCount";
+ public static final String HAS_CONTEXT_PAGE = "JpaPage.hasContextPage";
public static final String GET_BY_CONTEXT_AND_PAGE_TYPE =
"JpaPage.getByContextAndPageType";
@XmlAttribute(name="id")
@@ -105,6 +106,14 @@ public class JpaPage implements BasicEnt
@OneToMany(targetEntity=JpaPageUser.class, fetch = FetchType.EAGER,
cascade = CascadeType.ALL, mappedBy="page", orphanRemoval=true)
private List<JpaPageUser> members;
+ @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 JpaPage() {
}
@@ -294,6 +303,16 @@ public class JpaPage implements BasicEnt
}
@Override
+ public Map<String, Object> getProperties() {
+ return properties;
+ }
+
+ @Override
+ public void setProperties(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
@@ -320,6 +339,20 @@ public class JpaPage implements BasicEnt
return "Page{" + "entityId=" + entityId + ", name=" + name + ",
ownerId=" + ownerId + ", pageLayout=" + pageLayout + ", pageType=" + pageType +
"}";
}
+ 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));
+ }
+ }
+
/**
* Comparator used to sort sub pages. It looks for PageUser objects
representing the sub pages that are owned
* by the parent page user, and uses the renderSequence as the sorting
field
Modified:
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageConverter.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageConverter.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageConverter.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageConverter.java
Wed Nov 6 21:46:34 2013
@@ -72,6 +72,7 @@ public class JpaPageConverter implements
converted.setParentPage(source.getParentPage());
converted.setRegions(source.getRegions());
converted.setSubPages(source.getSubPages());
+ converted.setProperties(source.getProperties());
}
private void replacePageReferences(Page source, JpaPage converted) {
Modified:
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java
Wed Nov 6 21:46:34 2013
@@ -19,20 +19,21 @@
package org.apache.rave.portal.repository.impl;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.rave.exception.DataSerializationException;
import org.apache.rave.model.*;
import org.apache.rave.portal.model.*;
import org.apache.rave.portal.model.conversion.JpaPageConverter;
import org.apache.rave.portal.repository.PageRepository;
import org.apache.rave.util.CollectionUtils;
+import org.apache.rave.util.JsonUtils;
+import org.json.JSONException;
+import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import java.util.ArrayList;
-import java.util.List;
+import javax.persistence.*;
+import java.util.*;
import static org.apache.rave.persistence.jpa.util.JpaUtil.getPagedResultList;
import static org.apache.rave.persistence.jpa.util.JpaUtil.saveOrUpdate;
@@ -53,12 +54,13 @@ public class JpaPageRepository implement
@Override
public Page get(String id) {
- return manager.find(JpaPage.class, Long.parseLong(id));
+ return expandProperties(manager.find(JpaPage.class,
Long.parseLong(id)));
}
@Override
public Page save(Page item) {
JpaPage page = pageConverter.convert(item);
+ page.serializeData();
return saveOrUpdate(page.getEntityId(), manager, page);
}
@@ -80,7 +82,7 @@ public class JpaPageRepository implement
TypedQuery<JpaPage> query =
manager.createNamedQuery(JpaPageUser.GET_BY_USER_ID_AND_PAGE_TYPE,
JpaPage.class);
query.setParameter("userId", userId);
query.setParameter("pageType", pageType.toUpperCase());
- return CollectionUtils.<Page>toBaseTypedList(query.getResultList());
+ return
expandProperties(CollectionUtils.<Page>toBaseTypedList(query.getResultList()));
}
@Override
@@ -88,7 +90,7 @@ public class JpaPageRepository implement
TypedQuery<JpaPage> query =
manager.createNamedQuery(JpaPage.GET_BY_CONTEXT_AND_PAGE_TYPE, JpaPage.class);
query.setParameter("contextId", contextId);
query.setParameter("pageType", pageType.toUpperCase());
- return CollectionUtils.<Page>toBaseTypedList(query.getResultList());
+ return
expandProperties(CollectionUtils.<Page>toBaseTypedList(query.getResultList()));
}
@Override
@@ -126,8 +128,11 @@ public class JpaPageRepository implement
}
@Override
- public boolean hasPage(String userId, String pageType) {
- return false; //To change body of implemented methods use File |
Settings | File Templates.
+ public boolean hasPage(String contextId, String pageType) {
+ TypedQuery<Long> query =
manager.createNamedQuery(JpaPage.HAS_CONTEXT_PAGE, Long.class);
+ query.setParameter("contextId", contextId);
+ query.setParameter("pageType", pageType);
+ return query.getSingleResult() > 0;
}
@Override
@@ -135,7 +140,7 @@ public class JpaPageRepository implement
TypedQuery<JpaPageUser> query =
manager.createNamedQuery(JpaPageUser.GET_PAGES_FOR_USER, JpaPageUser.class);
query.setParameter("userId", userId);
query.setParameter("pageType", pageType.toUpperCase());
- return
CollectionUtils.<PageUser>toBaseTypedList(query.getResultList());
+ return
expandPageUserProperties(CollectionUtils.<PageUser>toBaseTypedList(query.getResultList()));
}
@Override
@@ -143,7 +148,7 @@ public class JpaPageRepository implement
TypedQuery<JpaPageUser> query =
manager.createNamedQuery(JpaPageUser.GET_SINGLE_RECORD, JpaPageUser.class);
query.setParameter("userId", userId);
query.setParameter("pageId", pageId == null ? null :
Long.parseLong(pageId));
- return query.getSingleResult();
+ return expandPageUserProperties(query.getSingleResult());
}
@Override
@@ -151,6 +156,25 @@ public class JpaPageRepository implement
return convert(pt, user);
}
+ @Override
+ public List<Page> getAll() {
+ TypedQuery<Page> query = manager.createNamedQuery(JpaPage.GET_ALL,
Page.class);
+ return
expandProperties(CollectionUtils.<Page>toBaseTypedList(query.getResultList()));
+ }
+
+ @Override
+ public List<Page> getLimitedList(int offset, int limit) {
+ TypedQuery<Page> query = manager.createNamedQuery(JpaPage.GET_ALL,
Page.class);
+ return
expandProperties(CollectionUtils.<Page>toBaseTypedList(getPagedResultList(query,
offset, limit)));
+ }
+
+ @Override
+ public int getCountAll() {
+ Query query = manager.createNamedQuery(JpaPage.GET_COUNT);
+ Number countResult = (Number) query.getSingleResult();
+ return countResult.intValue();
+ }
+
private void removePageUsers(JpaPage item) {
for(PageUser user : item.getMembers()) {
user.setPage(null);
@@ -160,6 +184,39 @@ public class JpaPageRepository implement
}
}
+ private JpaPage expandProperties(JpaPage page) {
+ if(page != null) {
+ page.deserializeData();
+ }
+ return page;
+ }
+
+ private List<Page> expandProperties(List<Page> pages) {
+ for(Page page : pages) {
+ if(page instanceof JpaPage){
+ expandProperties((JpaPage)page);
+ }
+ }
+ return pages;
+ }
+
+ private JpaPageUser expandPageUserProperties(JpaPageUser pageUser) {
+ Page page = pageUser.getPage();
+ if(page != null && page instanceof JpaPage) {
+ ((JpaPage)page).deserializeData();
+ }
+ return pageUser;
+ }
+
+ private List<PageUser> expandPageUserProperties(List<PageUser> pageUsers) {
+ for(PageUser page : pageUsers) {
+ if(page instanceof JpaPageUser) {
+ expandPageUserProperties((JpaPageUser)page);
+ }
+ }
+ return pageUsers;
+ }
+
/**
* convert: PageTemplate, User -> Page
* Converts the PageTemplate for Person Profiles into a Person Profile Page
@@ -267,23 +324,4 @@ public class JpaPageRepository implement
}
return pages;
}
-
- @Override
- public List<Page> getAll() {
- TypedQuery<Page> query = manager.createNamedQuery(JpaPage.GET_ALL,
Page.class);
- return CollectionUtils.<Page>toBaseTypedList(query.getResultList());
- }
-
- @Override
- public List<Page> getLimitedList(int offset, int limit) {
- TypedQuery<Page> query = manager.createNamedQuery(JpaPage.GET_ALL,
Page.class);
- return CollectionUtils.<Page>toBaseTypedList(getPagedResultList(query,
offset, limit));
- }
-
- @Override
- public int getCountAll() {
- Query query = manager.createNamedQuery(JpaPage.GET_COUNT);
- Number countResult = (Number) query.getSingleResult();
- return countResult.intValue();
- }
}
\ No newline at end of file
Modified:
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaPageConverterTest.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaPageConverterTest.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaPageConverterTest.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/model/conversion/JpaPageConverterTest.java
Wed Nov 6 21:46:34 2013
@@ -32,6 +32,7 @@ import org.springframework.test.context.
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.ArrayList;
+import java.util.HashMap;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
@@ -68,6 +69,7 @@ public class JpaPageConverterTest {
page.setParentPage(new PageImpl("1"));
page.setRegions(new ArrayList<Region>());
page.setSubPages(new ArrayList<Page>());
+ page.setProperties(new HashMap<String, Object>());
JpaPage converted = pageConverter.convert(page);
assertThat(converted, is(not(sameInstance(page))));
@@ -82,5 +84,6 @@ public class JpaPageConverterTest {
assertThat(converted.getPageLayout().getCode(),
is(equalTo(page.getPageLayout().getCode())));
assertThat(converted.getPageType(), is(equalTo(page.getPageType())));
assertThat(converted.getSubPages(), is(equalTo(page.getSubPages())));
+ assertThat(converted.getProperties(),
is(equalTo(page.getProperties())));
}
}
\ No newline at end of file
Modified:
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPageRepositoryTest.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPageRepositoryTest.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPageRepositoryTest.java
(original)
+++
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPageRepositoryTest.java
Wed Nov 6 21:46:34 2013
@@ -37,7 +37,9 @@ import org.springframework.transaction.a
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
@@ -291,6 +293,28 @@ public class JpaPageRepositoryTest {
assertEquals(user.getId(), subPage2.getOwnerId());
}
+
+ @Test
+ @Transactional(readOnly = false)
+ @Rollback(true)
+ public void createPageWithProperties(){
+ Page page = new PageImpl(null, USER_ID);
+ page.setName("FOO");
+ HashMap<String, Object> objectHashMap = new HashMap<String, Object>();
+ HashMap<String, Object> subObject = new HashMap<String, Object>();
+ objectHashMap.put("context", subObject);
+ subObject.put("foo", "bar");
+ page.setProperties(objectHashMap);
+
+ Page fromDb = repository.save(page);
+ //Go and get it again to make sure it is coming from the db
+ fromDb = repository.get(fromDb.getId());
+ Map<String,Object> properties = fromDb.getProperties();
+ assertThat(properties, is(not(nullValue())));
+ assertThat(properties.get("context"), is(instanceOf(Map.class)));
+ assertThat(((Map)properties.get("context")).get("foo"),
is(equalTo((Object)"bar")));
+ }
+
@Test
public void hasPersonPage_true(){
assertTrue(repository.hasPersonPage(USER_ID));
Modified:
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java?rev=1539471&r1=1539470&r2=1539471&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java
(original)
+++
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java
Wed Nov 6 21:46:34 2013
@@ -54,6 +54,7 @@ public class MongoDbPageConverter implem
page.setOwnerId(sourcePage.getOwnerId());
page.setContextId(sourcePage.getContextId());
page.setPageLayoutCode(sourcePage.getPageLayout().getCode());
+ page.setProperties(sourcePage.getProperties());
page.setName(sourcePage.getName());
page.setRegions(sourcePage.getRegions());
//Enforce consistent casing for page types