model) {
+ super("LifecycleDefinition", gz("cms.ui.lifecycle.add"));
+
+ m_model = model;
+
+ m_name.addValidationListener(new NameUniqueListener(null));
+
+ addProcessListener(new ProcessListener());
+ }
+
+ private class ProcessListener implements FormProcessListener {
+
+ @Override
+ public final void process(final FormSectionEvent e)
+ throws FormProcessException {
+ final PageState state = e.getPageState();
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final ConfigurationManager confManager = cdiUtil.findBean(
+ ConfigurationManager.class);
+ final LifecycleDefinitionRepository lifecycleDefRepo = cdiUtil.findBean(
+ LifecycleDefinitionRepository.class);
+ final ContentSectionManager sectionManager = cdiUtil.findBean(
+ ContentSectionManager.class);
+ final KernelConfig kernelConfig = confManager.findConfiguration(
+ KernelConfig.class);
+ final Locale defaultLocale = new Locale(kernelConfig
+ .getDefaultLanguage());
+
+ final LifecycleDefinition definition = new LifecycleDefinition();
+
+ definition.getLabel().addValue(defaultLocale,
+ (String) m_name.getValue(state));
+ definition.getDescription().addValue(
+ defaultLocale,
+ (String) m_description.getValue(state));
+ lifecycleDefRepo.save(definition);
+
+ final ContentSection section = CMS.getContext().getContentSection();
+ sectionManager.addLifecycleDefinitionToContentSection(definition,
+ section);
+
+ m_model.setSelectedKey(state,
+ definition.getDefinitionId());
+ }
+
+ }
+
+}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminContainer.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminContainer.java
new file mode 100755
index 000000000..d1066227a
--- /dev/null
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminContainer.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.ui.lifecycle;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.cms.dispatcher.Utilities;
+
+import org.libreccm.security.Party;
+
+import com.arsdigita.toolbox.ui.SecurityContainer;
+
+import org.libreccm.cdi.utils.CdiUtil;
+import org.libreccm.security.PermissionChecker;
+import org.librecms.CmsConstants;
+
+
+/**
+ * Security container that wraps the canAdministerLifecycles access check
+ * around its components.
+ *
+ * @author Jens Pelzetter
+ * @author Michael Pih
+ */
+public class LifecycleAdminContainer extends SecurityContainer {
+
+
+ /**
+ * This default constructor should be followed by calls to
+ * add.
+ */
+ public LifecycleAdminContainer() {
+ super();
+ }
+
+ /**
+ * Create a SecurityContainer around a child component.
+ *
+ * @param component The child component
+ */
+ public LifecycleAdminContainer(final Component component) {
+ super(component);
+ }
+
+ /**
+ * Returns true if the current user can access the child component.
+ *
+ * @param state The page state
+ * @return true if the access checks pass, false otherwise
+ */
+ @Override
+ protected boolean canAccess(final Party party, final PageState state) {
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final PermissionChecker permissionChecker = cdiUtil.findBean(PermissionChecker.class);
+
+ return permissionChecker.isPermitted(CmsConstants.PRIVILEGE_ADMINISTER_LIFECYLES);
+ }
+
+}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminPane.java.off b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminPane.java
similarity index 71%
rename from ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminPane.java.off
rename to ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminPane.java
index 55ab2b208..f8baa3483 100755
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminPane.java.off
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleAdminPane.java
@@ -24,12 +24,20 @@ import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SingleSelectionModel;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.CMS;
+
import org.librecms.contentsection.ContentSection;
import org.librecms.lifecycle.LifecycleDefinition;
+
import com.arsdigita.cms.ui.BaseAdminPane;
import com.arsdigita.cms.ui.BaseDeleteForm;
import com.arsdigita.cms.ui.FormSecurityListener;
+
import org.apache.log4j.Logger;
+import org.libreccm.cdi.utils.CdiUtil;
+import org.librecms.CmsConstants;
+import org.librecms.contentsection.ContentSectionManager;
+import org.librecms.lifecycle.Lifecycle;
+import org.librecms.lifecycle.LifecycleDefinitionRepository;
import java.math.BigDecimal;
@@ -37,10 +45,10 @@ import java.math.BigDecimal;
* This class contains the split pane for the lifecycle administration
* interface.
*
+ * @author Jens Pelzetter
* @author Michael Pih
* @author Jack Chung
- * @author Justin Ross <jross@redhat.com>
- * @version $Id: LifecycleAdminPane.java 1942 2009-05-29 07:53:23Z terry $
+ * @author Justin Ross
*/
public class LifecycleAdminPane extends BaseAdminPane {
@@ -75,10 +83,14 @@ public class LifecycleAdminPane extends BaseAdminPane {
private class SelectionRequestLocal
extends LifecycleDefinitionRequestLocal {
+ @Override
protected final Object initialValue(final PageState state) {
final String id = m_model.getSelectedKey(state).toString();
- return new LifecycleDefinition(new BigDecimal(id));
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final LifecycleDefinitionRepository lifecycleDefRepo = cdiUtil.findBean(LifecycleDefinitionRepository.class);
+
+ return lifecycleDefRepo.findById(Long.parseLong(id));
}
}
@@ -87,22 +99,26 @@ public class LifecycleAdminPane extends BaseAdminPane {
super(new Label(gz("cms.ui.lifecycle.delete_prompt")));
addSubmissionListener
- (new FormSecurityListener(SecurityManager.LIFECYCLE_ADMIN));
+ (new FormSecurityListener(CmsConstants.PRIVILEGE_ADMINISTER_LIFECYLES));
}
- public final void process(final FormSectionEvent e)
+ public final void process(final FormSectionEvent event)
throws FormProcessException {
- final PageState state = e.getPageState();
+ final PageState state = event.getPageState();
final ContentSection section =
CMS.getContext().getContentSection();
final LifecycleDefinition definition =
m_definition.getLifecycleDefinition(state);
- section.removeLifecycleDefinition(definition);
- section.save();
-
- definition.delete();
-
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final ContentSectionManager sectionManager = cdiUtil.findBean(
+ ContentSectionManager.class);
+ final LifecycleDefinitionRepository lifecycleDefRepo = cdiUtil.findBean(LifecycleDefinitionRepository.class);
+
+ sectionManager.removeLifecycleDefinitionFromContentSection(
+ definition, section);
+ lifecycleDefRepo.delete(definition);
+
m_model.clearSelection(state);
}
}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleEditForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleEditForm.java
new file mode 100755
index 000000000..6361585cc
--- /dev/null
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleEditForm.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.ui.lifecycle;
+
+import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.event.FormInitListener;
+import com.arsdigita.bebop.event.FormProcessListener;
+import com.arsdigita.bebop.event.FormSectionEvent;
+import com.arsdigita.kernel.KernelConfig;
+
+import org.apache.logging.log4j.LogManager;
+import org.librecms.lifecycle.LifecycleDefinition;
+import org.apache.logging.log4j.Logger;
+import org.libreccm.cdi.utils.CdiUtil;
+import org.libreccm.configuration.ConfigurationManager;
+import org.librecms.lifecycle.LifecycleDefinitionRepository;
+
+import java.util.Locale;
+
+/**
+ * This class contains a form component to edit a lifecycle definition.
+ *
+ * @author Jack Chung
+ * @author Xixi D'Moon <xdmoon@redhat.com>
+ * @author Justin Ross <jross@redhat.com>
+ * @version $Id$
+ */
+class LifecycleEditForm extends BaseLifecycleForm {
+
+ private static final Logger LOGGER = LogManager.getLogger(
+ LifecycleEditForm.class);
+
+ private final LifecycleDefinitionRequestLocal m_definition;
+
+ LifecycleEditForm(final LifecycleDefinitionRequestLocal definition) {
+ super("LifecycleEdit", gz("cms.ui.lifecycle.edit"));
+
+ m_definition = definition;
+
+ m_name.addValidationListener(new NameUniqueListener(m_definition));
+
+ addInitListener(new InitListener());
+ addProcessListener(new ProcessListener());
+ }
+
+ private class InitListener implements FormInitListener {
+
+ public final void init(final FormSectionEvent e) {
+ final PageState state = e.getPageState();
+ final LifecycleDefinition cycle = m_definition
+ .getLifecycleDefinition(state);
+
+ m_name.setValue(state, cycle.getLabel());
+ m_description.setValue(state, cycle.getDescription());
+ }
+
+ }
+
+ private class ProcessListener implements FormProcessListener {
+
+ public final void process(final FormSectionEvent e)
+ throws FormProcessException {
+ final PageState state = e.getPageState();
+ final LifecycleDefinition definition = m_definition
+ .getLifecycleDefinition(state);
+
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final ConfigurationManager confManager = cdiUtil.findBean(
+ ConfigurationManager.class);
+ final LifecycleDefinitionRepository lifecycleDefRepo = cdiUtil
+ .findBean(LifecycleDefinitionRepository.class);
+ final KernelConfig kernelConfig = confManager.findConfiguration(
+ KernelConfig.class);
+ final Locale defaultLocale = new Locale(kernelConfig
+ .getDefaultLanguage());
+
+ definition.getLabel().addValue(defaultLocale,
+ (String) m_name.getValue(state));
+ definition.getDescription().addValue(
+ defaultLocale,
+ (String) m_description.getValue(state));
+ lifecycleDefRepo.save(definition);
+ }
+
+ }
+
+}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleListModelBuilder.java.off b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleListModelBuilder.java
similarity index 86%
rename from ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleListModelBuilder.java.off
rename to ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleListModelBuilder.java
index 17a2ecdcf..05f44522e 100755
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleListModelBuilder.java.off
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/LifecycleListModelBuilder.java
@@ -24,7 +24,6 @@ import com.arsdigita.bebop.list.ListModelBuilder;
import com.arsdigita.cms.CMS;
import org.librecms.contentsection.ContentSection;
import com.arsdigita.util.LockableImpl;
-import com.arsdigita.util.UncheckedWrapperException;
import java.util.List;
import java.util.NoSuchElementException;
@@ -49,7 +48,8 @@ public final class LifecycleListModelBuilder extends LockableImpl
private class Model implements ListModel {
- private List m_cycles;
+ private final List m_cycles;
+ private int index = -1;
public Model(final PageState state) {
m_cycles = getCollection(state);
@@ -58,24 +58,25 @@ public final class LifecycleListModelBuilder extends LockableImpl
private List getCollection(final PageState state) {
final ContentSection section = CMS.getContext().getContentSection();
- final List cycles = section.get
- getLifecycleDefinitions();
-
- cycles.addOrder("upper(label)");
+ final List cycles = section.getLifecycleDefinitions();
return cycles;
}
+ @Override
public boolean next() throws NoSuchElementException {
- return m_cycles.next();
+ index++;
+ return index < m_cycles.size();
}
+ @Override
public Object getElement() {
- return m_cycles.getLifecycleDefinition().getLabel();
+ return m_cycles.get(index).getLabel();
}
+ @Override
public String getKey() {
- return m_cycles.getLifecycleDefinition().getID().toString();
+ return Long.toString(m_cycles.get(index).getDefinitionId());
}
}
}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/PhaseRequestLocal.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/PhaseRequestLocal.java
new file mode 100755
index 000000000..cb315acfa
--- /dev/null
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/PhaseRequestLocal.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.ui.lifecycle;
+
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.RequestLocal;
+import org.librecms.lifecycle.PhaseDefinition;
+import org.apache.log4j.Logger;
+
+public abstract class PhaseRequestLocal extends RequestLocal {
+
+ private static final Logger s_log = Logger.getLogger
+ (PhaseRequestLocal.class);
+
+ public final PhaseDefinition getPhase(final PageState state) {
+ return (PhaseDefinition) get(state);
+ }
+}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/PhaseTableModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/PhaseTableModelBuilder.java
new file mode 100755
index 000000000..a745fc3d3
--- /dev/null
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/lifecycle/PhaseTableModelBuilder.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.ui.lifecycle;
+
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.Table;
+import com.arsdigita.bebop.table.TableModel;
+import com.arsdigita.bebop.table.TableModelBuilder;
+import com.arsdigita.cms.lifecycle.Duration;
+
+import org.librecms.lifecycle.LifecycleDefinition;
+import org.librecms.lifecycle.PhaseDefinition;
+
+import com.arsdigita.globalization.GlobalizedMessage;
+import com.arsdigita.util.Assert;
+import com.arsdigita.util.LockableImpl;
+
+import org.arsdigita.cms.CMSConfig;
+import org.librecms.CmsConstants;
+
+import java.util.List;
+
+class PhaseTableModelBuilder extends LockableImpl
+ implements TableModelBuilder {
+ private final LifecycleDefinitionRequestLocal m_cycle;
+
+ public PhaseTableModelBuilder
+ (final LifecycleDefinitionRequestLocal cycle) {
+ m_cycle = cycle;
+ }
+
+ public final TableModel makeModel(final Table table,
+ final PageState state) {
+ return new PhaseTableModel(m_cycle.getLifecycleDefinition(state));
+ }
+
+ private static class PhaseTableModel implements TableModel {
+ private PhaseDefinition m_phase;
+ private final List m_phases;
+ private int index = -1;
+
+ public PhaseTableModel(final LifecycleDefinition cycle) {
+ m_phases = cycle.getPhaseDefinitions();
+ m_phase = null;
+ }
+
+ @Override
+ public final int getColumnCount() {
+ return 6;
+ }
+
+ @Override
+ public final boolean nextRow() {
+ index++;
+ if (index < m_phases.size()) {
+ m_phase = m_phases.get(index);
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public final Object getElementAt(final int column) {
+ Assert.exists(m_phase, "PhaseDefinition m_phase");
+
+ switch (column) {
+ case 0:
+ return m_phase.getLabel();
+ case 1:
+ return m_phase.getDescription();
+ case 2:
+ return Duration.formatDuration(m_phase.getDefaultDelay());
+ case 3:
+ final Long duration = m_phase.getDefaultDuration();
+
+ if (duration == null) {
+ return lz("cms.ui.lifecycle.forever");
+ } else {
+ return Duration.formatDuration(duration);
+ }
+ case 4:
+ return lz("cms.ui.lifecycle.phase_edit");
+ case 5:
+ return lz("cms.ui.lifecycle.phase_delete");
+ default:
+ throw new IllegalStateException();
+ }
+ }
+
+ public Object getKeyAt(int columnIndex) {
+ if (m_phase == null) {
+ throw new IllegalStateException();
+ } else {
+ return m_phase.getDefinitionId();
+ }
+ }
+ }
+
+ private static GlobalizedMessage gz(final String key) {
+ return new GlobalizedMessage(key, CmsConstants.CMS_BUNDLE);
+ }
+
+ private static String lz(final String key) {
+ return (String) gz(key).localize();
+ }
+}