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 a9d9e1976..cb6c0df12 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 @@ -18,11 +18,17 @@ */ package com.arsdigita.cms.ui.lifecycle; -import org.hibernate.boot.archive.scan.spi.ClassDescriptor; import org.libreccm.categorization.Categorization; import org.libreccm.categorization.Category; import org.librecms.contentsection.ContentItem; import org.librecms.contentsection.ContentItemRepository; +import org.librecms.contentsection.ContentSection; +import org.librecms.contentsection.ContentSectionRepository; +import org.librecms.lifecycle.LifecycleDefinition; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -38,6 +44,9 @@ public class ItemLifecycleAdminController { @Inject private ContentItemRepository itemRepo; + @Inject + private ContentSectionRepository sectionRepo; + @Transactional(Transactional.TxType.REQUIRED) public boolean isAssignedToAbstractCategory(final ContentItem item) { @@ -57,4 +66,32 @@ public class ItemLifecycleAdminController { return count > 0; } + @Transactional(Transactional.TxType.REQUIRED) + public List getLifecycleDefinitions( + final ContentSection section) { + + final ContentSection contentSection = sectionRepo + .findById(section.getObjectId()) + .orElseThrow(() -> new IllegalArgumentException(String + .format("No ContentSection with ID %d in the database.", + section.getObjectId()))); + + return contentSection + .getLifecycleDefinitions() + .stream() + .collect(Collectors.toList()); + } + + @Transactional(Transactional.TxType.REQUIRED) + public LifecycleDefinition getDefaultLifecycle(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()))); + + return contentItem.getContentType().getDefaultLifecycle(); + } + } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleSelectForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleSelectForm.java index 07519963a..cd0d27011 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleSelectForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/ItemLifecycleSelectForm.java @@ -257,25 +257,28 @@ class ItemLifecycleSelectForm extends BaseForm { addAction(new Submit("finish", gz("cms.ui.item.lifecycle.publish"))); // Form listeners - addValidationListener(new ValidationListener()); - addSecurityListener(ItemPrivileges.PUBLISH, item); - addInitListener(new InitListener()); - addProcessListener(new ProcessListener()); + super.addValidationListener(new ValidationListener()); + super.addSecurityListener(ItemPrivileges.PUBLISH, item); + super.addInitListener(new InitListener()); + super.addProcessListener(new ProcessListener()); } private class OptionPrinter implements PrintListener { @Override - public final void prepare(final PrintEvent e) { + public final void prepare(final PrintEvent event) { final ContentSection section = CMS.getContext().getContentSection(); - final List definitions = section - .getLifecycleDefinitions(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final ItemLifecycleAdminController controller = cdiUtil + .findBean(ItemLifecycleAdminController.class); - final SingleSelect target = (SingleSelect) e.getTarget(); + final List definitions = controller + .getLifecycleDefinitions(section); + + final SingleSelect target = (SingleSelect) event.getTarget(); target.clearOptions(); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final GlobalizationHelper globalizationHelper = cdiUtil.findBean( GlobalizationHelper.class); final Locale locale = globalizationHelper.getNegotiatedLocale(); @@ -305,6 +308,8 @@ class ItemLifecycleSelectForm extends BaseForm { final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final ContentItemManager itemManager = cdiUtil.findBean( ContentItemManager.class); + final ItemLifecycleAdminController controller = cdiUtil + .findBean(ItemLifecycleAdminController.class); if (itemManager.isLive(item)) { // If the item is published, select the currently @@ -315,11 +320,8 @@ class ItemLifecycleSelectForm extends BaseForm { cycleSelect.setValue(state, definition.getDefinitionId()); } else { // Set the default lifecycle (if it exists). - - final ContentSection section = CMS.getContext() - .getContentSection(); - final LifecycleDefinition definition = item.getContentType() - .getDefaultLifecycle(); + final LifecycleDefinition definition = controller + .getDefaultLifecycle(item); if (definition != null) { cycleSelect.setValue(state, definition.getDefinitionId());