From: <mb...@re...> - 2004-11-05 12:09:59
|
Author: mbooth Date: 2004-11-05 13:02:47 +0100 (Fri, 05 Nov 2004) New Revision: 81 Modified: ccm-cms/trunk/src/com/arsdigita/cms/ContentItem.java ccm-cms/trunk/src/com/arsdigita/cms/lifecycle/LifecycleService.java ccm-cms/trunk/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java Log: Bring back republish Modified: ccm-cms/trunk/src/com/arsdigita/cms/ContentItem.java =================================================================== --- ccm-cms/trunk/src/com/arsdigita/cms/ContentItem.java 2004-11-04 20:38:35 UTC (rev 80) +++ ccm-cms/trunk/src/com/arsdigita/cms/ContentItem.java 2004-11-05 12:02:47 UTC (rev 81) @@ -1233,6 +1233,27 @@ } /** + * Republish the item using its existing lifecycle + */ + public void republish() { + if( s_log.isDebugEnabled() ) { + s_log.debug( "Republishing item " + getOID().toString() ); + } + + Assert.truth( isLive(), "Attempt to republish non live item " + getOID() ); + + Lifecycle cycle = getLifecycle(); + Assert.exists( cycle, Lifecycle.class ); + + if( s_log.isDebugEnabled() ) { + s_log.debug( "Reusing lifecycle " + cycle.getOID() ); + } + + ContentItem newLive = createPendingVersion( cycle ); + promotePendingVersion( newLive ); + } + + /** * Fetches the publication lifecycle. * * @return The associated lifecycle, null if there is none @@ -1243,8 +1264,10 @@ final Lifecycle lifecycle = LifecycleService.getLifecycle(this); if (lifecycle == null) { - s_log.debug("The item has no lifecycle; checking if the public " + - "version has a lifecycle"); + if( s_log.isDebugEnabled() ) { + s_log.debug("The item has no lifecycle; checking if the " + + "public version has a lifecycle"); + } final ContentItem pub = getPublicVersion(); Modified: ccm-cms/trunk/src/com/arsdigita/cms/lifecycle/LifecycleService.java =================================================================== --- ccm-cms/trunk/src/com/arsdigita/cms/lifecycle/LifecycleService.java 2004-11-04 20:38:35 UTC (rev 80) +++ ccm-cms/trunk/src/com/arsdigita/cms/lifecycle/LifecycleService.java 2004-11-05 12:02:47 UTC (rev 81) @@ -193,7 +193,13 @@ LifecycleService service = null; if (coll.next()) { service = new LifecycleService(coll.getDataObject()); + + if( coll.next() ) { + s_log.warn( "Multiple lifecycles for " + + object.getOID().toString() ); + } } + coll.close(); return service; Modified: ccm-cms/trunk/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java =================================================================== --- ccm-cms/trunk/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java 2004-11-04 20:38:35 UTC (rev 80) +++ ccm-cms/trunk/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java 2004-11-05 12:02:47 UTC (rev 81) @@ -27,18 +27,28 @@ import com.arsdigita.bebop.event.ActionListener; import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.dispatcher.Utilities; import com.arsdigita.cms.lifecycle.Lifecycle; import com.arsdigita.cms.ui.BaseItemPane; import com.arsdigita.cms.ui.ContentItemPage; import com.arsdigita.cms.ui.item.ContentItemRequestLocal; +import com.arsdigita.cms.workflow.CMSTask; +import com.arsdigita.kernel.User; import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.PropertyList; import com.arsdigita.toolbox.ui.Section; +import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.web.RedirectSignal; import com.arsdigita.web.URL; +import com.arsdigita.web.Web; +import com.arsdigita.workflow.simple.Engine; +import com.arsdigita.workflow.simple.TaskException; +import com.arsdigita.workflow.simple.Workflow; + import org.apache.log4j.Logger; import java.text.DateFormat; +import java.util.Iterator; /** * This class contains the component which displays the information @@ -87,6 +97,7 @@ group.setSubject(new Properties()); group.addAction(new UnpublishLink()); + group.addAction(new RepublishLink()); } private class Properties extends PropertyList { @@ -144,6 +155,55 @@ } } + private class RepublishLink extends ActionLink { + RepublishLink() { + super(new Label(gz("cms.ui.item.lifecycle.republish"))); + + addActionListener(new Listener()); + } + + private class Listener implements ActionListener { + public final void actionPerformed(final ActionEvent e) { + final PageState state = e.getPageState(); + final ContentItem item = m_item.getContentItem(state); + + item.republish(); + + // XXX: The following cut/pasted from com.arsdigita.cms.ui.lifecycle.ItemLifecycleSelectForm.ProcessListener.process() + // Refactor to reuse this code + + Workflow workflow = Workflow.getObjectWorkflow( item ); + if( null != workflow ) { + final Engine engine = Engine.getInstance(); + final User user = Web.getContext().getUser(); + + final Iterator iter = engine.getEnabledTasks + (user, workflow.getID()).iterator(); + + while (iter.hasNext()) { + final CMSTask task = (CMSTask) iter.next(); + + if (task.getTaskType().equals(CMSTask.DEPLOY)) { + s_log.debug("Found DEPLOY task, ID=" + CMSTask.DEPLOY); + try { + task.finish(user); + } catch (TaskException te) { + throw new UncheckedWrapperException(te); + } + } + } + } + + if (ContentSection.getConfig().getUseStreamlinedCreation()) { + throw new RedirectSignal + (URL.there(state.getRequest(), + Utilities.getWorkspaceURL()), + true); + } + } + } + } + private class PhaseSection extends Section { PhaseSection() { super(gz("cms.ui.lifecycle.phases")); |