Updated JPA persistence layer to support page template properties git-svn-id: https://svn.apache.org/repos/asf/rave/trunk@1558820 13f79535-47bb-0310-9956-ffa450edef68
Project: http://git-wip-us.apache.org/repos/asf/rave/repo Commit: http://git-wip-us.apache.org/repos/asf/rave/commit/bd5d3af2 Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/bd5d3af2 Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/bd5d3af2 Branch: refs/heads/angular Commit: bd5d3af2cbec1539668cd0565f2cfd8d053a1f77 Parents: bf37971 Author: Matthew B. Franklin <[email protected]> Authored: Thu Jan 16 14:48:41 2014 +0000 Committer: Matthew B. Franklin <[email protected]> Committed: Thu Jan 16 14:48:41 2014 +0000 ---------------------------------------------------------------------- .../rave/persistence/jpa/JpaSerializable.java | 34 ++++++++++++++++++++ .../org/apache/rave/portal/model/JpaPage.java | 5 ++- .../rave/portal/model/JpaPageTemplate.java | 20 +++++++++++- .../org/apache/rave/portal/model/JpaWidget.java | 5 ++- .../conversion/JpaPageTemplateConverter.java | 1 + .../repository/impl/JpaPageRepository.java | 4 +-- .../impl/JpaPageTemplateRepository.java | 27 ++++++++++++---- .../impl/MongoDbPageTemplateConverter.java | 1 + 8 files changed, 86 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/rave/blob/bd5d3af2/rave-components/rave-jpa/src/main/java/org/apache/rave/persistence/jpa/JpaSerializable.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/persistence/jpa/JpaSerializable.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/persistence/jpa/JpaSerializable.java new file mode 100644 index 0000000..502ad40 --- /dev/null +++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/persistence/jpa/JpaSerializable.java @@ -0,0 +1,34 @@ +/* + * 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.persistence.jpa; + +/** + * Provides methods for serializing complex properties into simple, serialized structures + */ +public interface JpaSerializable { + /** + * Serialize the data into persisted fields + */ + void serializeData(); + + /** + * Deserialize the data into the operational fields + */ + void deserializeData(); +} http://git-wip-us.apache.org/repos/asf/rave/blob/bd5d3af2/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java index 8c7e144..ce7a943 100644 --- a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java +++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java @@ -21,6 +21,7 @@ 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.persistence.jpa.JpaSerializable; import org.apache.rave.portal.model.conversion.ConvertingListProxyFactory; import org.apache.rave.portal.model.conversion.JpaConverter; import org.apache.rave.util.JsonUtils; @@ -53,7 +54,7 @@ import java.util.*; @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) -public class JpaPage implements BasicEntity, Serializable, Page { +public class JpaPage implements BasicEntity, Serializable, JpaSerializable, Page { private static final long serialVersionUID = 2L; public static final String DELETE_BY_USER_ID_AND_PAGE_TYPE = "JpaPage.deleteByUserIdAndPageType"; @@ -339,6 +340,7 @@ public class JpaPage implements BasicEntity, Serializable, Page { return "Page{" + "entityId=" + entityId + ", name=" + name + ", ownerId=" + ownerId + ", pageLayout=" + pageLayout + ", pageType=" + pageType + "}"; } + @Override public void serializeData() { Map<String, Object> properties = this.getProperties(); if(properties != null) { @@ -346,6 +348,7 @@ public class JpaPage implements BasicEntity, Serializable, Page { } } + @Override @SuppressWarnings("unchecked") public void deserializeData() { if(serializedData != null) { http://git-wip-us.apache.org/repos/asf/rave/blob/bd5d3af2/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplate.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplate.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplate.java index 706ddb5..1a1f0ce 100644 --- a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplate.java +++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPageTemplate.java @@ -24,8 +24,10 @@ import org.apache.rave.model.PageLayout; import org.apache.rave.model.PageTemplate; import org.apache.rave.model.PageTemplateRegion; import org.apache.rave.model.PageType; +import org.apache.rave.persistence.jpa.JpaSerializable; 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 java.io.Serializable; @@ -41,7 +43,7 @@ import java.util.Map; @NamedQuery(name = JpaPageTemplate.PAGE_TEMPLATE_GET_ALL_FOR_TYPE, query = "SELECT p FROM JpaPageTemplate p WHERE p.pageType = :pageType") }) @Access(AccessType.FIELD) -public class JpaPageTemplate implements BasicEntity, Serializable, PageTemplate { +public class JpaPageTemplate implements BasicEntity, Serializable, JpaSerializable, PageTemplate { private static final long serialVersionUID = 1L; public static final String PAGE_TEMPLATE_GET_ALL = "PageTemplate.getAll"; @@ -230,4 +232,20 @@ public class JpaPageTemplate implements BasicEntity, Serializable, PageTemplate public void setProperties(Map<String, Object> properties) { this.properties = properties; } + + @Override + public void serializeData() { + Map<String, Object> properties = this.getProperties(); + if(properties != null) { + serializedData = JsonUtils.stringify(properties); + } + } + + @Override + @SuppressWarnings("unchecked") + public void deserializeData() { + if(serializedData != null) { + this.setProperties(JsonUtils.parse(serializedData, Map.class)); + } + } } http://git-wip-us.apache.org/repos/asf/rave/blob/bd5d3af2/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java index 2d7fc18..035764b 100644 --- a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java +++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaWidget.java @@ -21,6 +21,7 @@ package org.apache.rave.portal.model; import com.fasterxml.jackson.annotation.JsonIgnore; import org.apache.rave.model.*; +import org.apache.rave.persistence.jpa.JpaSerializable; import org.apache.rave.portal.model.conversion.ConvertingListProxyFactory; import org.apache.rave.util.JsonUtils; @@ -65,7 +66,7 @@ import java.util.Map; @NamedQuery(name = JpaWidget.WIDGET_COUNT_BY_TAG, query = JpaWidget.SELECT_COUNT_W_FROM_WIDGET_W + JpaWidget.JOIN_TAGS + JpaWidget.WHERE_CLAUSE_TAG_ID), @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 { +public class JpaWidget implements BasicEntity, Serializable, JpaSerializable, Widget { private static final long serialVersionUID = 2L; public static final String PARAM_SEARCH_TERM = "searchTerm"; @@ -473,6 +474,7 @@ public class JpaWidget implements BasicEntity, Serializable, Widget { this.serializedData = serializedData; } + @Override public void serializeData() { Map<String, Object> properties = this.getProperties(); if(properties != null) { @@ -480,6 +482,7 @@ public class JpaWidget implements BasicEntity, Serializable, Widget { } } + @Override @SuppressWarnings("unchecked") public void deserializeData() { if(serializedData != null) { http://git-wip-us.apache.org/repos/asf/rave/blob/bd5d3af2/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageTemplateConverter.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageTemplateConverter.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageTemplateConverter.java index 4842843..8d717bc 100644 --- a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageTemplateConverter.java +++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/conversion/JpaPageTemplateConverter.java @@ -67,5 +67,6 @@ public class JpaPageTemplateConverter implements ModelConverter<PageTemplate, Jp converted.setPageTemplateRegions(source.getPageTemplateRegions()); converted.setRenderSequence(source.getRenderSequence()); converted.setDefaultTemplate(source.isDefaultTemplate()); + converted.setProperties(source.getProperties()); } } http://git-wip-us.apache.org/repos/asf/rave/blob/bd5d3af2/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java index db374c3..94ea442 100644 --- a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java +++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java @@ -158,13 +158,13 @@ public class JpaPageRepository implements PageRepository { @Override public List<Page> getAll() { - TypedQuery<Page> query = manager.createNamedQuery(JpaPage.GET_ALL, Page.class); + TypedQuery<JpaPage> query = manager.createNamedQuery(JpaPage.GET_ALL, JpaPage.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); + TypedQuery<JpaPage> query = manager.createNamedQuery(JpaPage.GET_ALL, JpaPage.class); return expandProperties(CollectionUtils.<Page>toBaseTypedList(getPagedResultList(query, offset, limit))); } http://git-wip-us.apache.org/repos/asf/rave/blob/bd5d3af2/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageTemplateRepository.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageTemplateRepository.java b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageTemplateRepository.java index aa3745e..15566af 100644 --- a/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageTemplateRepository.java +++ b/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageTemplateRepository.java @@ -19,6 +19,7 @@ package org.apache.rave.portal.repository.impl; import org.apache.commons.lang.NotImplementedException; +import org.apache.rave.persistence.jpa.JpaSerializable; import org.apache.rave.portal.model.JpaPageTemplate; import org.apache.rave.model.PageTemplate; import org.apache.rave.portal.model.conversion.JpaConverter; @@ -43,13 +44,13 @@ public class JpaPageTemplateRepository implements PageTemplateRepository { @Override public List<PageTemplate> getAll() { TypedQuery<JpaPageTemplate> query = manager.createNamedQuery(JpaPageTemplate.PAGE_TEMPLATE_GET_ALL, JpaPageTemplate.class); - return CollectionUtils.<PageTemplate>toBaseTypedList(query.getResultList()); + return CollectionUtils.<PageTemplate>toBaseTypedList(expandProperties(query.getResultList())); } @Override public List<PageTemplate> getLimitedList(int offset, int limit) { TypedQuery<JpaPageTemplate> query = manager.createNamedQuery(JpaPageTemplate.PAGE_TEMPLATE_GET_ALL, JpaPageTemplate.class); - return CollectionUtils.<PageTemplate>toBaseTypedList(getPagedResultList(query, offset, limit)); + return CollectionUtils.<PageTemplate>toBaseTypedList(expandProperties(getPagedResultList(query, offset, limit))); } @Override @@ -61,14 +62,14 @@ public class JpaPageTemplateRepository implements PageTemplateRepository { public List<PageTemplate> getAll(String pageType) { TypedQuery<JpaPageTemplate> query = manager.createNamedQuery(JpaPageTemplate.PAGE_TEMPLATE_GET_ALL_FOR_TYPE, JpaPageTemplate.class); query.setParameter("pageType", pageType.toUpperCase()); - return CollectionUtils.<PageTemplate>toBaseTypedList(query.getResultList()); + return CollectionUtils.<PageTemplate>toBaseTypedList(expandProperties(query.getResultList())); } @Override public JpaPageTemplate getDefaultPage(String pageType) { TypedQuery<JpaPageTemplate> query = manager.createNamedQuery(JpaPageTemplate.PAGE_TEMPLATE_GET_DEFAULT_PAGE_BY_TYPE, JpaPageTemplate.class); query.setParameter("pageType", pageType.toUpperCase()); - return query.getSingleResult(); + return expandProperties(query.getSingleResult()); } @Override @@ -78,16 +79,30 @@ public class JpaPageTemplateRepository implements PageTemplateRepository { @Override public PageTemplate get(String id) { - return manager.find(JpaPageTemplate.class, id); + return expandProperties(manager.find(JpaPageTemplate.class, id)); } @Override public PageTemplate save(PageTemplate template) { - return (PageTemplate) saveOrUpdate(template.getId(), manager, JpaConverter.getInstance().convert(template, PageTemplate.class)); + JpaPageTemplate converted = JpaConverter.getInstance().convert(template, PageTemplate.class); + converted.serializeData(); + return expandProperties(saveOrUpdate(template.getId(), manager, converted)); } @Override public void delete(PageTemplate item) { manager.remove(JpaConverter.getInstance().convert(item, PageTemplate.class)); } + + private List<JpaPageTemplate> expandProperties(List<JpaPageTemplate> resultList) { + for(JpaSerializable serializable : resultList) { + expandProperties(serializable); + } + return resultList; + } + + private <T extends JpaSerializable> T expandProperties(T jpaPageTemplate) { + jpaPageTemplate.deserializeData(); + return jpaPageTemplate; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/rave/blob/bd5d3af2/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageTemplateConverter.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageTemplateConverter.java b/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageTemplateConverter.java index 5fd7b6d..e609a90 100644 --- a/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageTemplateConverter.java +++ b/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageTemplateConverter.java @@ -138,6 +138,7 @@ public class MongoDbPageTemplateConverter implements HydratingModelConverter<Pag converted.setId(source.getId() == null ? generateId() : source.getId()); converted.setName(source.getName()); converted.setDescription(source.getDescription()); + converted.setProperties(source.getProperties()); //Enforce consistent casing for page types converted.setPageType(source.getPageType() == null ? null : source.getPageType().toUpperCase());
