diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminController.java
index 022eacddb..2d0622f8d 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminController.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminController.java
@@ -26,6 +26,7 @@ import org.arsdigita.cms.CMSConfig;
import org.libreccm.categorization.Categorization;
import org.libreccm.categorization.Category;
import org.libreccm.configuration.ConfigurationManager;
+import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.security.User;
import org.libreccm.workflow.Task;
import org.libreccm.workflow.TaskManager;
@@ -41,14 +42,17 @@ import org.librecms.lifecycle.Lifecycle;
import org.librecms.lifecycle.LifecycleDefinition;
import org.librecms.lifecycle.LifecycleDefinitionRepository;
import org.librecms.lifecycle.LifecycleManager;
+import org.librecms.lifecycle.LifecycleRepository;
import org.librecms.lifecycle.Phase;
+import org.librecms.lifecycle.PhaseDefinition;
import org.librecms.lifecycle.PhaseRepository;
import org.librecms.workflow.CmsTask;
import org.librecms.workflow.CmsTaskType;
+import java.io.Serializable;
import java.util.Date;
import java.util.List;
-import java.util.Optional;
+import java.util.Objects;
import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped;
@@ -60,14 +64,18 @@ import javax.transaction.Transactional;
* @author Jens Pelzetter
*/
@RequestScoped
-public class ItemLifecycleAdminController {
+class ItemLifecycleAdminController implements Serializable {
private static final Logger LOGGER = LogManager
.getLogger(ItemLifecycleAdminController.class);
+ private static final long serialVersionUID = -6482423583933975632L;
@Inject
private ConfigurationManager confManager;
+ @Inject
+ private GlobalizationHelper globalizationHelper;
+
@Inject
private ContentItemRepository itemRepo;
@@ -80,6 +88,9 @@ public class ItemLifecycleAdminController {
@Inject
private LifecycleManager lifecycleManager;
+ @Inject
+ private LifecycleRepository lifecycleRepo;
+
@Inject
private PhaseRepository phaseRepo;
@@ -151,12 +162,11 @@ public class ItemLifecycleAdminController {
@Transactional(Transactional.TxType.REQUIRED)
public LifecycleDefinition getDefinitionOfLifecycle(final ContentItem item) {
- final ContentItem contentItem = itemRepo
- .findById(item.getObjectId())
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No ContentItem with ID %d in the database.",
- item.getObjectId())));
-
+// final ContentItem contentItem = itemRepo
+// .findById(item.getObjectId())
+// .orElseThrow(() -> new IllegalArgumentException(String
+// .format("No ContentItem with ID %d in the database.",
+// item.getObjectId())));
final ContentItem liveItem = itemManager
.getLiveVersion(item, ContentItem.class)
.get();
@@ -164,6 +174,41 @@ public class ItemLifecycleAdminController {
return liveItem.getLifecycle().getDefinition();
}
+ @Transactional(Transactional.TxType.REQUIRED)
+ protected List findPhasesOfLifecycle(
+ final Lifecycle lifecycle) {
+
+ Objects.requireNonNull(lifecycle);
+
+ final Lifecycle ofLifecycle = lifecycleRepo
+ .findById(lifecycle.getLifecycleId())
+ .orElseThrow(() -> new IllegalArgumentException(String
+ .format("No Lifecycle with ID %d in the database.",
+ lifecycle.getLifecycleId())));
+
+ return ofLifecycle
+ .getPhases()
+ .stream()
+ .map(this::buildItemPhaseTableRow)
+ .collect(Collectors.toList());
+
+ }
+
+ private ItemPhaseTableRow buildItemPhaseTableRow(final Phase phase) {
+
+ final PhaseDefinition definition = phase.getDefinition();
+
+ final ItemPhaseTableRow row = new ItemPhaseTableRow();
+ row.setName(globalizationHelper
+ .getValueFromLocalizedString(definition.getLabel()));
+ row.setDescription(globalizationHelper
+ .getValueFromLocalizedString(definition.getDescription()));
+ row.setStartDate(phase.getStartDateTime());
+ row.setEndDate(phase.getEndDateTime());
+
+ return row;
+ }
+
@Transactional(Transactional.TxType.REQUIRED)
public String getPublishingTabUrl(final ContentItem item) {
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminPane.java
index 510d42b65..10192347e 100755
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminPane.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminPane.java
@@ -39,8 +39,12 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.security.PermissionChecker;
+import org.librecms.contentsection.ContentItemManager;
import org.librecms.contentsection.privileges.ItemPrivileges;
+import java.util.Objects;
+import java.util.Optional;
+
/**
* @author Michael Pih
* @author Jack Chung
@@ -128,11 +132,21 @@ public class ItemLifecycleAdminPane extends BaseItemPane {
@Override
protected final Object initialValue(final PageState state) {
final ContentItem item = selectedItem.getContentItem(state);
- final Lifecycle lifecycle = item.getLifecycle();
- LOGGER.debug("Returning lifecycle " + lifecycle);
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final ContentItemManager itemManager = cdiUtil
+ .findBean(ContentItemManager.class);
+ final Optional liveItem = itemManager
+ .getLiveVersion(item, ContentItem.class);
+ if (liveItem.isPresent()) {
- return lifecycle;
+ final Lifecycle lifecycle = liveItem.get().getLifecycle();
+ LOGGER.debug("Returning lifecycle {}",
+ Objects.toString(lifecycle));
+ return lifecycle;
+ } else {
+ return null;
+ }
}
}
@@ -207,7 +221,7 @@ public class ItemLifecycleAdminPane extends BaseItemPane {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ItemLifecycleAdminController controller = cdiUtil
.findBean(ItemLifecycleAdminController.class);
-
+
return controller.isAssignedToAbstractCategory(item);
// final long count = item.getCategories().stream()
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableModel.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableModel.java
new file mode 100644
index 000000000..ff2d97040
--- /dev/null
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableModel.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2017 LibreCCM Foundation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+package com.arsdigita.cms.ui.lifecycle;
+
+import com.arsdigita.bebop.table.TableModel;
+import com.arsdigita.globalization.GlobalizedMessage;
+
+import org.arsdigita.cms.CMSConfig;
+import org.libreccm.cdi.utils.CdiUtil;
+import org.libreccm.l10n.GlobalizationHelper;
+import org.librecms.CmsConstants;
+
+import java.text.DateFormat;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+class ItemPhaseTableModel implements TableModel {
+
+ private final Iterator iterator;
+ private ItemPhaseTableRow currentRow;
+
+ public ItemPhaseTableModel(final List rows) {
+ iterator = rows.iterator();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return 4;
+ }
+
+ @Override
+ public boolean nextRow() {
+
+ if (iterator.hasNext()) {
+ currentRow = iterator.next();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public Object getElementAt(final int columnIndex) {
+
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final GlobalizationHelper globalizationHelper = cdiUtil
+ .findBean(GlobalizationHelper.class);
+ final Locale locale = globalizationHelper.getNegotiatedLocale();
+ final DateFormat format;
+ if (CMSConfig.getConfig().isHideTimezone()) {
+ format = DateFormat.getDateTimeInstance(
+ DateFormat.FULL, DateFormat.SHORT, locale);
+ } else {
+ format = DateFormat.getDateTimeInstance(
+ DateFormat.FULL, DateFormat.FULL, locale);
+ }
+
+ switch (columnIndex) {
+ case 0:
+ return currentRow.getName();
+ case 1:
+ return currentRow.getDescription();
+ case 2:
+ return format.format(currentRow.getStartDate());
+ case 3:
+ if (currentRow.getEndDate() == null) {
+ return new GlobalizedMessage("cms.ui.lifecycle.forever",
+ CmsConstants.CMS_BUNDLE)
+ .localize();
+ } else {
+ return currentRow.getEndDate();
+ }
+ default:
+ throw new IllegalArgumentException("Illegal Column Index");
+ }
+
+ }
+
+ @Override
+ public Object getKeyAt(final int columnIndex) {
+
+ return currentRow.getPhaseId();
+ }
+
+}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableModelBuilder.java
index 2ab902c32..8eafe3d04 100755
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableModelBuilder.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableModelBuilder.java
@@ -22,18 +22,10 @@ import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.table.AbstractTableModelBuilder;
import com.arsdigita.bebop.table.TableModel;
-import com.arsdigita.globalization.GlobalizedMessage;
-import org.arsdigita.cms.CMSConfig;
import org.libreccm.cdi.utils.CdiUtil;
-import org.libreccm.l10n.GlobalizationHelper;
-import org.librecms.CmsConstants;
-import org.librecms.lifecycle.Phase;
-import java.text.DateFormat;
-import java.util.Date;
import java.util.List;
-import java.util.Locale;
/**
* @author Xixi D'Moon <xdmoon@arsdigita.com>
@@ -52,84 +44,14 @@ class ItemPhaseTableModelBuilder extends AbstractTableModelBuilder {
@Override
public final TableModel makeModel(final Table table,
final PageState state) {
- return new Model(lifecycle.getLifecycle(state).getPhases());
+
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final ItemLifecycleAdminController controller = cdiUtil
+ .findBean(ItemLifecycleAdminController.class);
+
+ final List rows = controller
+ .findPhasesOfLifecycle(lifecycle.getLifecycle(state));
+
+ return new ItemPhaseTableModel(rows);
}
-
- private static class Model implements TableModel {
-
- private final List phases;
- private int index = -1;
- private Phase phase;
-
- public Model(final List phases) {
- this.phases = phases;
- }
-
- @Override
- public final int getColumnCount() {
- return 4;
- }
-
- @Override
- public final boolean nextRow() {
- index++;
- if (index < phases.size()) {
- phase = phases.get(index);
-
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public final Object getElementAt(final int column) {
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final GlobalizationHelper globalizationHelper = cdiUtil
- .findBean(GlobalizationHelper.class);
- final Locale locale = globalizationHelper.getNegotiatedLocale();
- final DateFormat format;
- if (CMSConfig.getConfig().isHideTimezone()) {
- format = DateFormat.getDateTimeInstance(
- DateFormat.FULL, DateFormat.SHORT, locale);
- } else {
- format = DateFormat.getDateTimeInstance(
- DateFormat.FULL, DateFormat.FULL, locale);
- }
-
- switch (column) {
- case 0:
- return phase.getDefinition().getLabel().getValue(locale);
- case 1:
- return phase.getDefinition().getDescription().getValue(
- locale);
- case 2:
- final Date startDate = phase.getStartDateTime();
- return format.format(startDate);
- case 3:
- final Date endDate = phase.getEndDateTime();
-
- if (endDate == null) {
- return lz("cms.ui.lifecycle.forever");
- } else {
- return format.format(endDate);
- }
- default:
- throw new IllegalArgumentException();
- }
- }
-
- @Override
- public final Object getKeyAt(final int column) {
- return phase.getDefinition().getDefinitionId();
- }
-
- }
-
- protected final static String lz(final String key) {
- final GlobalizedMessage message = new GlobalizedMessage(key,
- CmsConstants.CMS_BUNDLE);
- return (String) message.localize();
- }
-
}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableRow.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableRow.java
new file mode 100644
index 000000000..fd710a3f4
--- /dev/null
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemPhaseTableRow.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2017 LibreCCM Foundation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+package com.arsdigita.cms.ui.lifecycle;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+class ItemPhaseTableRow implements Serializable {
+
+ private static final long serialVersionUID = -8947185134493863779L;
+
+ private long phaseId;
+ private String name;
+ private String description;
+ private Date startDate;
+ private Date endDate;
+
+ public long getPhaseId() {
+ return phaseId;
+ }
+
+ public void setPhaseId(final long phaseId) {
+ this.phaseId = phaseId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(final String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(final String description) {
+ this.description = description;
+ }
+
+ public Date getStartDate() {
+ return new Date(startDate.getTime());
+ }
+
+ public void setStartDate(final Date startDate) {
+ this.startDate = new Date(startDate.getTime());
+ }
+
+ public Date getEndDate() {
+ return new Date(endDate.getTime());
+ }
+
+ public void setEndDate(final Date endDate) {
+ this.endDate = new Date(endDate.getTime());
+ }
+
+
+
+}
diff --git a/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleManager.java b/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleManager.java
index f87cb5f86..178108c5d 100644
--- a/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleManager.java
+++ b/ccm-cms/src/main/java/org/librecms/lifecycle/LifecycleManager.java
@@ -22,7 +22,6 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.libreccm.security.AuthorizationRequired;
import org.libreccm.security.RequiresPrivilege;
-import org.librecms.CmsConstants;
import org.librecms.contentsection.privileges.AdminPrivileges;
import java.lang.reflect.InvocationTargetException;
diff --git a/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseRepository.java b/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseRepository.java
index 861a309d2..4209647d6 100644
--- a/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseRepository.java
+++ b/ccm-cms/src/main/java/org/librecms/lifecycle/PhaseRepository.java
@@ -29,6 +29,8 @@ import javax.enterprise.context.RequestScoped;
@RequestScoped
public class PhaseRepository extends AbstractEntityRepository{
+ private static final long serialVersionUID = 1010039772043186415L;
+
@Override
public Class getEntityClass() {
return Phase.class;
diff --git a/ccm-core/src/main/java/org/libreccm/auditing/AbstractAuditedEntityRepository.java b/ccm-core/src/main/java/org/libreccm/auditing/AbstractAuditedEntityRepository.java
index 41be993b5..e372360c6 100644
--- a/ccm-core/src/main/java/org/libreccm/auditing/AbstractAuditedEntityRepository.java
+++ b/ccm-core/src/main/java/org/libreccm/auditing/AbstractAuditedEntityRepository.java
@@ -19,15 +19,19 @@
package org.libreccm.auditing;
import org.hibernate.envers.AuditReader;
+import org.hibernate.envers.AuditReaderFactory;
import org.hibernate.envers.exception.NotAuditedException;
import org.hibernate.envers.query.AuditEntity;
import org.hibernate.envers.query.AuditQuery;
import org.libreccm.core.AbstractEntityRepository;
import javax.inject.Inject;
+
import java.util.List;
import java.util.stream.Collectors;
+import javax.persistence.EntityManager;
+
/**
*
* @author Jens Pelzetter
@@ -38,8 +42,12 @@ import java.util.stream.Collectors;
public abstract class AbstractAuditedEntityRepository
extends AbstractEntityRepository {
+ private static final long serialVersionUID = -1592329493646101135L;
+
+// @Inject
+// private AuditReader auditReader;
@Inject
- private AuditReader auditReader;
+ private EntityManager entityManager;
public abstract K getEntityId(final T entity);
@@ -54,6 +62,8 @@ public abstract class AbstractAuditedEntityRepository
*/
@SuppressWarnings("unchecked")
public T retrieveEntityAtRevision(final T entity, final Number revision) {
+
+ final AuditReader auditReader = AuditReaderFactory.get(entityManager);
final AuditQuery query = auditReader.createQuery()
.forEntitiesAtRevision(getEntityClass(), revision);
query.add(AuditEntity.id().eq(getEntityId(entity)));
@@ -89,6 +99,8 @@ public abstract class AbstractAuditedEntityRepository
*/
public List retrieveRevisionNumbersOfEntity(final T entity,
final Long objectId) {
+
+ final AuditReader auditReader = AuditReaderFactory.get(entityManager);
return auditReader.getRevisions(entity.getClass(), objectId);
}
@@ -102,9 +114,11 @@ public abstract class AbstractAuditedEntityRepository
*/
public CcmRevision retrieveFirstRevision(final T entity,
final Long objectId) {
+
final List revisions = retrieveRevisionNumbersOfEntity(
entity, objectId);
+ final AuditReader auditReader = AuditReaderFactory.get(entityManager);
return auditReader.findRevision(CcmRevision.class, revisions.get(0));
}
@@ -119,9 +133,11 @@ public abstract class AbstractAuditedEntityRepository
*/
public List retrieveRevisions(final T entity,
final Long objectId) {
+
final List revisionNumbers = retrieveRevisionNumbersOfEntity(
entity, objectId);
+ final AuditReader auditReader = AuditReaderFactory.get(entityManager);
return revisionNumbers.stream()
.map(revisionNumber -> auditReader.findRevision(CcmRevision.class,
revisionNumber))
@@ -142,19 +158,20 @@ public abstract class AbstractAuditedEntityRepository
entity, objectId);
final Number lastRevision = revisions.get(revisions.size() - 1);
+ final AuditReader auditReader = AuditReaderFactory.get(entityManager);
return auditReader.findRevision(CcmRevision.class, lastRevision);
}
/**
* Retrieves a specific revision object.
*
- * @param entity
- * @param objectId
* @param revision
*
* @return
*/
public CcmRevision retrieveRevision(final Number revision) {
+
+ final AuditReader auditReader = AuditReaderFactory.get(entityManager);
return auditReader.findRevision(CcmRevision.class, revision);
}