diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModel.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModel.java
index 95ad6cf47..a594baf6a 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModel.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModel.java
@@ -62,7 +62,6 @@ import javax.xml.bind.annotation.XmlTransient;
* page.
*
* @author Jens Pelzetter
- *
* @see PageModelRepository
* @see PageModelManager
* @see PageRenderer
@@ -71,102 +70,116 @@ import javax.xml.bind.annotation.XmlTransient;
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "PAGE_MODELS", schema = CoreConstants.DB_SCHEMA)
@NamedQueries({
- @NamedQuery(
- name = "PageModel.findAllDraftModels",
- query = "SELECT p FROM PageModel p "
- + "WHERE p.version = org.libreccm.pagemodel.PageModelVersion.DRAFT")
- ,
- @NamedQuery(
- name = "PageModel.findAllLiveModels",
- query = "SELECT p FROM PageModel p "
- + "WHERE p.version = org.libreccm.pagemodel.PageModelVersion.LIVE")
- ,
- @NamedQuery(
- name = "PageModel.findDraftVersion",
- query = "SELECT p FROM PageModel p "
- + "WHERE p.modelUuid = :uuid "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.DRAFT")
- ,
- @NamedQuery(
- name = "PageModel.hasLiveVersion",
- query = "SELECT (CASE WHEN COUNT(p) > 0 THEN true ELSE False END) "
- + "FROM PageModel p "
- + "WHERE p.modelUuid = :uuid "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.LIVE"
- )
- ,
- @NamedQuery(
- name = "PageModel.findLiveVersion",
- query = "SELECT p FROM PageModel p "
- + "WHERE p.modelUuid = :uuid "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.LIVE")
- ,
- @NamedQuery(
- name = "PageModel.findDraftByApplication",
- query = "SELECT p FROM PageModel p "
- + "WHERE p.application = :application "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.DRAFT"
- )
- ,
- @NamedQuery(
- name = "PageModel.findDraftByApplicationAndName",
- query = "SELECT p FROM PageModel p "
- + "WHERE p.application = :application "
- + "AND p.name = :name "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.DRAFT"
- )
- ,
- @NamedQuery(
- name = "PageModel.countDraftByApplicationAndName",
- query = "SELECT COUNT(p) FROM PageModel p "
- + "WHERE p.application = :application "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.DRAFT"
- )
- ,
- @NamedQuery(
- name = "PageModel.countDraftByApplication",
- query = "SELECT COUNT(p) FROM PageModel p "
- + "WHERE p.application = :application "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.DRAFT"
- )
- ,
- @NamedQuery(
- name = "PageModel.findLiveByApplication",
- query = "SELECT p FROM PageModel p "
- + "WHERE p.application = :application "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.LIVE")
- ,
- @NamedQuery(
- name = "PageModel.countLiveByApplication",
- query = "SELECT COUNT(p) FROM PageModel p "
- + "WHERE p.application = :application "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.LIVE")
- ,
- @NamedQuery(
- name = "PageModel.findLiveByApplicationAndName",
- query = "SELECT p FROM PageModel p "
- + "WHERE p.name = :name "
- + "AND p.application = :application "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.LIVE"
- )
- ,
- @NamedQuery(
- name = "PageModel.countLiveByApplicationAndName",
- query = "SELECT COUNT(p) FROM PageModel p "
- + "WHERE p.name = :name "
- + "AND p.application = :application "
- + "AND p.version = org.libreccm.pagemodel.PageModelVersion.LIVE"
- )
-})
+ @NamedQuery(
+ name = "PageModel.findAllDraftModels",
+ query = "SELECT p FROM PageModel p "
+ + "WHERE p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.DRAFT")
+ ,
+ @NamedQuery(
+ name = "PageModel.findAllLiveModels",
+ query = "SELECT p FROM PageModel p "
+ + "WHERE p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.LIVE")
+ ,
+ @NamedQuery(
+ name = "PageModel.findDraftVersion",
+ query = "SELECT p FROM PageModel p "
+ + "WHERE p.modelUuid = :uuid "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.DRAFT")
+ ,
+ @NamedQuery(
+ name = "PageModel.hasLiveVersion",
+ query =
+ "SELECT (CASE WHEN COUNT(p) > 0 THEN true ELSE "
+ + "False END) "
+ + "FROM PageModel p "
+ + "WHERE p.modelUuid = :uuid "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.LIVE"
+ )
+ ,
+ @NamedQuery(
+ name = "PageModel.findLiveVersion",
+ query = "SELECT p FROM PageModel p "
+ + "WHERE p.modelUuid = :uuid "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.LIVE")
+ ,
+ @NamedQuery(
+ name = "PageModel.findDraftByApplication",
+ query = "SELECT p FROM PageModel p "
+ + "WHERE p.application = :application "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.DRAFT"
+ )
+ ,
+ @NamedQuery(
+ name = "PageModel.findDraftByApplicationAndName",
+ query = "SELECT p FROM PageModel p "
+ + "WHERE p.application = :application "
+ + "AND p.name = :name "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.DRAFT"
+ )
+ ,
+ @NamedQuery(
+ name = "PageModel.countDraftByApplicationAndName",
+ query = "SELECT COUNT(p) FROM PageModel p "
+ + "WHERE p.name = :name "
+ + "AND p.application = :application "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.DRAFT"
+ )
+ ,
+ @NamedQuery(
+ name = "PageModel.countDraftByApplication",
+ query = "SELECT COUNT(p) FROM PageModel p "
+ + "WHERE p.application = :application "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.DRAFT"
+ )
+ ,
+ @NamedQuery(
+ name = "PageModel.findLiveByApplication",
+ query = "SELECT p FROM PageModel p "
+ + "WHERE p.application = :application "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.LIVE")
+ ,
+ @NamedQuery(
+ name = "PageModel.countLiveByApplication",
+ query = "SELECT COUNT(p) FROM PageModel p "
+ + "WHERE p.application = :application "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.LIVE")
+ ,
+ @NamedQuery(
+ name = "PageModel.findLiveByApplicationAndName",
+ query = "SELECT p FROM PageModel p "
+ + "WHERE p.name = :name "
+ + "AND p.application = :application "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.LIVE"
+ )
+ ,
+ @NamedQuery(
+ name = "PageModel.countLiveByApplicationAndName",
+ query = "SELECT COUNT(p) FROM PageModel p "
+ + "WHERE p.name = :name "
+ + "AND p.application = :application "
+ + "AND p.version = org.libreccm.pagemodel"
+ + ".PageModelVersion.LIVE"
+ )
+ })
@XmlRootElement(name = "pagemodel")
public class PageModel implements Serializable {
private static final long serialVersionUID = 7252512839926020978L;
/**
- *
* The ID of the entity in the database.
- *
*/
@Id
@Column(name = "PAGE_MODEL_ID")
@@ -175,11 +188,9 @@ public class PageModel implements Serializable {
private long pageModelId;
/**
- *
* The UUID of this {@code PageModel}. Please note that this UUID identifies
* the dataset not the model. Therefore the draft and the live version have
* different values for this field.
- *
*/
@Column(name = "UUID", length = 255, nullable = false)
@NotNull
@@ -257,115 +268,142 @@ public class PageModel implements Serializable {
private List containers;
public PageModel() {
+
title = new LocalizedString();
description = new LocalizedString();
containers = new ArrayList<>();
}
public long getPageModelId() {
+
return pageModelId;
}
protected void setPageModelId(final long pageModelId) {
+
this.pageModelId = pageModelId;
}
public String getUuid() {
+
return uuid;
}
protected void setUuid(final String uuid) {
+
this.uuid = uuid;
}
public String getModelUuid() {
+
return modelUuid;
}
protected void setModelUuid(final String modelUuid) {
+
this.modelUuid = modelUuid;
}
public String getName() {
+
return name;
}
public void setName(final String name) {
+
this.name = name;
}
public PageModelVersion getVersion() {
+
return version;
}
protected void setVersion(final PageModelVersion version) {
+
this.version = version;
}
public Date getLastModified() {
+
return lastModified;
}
protected void setLastModified(final Date lastModified) {
+
this.lastModified = new Date(lastModified.getTime());
}
public LocalizedString getTitle() {
+
return title;
}
protected void setTitle(final LocalizedString title) {
+
Objects.requireNonNull(title);
this.title = title;
}
public LocalizedString getDescription() {
+
return description;
}
protected void setDescription(final LocalizedString description) {
+
Objects.requireNonNull(description);
this.description = description;
}
public CcmApplication getApplication() {
+
return application;
}
public void setApplication(final CcmApplication application) {
+
this.application = application;
}
public String getType() {
+
return type;
}
public void setType(final String type) {
+
this.type = type;
}
public List getContainers() {
+
return Collections.unmodifiableList(containers);
}
protected void setContainers(final List containers) {
+
this.containers = new ArrayList<>(containers);
}
protected void addContainer(final ContainerModel container) {
+
containers.add(container);
}
protected void removeContainer(final ContainerModel container) {
+
containers.remove(container);
}
protected void clearContainers() {
+
containers.clear();
}
@Override
public int hashCode() {
+
int hash = 7;
hash = 71 * hash + (int) (pageModelId ^ (pageModelId >>> 32));
hash = 71 * hash + Objects.hashCode(uuid);
@@ -378,6 +416,7 @@ public class PageModel implements Serializable {
@Override
public boolean equals(final Object obj) {
+
if (this == obj) {
return true;
}
@@ -410,6 +449,7 @@ public class PageModel implements Serializable {
}
public boolean canEqual(final Object obj) {
+
return obj instanceof PageModel;
}
@@ -424,13 +464,13 @@ public class PageModel implements Serializable {
public String toString(final String data) {
return String.format("%s{ "
- + "pageModelId = %d, "
- + "uuid = %s, "
- + "name = \"%s\", "
- + "title = %s, "
- + "description = %s, "
- + "type = \"%s\""
- + " }",
+ + "pageModelId = %d, "
+ + "uuid = %s, "
+ + "name = \"%s\", "
+ + "title = %s, "
+ + "description = %s, "
+ + "type = \"%s\""
+ + " }",
super.toString(),
pageModelId,
uuid,
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelManager.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelManager.java
index d27a36128..97e5e0056 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelManager.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelManager.java
@@ -85,15 +85,16 @@ public class PageModelManager {
private PageModelRepository pageModelRepo;
private final Map components
- = new HashMap<>();
+ = new HashMap<>();
/**
* Called by CDI after an instance of this class is created. Initialises the
- * {@link #components} by retrieving the data about all available
- * {@link ComponentModel}s.
+ * {@link #components} by retrieving the data about all available {@link
+ * ComponentModel}s.
*/
@PostConstruct
private void init() {
+
LOGGER.debug("Initalising {}...", PageModelManager.class.getName());
final ServiceLoader modules = ServiceLoader.load(
@@ -127,11 +128,11 @@ public class PageModelManager {
/**
* Creates a new {@link PageModel} for the provided application. The method
- * tries to retrieve the appropriate application by using
- * {@link PageModelRepository#findLiveByApplicationAndName(org.libreccm.web.CcmApplication, java.lang.String)}.
- * Please note that this method will always return the
- * draft
- * version of the page model.
+ * tries to retrieve the appropriate application by using {@link
+ * PageModelRepository#findLiveByApplicationAndName(org.libreccm.web
+ * .CcmApplication,
+ * java.lang.String)}. Please note that this method will always return the
+ * draft version of the page model.
*
* @param name The name of the new page model. Must be unique for the
* application.
@@ -149,16 +150,18 @@ public class PageModelManager {
final String type) {
Objects.requireNonNull(application,
- "Can't create a page model for application null");
+ "Can't create a page model for application "
+ + "null");
Objects.requireNonNull(name, "Then name of a Pagemodel can't be null.");
if (name.isEmpty()
- || name.matches("\\s*")) {
+ || name.matches("\\s*")) {
throw new IllegalArgumentException(
"The name of a PageModel can't be empty.");
}
LOGGER.debug(
- "Creating new PageModel with name \"{}\" for application \"{}\" and type \"{}\".",
+ "Creating new PageModel with name \"{}\" for application \"{}\" "
+ + "and type \"{}\".",
name,
application.getPrimaryUrl(),
type);
@@ -169,12 +172,12 @@ public class PageModelManager {
if (count > 0) {
LOGGER.error("A page model with the name \"{}\" for the "
- + "application \"{}\" already exists.",
+ + "application \"{}\" already exists.",
name,
application.getPrimaryUrl());
throw new IllegalArgumentException(String.format(
"A page model with the name \"%s\" for the application \"%s\" "
- + "already exists.",
+ + "already exists.",
name,
application.getPrimaryUrl()));
}
@@ -191,8 +194,8 @@ public class PageModelManager {
/**
* Retrieves the draft version of a {@link PageModel}. To invoke this method
- * the current user needs a permission granting the
- * {@link CoreConstants#PRIVILEGE_ADMIN} privilege.
+ * the current user needs a permission granting the {@link
+ * CoreConstants#PRIVILEGE_ADMIN} privilege.
*
* @param pageModel The {@link PageModel} for which the draft version is
* retrieved.
@@ -222,11 +225,12 @@ public class PageModelManager {
*
* @param pageModel The {@link PageModel} to check for a live version.
*
- * @return {@code true} if there is a live version for the provided
- * {@link PageModel}, {@code false} otherwise.
+ * @return {@code true} if there is a live version for the provided {@link
+ * PageModel}, {@code false} otherwise.
*/
@Transactional(Transactional.TxType.REQUIRED)
public boolean isLive(final PageModel pageModel) {
+
final TypedQuery query = entityManager.createNamedQuery(
"PageModel.hasLiveVersion", Boolean.class);
query.setParameter("uuid", pageModel.getModelUuid());
@@ -242,8 +246,8 @@ public class PageModelManager {
* retrieved.
*
* @return An {@link Optional} containing the live version of the provided
- * {@link PageModel} if there is a live version. Otherwise an empty
- * {@link Optional} is returned.
+ * {@link PageModel} if there is a live version. Otherwise an empty
+ * {@link Optional} is returned.
*/
@Transactional(Transactional.TxType.REQUIRED)
public Optional getLiveVersion(final PageModel pageModel) {
@@ -280,10 +284,13 @@ public class PageModelManager {
final PageModel draftModel = getDraftVersion(pageModel);
final PageModel liveModel;
+ final boolean isLive;
if (isLive(pageModel)) {
+ isLive = true;
liveModel = getLiveVersion(draftModel).get();
} else {
liveModel = new PageModel();
+ isLive = false;
}
liveModel.setName(draftModel.getName());
@@ -312,11 +319,17 @@ public class PageModelManager {
.getContainers()
.stream()
.map(this::publishContainerModel)
- .forEach(liveContainerModel -> addContainerModel(pageModel,
+ .forEach(liveContainerModel -> addContainerModel(liveModel,
liveContainerModel));
-
liveModel.setLastModified(new Date());
+ pageModelRepo.save(liveModel);
+ //if (isLive) {
+ // entityManager.merge(liveModel);
+ //} else {
+ // entityManager.persist(liveModel);
+ //}
+
LOGGER.debug("Successfully published PageModel \"{}\".",
liveModel.getName());
return liveModel;
@@ -332,18 +345,20 @@ public class PageModelManager {
liveModel.setContainerUuid(draftModel.getContainerUuid());
final Styles draftStyles = draftModel.getStyles();
- final Styles liveStyles = new Styles();
- liveStyles.setStyleName(draftStyles.getStyleName());
- liveStyles.setRules(draftStyles
- .getRules()
- .stream()
- .map(this::publishRule)
- .collect(Collectors.toList()));
- liveStyles.setMediaRules(draftStyles
- .getMediaRules()
- .stream()
- .map(this::publishMediaRule)
- .collect(Collectors.toList()));
+ if (draftStyles != null) {
+ final Styles liveStyles = new Styles();
+ liveStyles.setStyleName(draftStyles.getStyleName());
+ liveStyles.setRules(draftStyles
+ .getRules()
+ .stream()
+ .map(this::publishRule)
+ .collect(Collectors.toList()));
+ liveStyles.setMediaRules(draftStyles
+ .getMediaRules()
+ .stream()
+ .map(this::publishMediaRule)
+ .collect(Collectors.toList()));
+ }
draftModel
.getComponents()
@@ -360,7 +375,7 @@ public class PageModelManager {
Objects.requireNonNull(draftMediaRule);
- final MediaRule liveMediaRule = new MediaRule();
+ final MediaRule liveMediaRule = new MediaRule();
final MediaQuery liveMediaQuery = new MediaQuery();
liveMediaQuery
.setMaxWidth(draftMediaRule.getMediaQuery().getMaxWidth());
@@ -370,10 +385,10 @@ public class PageModelManager {
.setMinWidth(draftMediaRule.getMediaQuery().getMinWidth());
liveMediaRule.setRules(draftMediaRule
- .getRules()
- .stream()
- .map(this::publishRule)
- .collect(Collectors.toList()));
+ .getRules()
+ .stream()
+ .map(this::publishRule)
+ .collect(Collectors.toList()));
return liveMediaRule;
}
@@ -385,10 +400,10 @@ public class PageModelManager {
final Rule liveRule = new Rule();
liveRule.setSelector(draftRule.getSelector());
liveRule.setProperties(draftRule
- .getProperties()
- .stream()
- .map(this::publishCssProperty)
- .collect(Collectors.toList()));
+ .getProperties()
+ .stream()
+ .map(this::publishCssProperty)
+ .collect(Collectors.toList()));
return liveRule;
}
@@ -414,9 +429,11 @@ public class PageModelManager {
* @return The live version of the {@link ComponentModel}.
*/
@SuppressWarnings("unchecked")
- private ComponentModel publishComponentModel(final ComponentModel draftModel) {
+ private ComponentModel publishComponentModel(final ComponentModel
+ draftModel) {
- Objects.requireNonNull(draftModel, "Can't publish ComponentModel null.");
+ Objects.requireNonNull(draftModel,
+ "Can't publish ComponentModel null.");
LOGGER.debug("Publishing ComponentModel \"{}\"...",
draftModel.getKey());
@@ -447,9 +464,9 @@ public class PageModelManager {
propertyDescriptor.getName(),
draftModel.getKey());
- final Class> propType = propertyDescriptor.getPropertyType();
- final Method readMethod = propertyDescriptor.getReadMethod();
- final Method writeMethod = propertyDescriptor.getWriteMethod();
+ final Class> propType = propertyDescriptor.getPropertyType();
+ final Method readMethod = propertyDescriptor.getReadMethod();
+ final Method writeMethod = propertyDescriptor.getWriteMethod();
if (propertyIsExcluded(propertyDescriptor.getName())) {
continue;
@@ -460,7 +477,7 @@ public class PageModelManager {
}
if (propType != null
- && propType.isAssignableFrom(List.class)) {
+ && propType.isAssignableFrom(List.class)) {
try {
final List