From 9696a740027fb30f96d6ade882edac178d702703 Mon Sep 17 00:00:00 2001 From: N Smith Date: Sun, 7 Aug 2011 15:42:23 +0000 Subject: [PATCH] Implemented Unpublishing of content. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29593 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/model/publishingModel.xml | 11 ---- .../repo/publishing/ChannelHelper.java | 15 +---- .../alfresco/repo/publishing/ChannelImpl.java | 10 ++-- .../MutablePublishingPackageImpl.java | 28 +++++---- .../publishing/PublishEventActionTest.java | 58 ++++++++++++++++++- .../publishing/PublishingEventHelper.java | 30 +++++++++- .../publishing/PublishingIntegratedTest.java | 4 +- .../repo/publishing/PublishingModel.java | 1 - .../PublishingPackageSerializer.java | 7 ++- .../PublishingPackageSerializerTest.java | 5 +- .../repo/publishing/PublishingQueueImpl.java | 2 +- .../publishing/PublishingQueueImplTest.java | 20 +++---- .../StandardPublishingPackageSerializer.java | 19 +++--- .../publishing/MutablePublishingPackage.java | 14 +++-- .../cmr/publishing/PublishingQueue.java | 2 +- 15 files changed, 149 insertions(+), 77 deletions(-) diff --git a/config/alfresco/model/publishingModel.xml b/config/alfresco/model/publishingModel.xml index 203ee8d22d..6007873759 100644 --- a/config/alfresco/model/publishingModel.xml +++ b/config/alfresco/model/publishingModel.xml @@ -290,17 +290,6 @@ false - - - false - true - - - pub:DeliveryChannel - false - false - - diff --git a/source/java/org/alfresco/repo/publishing/ChannelHelper.java b/source/java/org/alfresco/repo/publishing/ChannelHelper.java index c824d3a8f2..05601e3a08 100644 --- a/source/java/org/alfresco/repo/publishing/ChannelHelper.java +++ b/source/java/org/alfresco/repo/publishing/ChannelHelper.java @@ -21,7 +21,6 @@ package org.alfresco.repo.publishing; import static org.alfresco.model.ContentModel.ASSOC_CONTAINS; import static org.alfresco.repo.publishing.PublishingModel.ASPECT_PUBLISHED; -import static org.alfresco.repo.publishing.PublishingModel.ASSOC_PUBLISHED_CHANNEL; import static org.alfresco.repo.publishing.PublishingModel.ASSOC_SOURCE; import static org.alfresco.repo.publishing.PublishingModel.PROP_CHANNEL; import static org.alfresco.repo.publishing.PublishingModel.PROP_CHANNEL_TYPE; @@ -132,13 +131,8 @@ public class ChannelHelper public Boolean apply(AssociationRef assoc) { NodeRef publishedNode = assoc.getSourceRef(); - List channelAssoc = nodeService.getTargetAssocs(publishedNode, ASSOC_PUBLISHED_CHANNEL); - if(CollectionUtils.isEmpty(channelAssoc)) - { - return false; - } - NodeRef target = channelAssoc.get(0).getTargetRef(); - return target.equals(channelNode); + NodeRef parent = nodeService.getPrimaryParent(publishedNode).getParentRef(); + return channelNode.equals(parent); } }; AssociationRef assoc = CollectionUtils.findFirst(sourceAssocs, acceptor); @@ -322,11 +316,6 @@ public class ChannelHelper public void addPublishedAspect(NodeRef publishedNode, NodeRef channelNode) { nodeService.addAspect(publishedNode, ASPECT_PUBLISHED, null); - List channelAssoc = nodeService.getTargetAssocs(publishedNode, ASSOC_PUBLISHED_CHANNEL); - if(CollectionUtils.isEmpty(channelAssoc)) - { - nodeService.createAssociation(publishedNode, channelNode, ASSOC_PUBLISHED_CHANNEL); - } } private List getChannelAssocs(NodeRef channelContainer) diff --git a/source/java/org/alfresco/repo/publishing/ChannelImpl.java b/source/java/org/alfresco/repo/publishing/ChannelImpl.java index 1dd0f56b82..a3c02f6eb8 100644 --- a/source/java/org/alfresco/repo/publishing/ChannelImpl.java +++ b/source/java/org/alfresco/repo/publishing/ChannelImpl.java @@ -50,7 +50,6 @@ public class ChannelImpl implements Channel /** * {@inheritDoc} */ - @Override public String getId() { return nodeRef.toString(); @@ -91,7 +90,6 @@ public class ChannelImpl implements Channel /** * {@inheritDoc} */ - @Override public void publish(NodeRef nodeToPublish) { channelHelper.addPublishedAspect(nodeToPublish, nodeRef); @@ -104,17 +102,17 @@ public class ChannelImpl implements Channel /** * {@inheritDoc} */ - @Override public void unPublish(NodeRef nodeToUnpublish) { - // TODO Auto-generated method stub - + if(channelType.canUnpublish()) + { + channelType.unpublish(nodeToUnpublish, getProperties()); + } } /** * {@inheritDoc} */ - @Override public void updateStatus(String status) { channelType.updateStatus(this, status, getProperties()); diff --git a/source/java/org/alfresco/repo/publishing/MutablePublishingPackageImpl.java b/source/java/org/alfresco/repo/publishing/MutablePublishingPackageImpl.java index 8767d02f5e..dd079783f4 100644 --- a/source/java/org/alfresco/repo/publishing/MutablePublishingPackageImpl.java +++ b/source/java/org/alfresco/repo/publishing/MutablePublishingPackageImpl.java @@ -30,6 +30,7 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.transfer.manifest.TransferManifestNodeFactory; import org.alfresco.repo.transfer.manifest.TransferManifestNormalNode; +import org.alfresco.service.cmr.publishing.PublishingPackage; import org.alfresco.service.cmr.publishing.MutablePublishingPackage; import org.alfresco.service.cmr.publishing.PublishingPackageEntry; import org.alfresco.service.cmr.repository.NodeRef; @@ -40,6 +41,7 @@ import org.alfresco.service.cmr.version.VersionService; * @author Brian * @author Nick Smith * + * @since 4.0 */ public class MutablePublishingPackageImpl implements MutablePublishingPackage { @@ -62,15 +64,15 @@ public class MutablePublishingPackageImpl implements MutablePublishingPackage /** * {@inheritDoc} */ - public void addNodesToPublish(NodeRef... nodesToAdd) + public MutablePublishingPackage addNodesToPublish(NodeRef... nodesToAdd) { - addNodesToPublish(Arrays.asList(nodesToAdd)); + return addNodesToPublish(Arrays.asList(nodesToAdd)); } /** * {@inheritDoc} */ - public void addNodesToPublish(final Collection nodesToAdd) + public MutablePublishingPackage addNodesToPublish(final Collection nodesToAdd) { AuthenticationUtil.runAs(new RunAsWork() { @@ -81,6 +83,7 @@ public class MutablePublishingPackageImpl implements MutablePublishingPackage } }, AuthenticationUtil.getSystemUserName()); nodesToPublish.addAll(nodesToAdd); + return this; } private void versionNodes(Collection nodesToAdd) @@ -105,27 +108,27 @@ public class MutablePublishingPackageImpl implements MutablePublishingPackage /** * {@inheritDoc} */ - public void addNodesToUnpublish(NodeRef... nodesToRemove) + public MutablePublishingPackage addNodesToUnpublish(NodeRef... nodesToRemove) { - addNodesToUnpublish(Arrays.asList(nodesToRemove)); + return addNodesToUnpublish(Arrays.asList(nodesToRemove)); } /** * {@inheritDoc} */ - public void addNodesToUnpublish(Collection nodesToRemove) + public MutablePublishingPackage addNodesToUnpublish(Collection nodesToRemove) { for (NodeRef nodeRef : nodesToRemove) { entryMap.put(nodeRef, new PublishingPackageEntryImpl(false, nodeRef, null, null)); } nodesToUnpublish.addAll(nodesToRemove); + return this; } /** * {@inheritDoc} */ - @Override public Collection getEntries() { return entryMap.values(); @@ -134,7 +137,6 @@ public class MutablePublishingPackageImpl implements MutablePublishingPackage /** * {@inheritDoc} */ - @Override public Set getNodesToPublish() { return nodesToPublish; @@ -143,7 +145,6 @@ public class MutablePublishingPackageImpl implements MutablePublishingPackage /** * {@inheritDoc} */ - @Override public Set getNodesToUnpublish() { return nodesToUnpublish; @@ -152,9 +153,16 @@ public class MutablePublishingPackageImpl implements MutablePublishingPackage /** * {@inheritDoc} */ - @Override public Map getEntryMap() { return entryMap; } + + /** + * {@inheritDoc} + */ + public PublishingPackage build() + { + return new PublishingPackageImpl(entryMap); + } } diff --git a/source/java/org/alfresco/repo/publishing/PublishEventActionTest.java b/source/java/org/alfresco/repo/publishing/PublishEventActionTest.java index 31d4b1b896..9d7d82d10e 100644 --- a/source/java/org/alfresco/repo/publishing/PublishEventActionTest.java +++ b/source/java/org/alfresco/repo/publishing/PublishEventActionTest.java @@ -204,6 +204,26 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest assertFalse(publishedProps.containsKey(PROP_LONGITUDE)); } + public void testUnpublishNode() throws Exception + { + // Create content node and publish. + NodeRef source = testHelper.createContentNode(contentNodeName, content, MimetypeMap.MIMETYPE_TEXT_PLAIN); + publishNode(source); + + // Check published node exists + NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode); + assertNotNull(publishedNode); + assertTrue(nodeService.exists(publishedNode)); + + // Unpublish source node. + publishNode(source, null, false); + + // Check the published node no longer exists. + assertFalse(nodeService.exists(publishedNode)); + publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode); + assertNull(publishedNode); + } + @SuppressWarnings("unchecked") @Test public void testChannelTypePublishIsCalledOnPublish() throws Exception @@ -242,6 +262,28 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest // Check publish was called on update verify(channelType, times(1)).publish(eq(publishedNode), anyMap()); + + // Unpublish node. + publishNode(source, null, false); + + // Check unpublish was not called, since ChannelType doesn't support it. + verify(channelType, never()).unpublish(eq(publishedNode), anyMap()); + + // Enable unpublishing on ChannelType. + when(channelType.canUnpublish()).thenReturn(true); + + // Re-publish the node. + publishNode(source); + + // Get the newly published node. + publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode); + assertNotNull(publishedNode); + + // Unpublish the node + publishNode(source, null, false); + + // Check unpublish was called on update + verify(channelType, times(1)).unpublish(eq(publishedNode), anyMap()); } @Test @@ -339,8 +381,20 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest private NodeRef publishNode(NodeRef source, StatusUpdate statusUpdate) { - MutablePublishingPackage pckg = publishingService.getPublishingQueue().createPublishingPackage(); - pckg.addNodesToPublish(source); + return publishNode(source, statusUpdate, true); + } + + private NodeRef publishNode(NodeRef source, StatusUpdate statusUpdate, boolean publish) + { + MutablePublishingPackage pckg = publishingService.getPublishingQueue().createPublishingPackageBuilder(); + if(publish) + { + pckg.addNodesToPublish(source); + } + else + { + pckg.addNodesToUnpublish(source); + } String eventId = testHelper.scheduleEvent1Year(pckg, channel.getId(), null, statusUpdate); assertNotNull(eventId); diff --git a/source/java/org/alfresco/repo/publishing/PublishingEventHelper.java b/source/java/org/alfresco/repo/publishing/PublishingEventHelper.java index 842fefeacc..47b62f0a91 100644 --- a/source/java/org/alfresco/repo/publishing/PublishingEventHelper.java +++ b/source/java/org/alfresco/repo/publishing/PublishingEventHelper.java @@ -42,6 +42,7 @@ import static org.alfresco.util.collections.CollectionUtils.isEmpty; import static org.alfresco.util.collections.CollectionUtils.toListOfStrings; import static org.alfresco.util.collections.CollectionUtils.transform; import static org.alfresco.util.collections.CollectionUtils.transformFlat; +import static org.alfresco.util.collections.CollectionUtils.transformToMap; import java.io.InputStream; import java.io.OutputStream; @@ -64,6 +65,7 @@ import org.alfresco.repo.workflow.WorkflowModel; import org.alfresco.service.cmr.publishing.PublishingEvent; import org.alfresco.service.cmr.publishing.PublishingEventFilter; import org.alfresco.service.cmr.publishing.PublishingPackage; +import org.alfresco.service.cmr.publishing.PublishingPackageEntry; import org.alfresco.service.cmr.publishing.Status; import org.alfresco.service.cmr.publishing.StatusUpdate; import org.alfresco.service.cmr.repository.AssociationRef; @@ -82,6 +84,7 @@ import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.RegexQNamePattern; import org.alfresco.util.GUID; +import org.alfresco.util.collections.CollectionUtils; import org.alfresco.util.collections.Filter; import org.alfresco.util.collections.Function; import org.apache.commons.logging.Log; @@ -498,7 +501,10 @@ public class PublishingEventHelper InputStream input = contentReader.getContentInputStream(); try { - return serializer.deserialize(input); + Map publishEntires = serializer.deserialize(input); + Map allEntries = getUnpublishPackageEntries(eventNode); + allEntries.putAll(publishEntires); + return new PublishingPackageImpl(allEntries); } catch (Exception ex) { @@ -507,6 +513,28 @@ public class PublishingEventHelper } } + private Map getUnpublishPackageEntries(NodeRef eventNode) + { + @SuppressWarnings("unchecked") + List entries= (List) nodeService.getProperty(eventNode, PROP_PUBLISHING_EVENT_NODES_TO_UNPUBLISH); + if(CollectionUtils.isEmpty(entries)) + { + return new HashMap(); + } + List nodes = NodeUtils.toNodeRefs(entries); + return transformToMap(nodes, new Function() + { + public PublishingPackageEntry apply(NodeRef node) + { + if(NodeUtils.exists(node, nodeService)) + { + return new PublishingPackageEntryImpl(false, node, null, null); + } + return null; + } + }); + } + public void cancelEvent(String id) { NodeRef eventNode = getPublishingEventNode(id); diff --git a/source/java/org/alfresco/repo/publishing/PublishingIntegratedTest.java b/source/java/org/alfresco/repo/publishing/PublishingIntegratedTest.java index cad35b55a8..538a343c6a 100644 --- a/source/java/org/alfresco/repo/publishing/PublishingIntegratedTest.java +++ b/source/java/org/alfresco/repo/publishing/PublishingIntegratedTest.java @@ -85,7 +85,7 @@ public class PublishingIntegratedTest extends BaseSpringTest } PublishingQueue liveQueue = publishingService.getPublishingQueue(); - MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage(); + MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackageBuilder(); publishingPackage.addNodesToPublish(nodes); Calendar scheduleTime = Calendar.getInstance(); @@ -118,7 +118,7 @@ public class PublishingIntegratedTest extends BaseSpringTest NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef()); } PublishingQueue liveQueue = publishingService.getPublishingQueue(); - MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage(); + MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackageBuilder(); publishingPackage.addNodesToPublish(nodes); Calendar scheduleTime = Calendar.getInstance(); diff --git a/source/java/org/alfresco/repo/publishing/PublishingModel.java b/source/java/org/alfresco/repo/publishing/PublishingModel.java index 51c773b413..d01d25af7a 100644 --- a/source/java/org/alfresco/repo/publishing/PublishingModel.java +++ b/source/java/org/alfresco/repo/publishing/PublishingModel.java @@ -91,7 +91,6 @@ public interface PublishingModel public static final QName ASSOC_PUBLISHING_EVENT = QName.createQName(NAMESPACE, "publishingEventAssoc"); public static final QName ASSOC_SOURCE = QName.createQName(NAMESPACE, "source"); public static final QName ASSOC_LAST_PUBLISHING_EVENT= QName.createQName(NAMESPACE, "lastPublishingEvent"); - public static final QName ASSOC_PUBLISHED_CHANNEL= QName.createQName(NAMESPACE, "publishedChannel"); // Workflow Properties public static final QName PROP_WF_PUBLISHING_EVENT= QName.createQName(WF_NAMESPACE, "publishingEvent"); diff --git a/source/java/org/alfresco/repo/publishing/PublishingPackageSerializer.java b/source/java/org/alfresco/repo/publishing/PublishingPackageSerializer.java index 5b44d4da14..b370e66db2 100644 --- a/source/java/org/alfresco/repo/publishing/PublishingPackageSerializer.java +++ b/source/java/org/alfresco/repo/publishing/PublishingPackageSerializer.java @@ -21,16 +21,21 @@ package org.alfresco.repo.publishing; import java.io.InputStream; import java.io.OutputStream; +import java.util.Map; import org.alfresco.service.cmr.publishing.PublishingPackage; +import org.alfresco.service.cmr.publishing.PublishingPackageEntry; +import org.alfresco.service.cmr.repository.NodeRef; /** * @author Brian + * @author Nick Smith * + * @since 4.0 */ public interface PublishingPackageSerializer { void serialize(PublishingPackage publishingPackage, OutputStream output) throws Exception; - PublishingPackage deserialize(InputStream input) throws Exception; + Map deserialize(InputStream input) throws Exception; } diff --git a/source/java/org/alfresco/repo/publishing/PublishingPackageSerializerTest.java b/source/java/org/alfresco/repo/publishing/PublishingPackageSerializerTest.java index 02573c6912..a73debbe88 100644 --- a/source/java/org/alfresco/repo/publishing/PublishingPackageSerializerTest.java +++ b/source/java/org/alfresco/repo/publishing/PublishingPackageSerializerTest.java @@ -19,8 +19,6 @@ package org.alfresco.repo.publishing; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -144,8 +142,7 @@ public class PublishingPackageSerializerTest extends AbstractPublishingIntegrati byte[] output = os.toByteArray(); ByteArrayInputStream is = new ByteArrayInputStream(output); - PublishingPackageImpl deserializedPublishingPackage = (PublishingPackageImpl) serializer.deserialize(is); - Map entryMap = deserializedPublishingPackage.getEntryMap(); + Map entryMap = serializer.deserialize(is); assertEquals(1, entryMap.size()); assertTrue(entryMap.containsKey(normalNode1.getNodeRef())); PublishingPackageEntryImpl entry = (PublishingPackageEntryImpl) entryMap.get(normalNode1.getNodeRef()); diff --git a/source/java/org/alfresco/repo/publishing/PublishingQueueImpl.java b/source/java/org/alfresco/repo/publishing/PublishingQueueImpl.java index 83d51d813b..602e6bbf67 100644 --- a/source/java/org/alfresco/repo/publishing/PublishingQueueImpl.java +++ b/source/java/org/alfresco/repo/publishing/PublishingQueueImpl.java @@ -60,7 +60,7 @@ public class PublishingQueueImpl implements PublishingQueue /** * {@inheritDoc} */ - public MutablePublishingPackage createPublishingPackage() + public MutablePublishingPackage createPublishingPackageBuilder() { return new MutablePublishingPackageImpl(transferManifestNodeFactory, versionService); } diff --git a/source/java/org/alfresco/repo/publishing/PublishingQueueImplTest.java b/source/java/org/alfresco/repo/publishing/PublishingQueueImplTest.java index bc31e5f3cd..e453cef151 100644 --- a/source/java/org/alfresco/repo/publishing/PublishingQueueImplTest.java +++ b/source/java/org/alfresco/repo/publishing/PublishingQueueImplTest.java @@ -42,7 +42,6 @@ import org.alfresco.service.cmr.publishing.PublishingService; import org.alfresco.service.cmr.publishing.Status; import org.alfresco.service.cmr.publishing.StatusUpdate; import org.alfresco.service.cmr.publishing.channels.Channel; -import org.alfresco.service.cmr.publishing.channels.ChannelType; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.workflow.WorkflowInstance; @@ -73,12 +72,11 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest assertNull(nodeService.getProperty(firstNode, PROP_VERSION_LABEL)); assertNull(nodeService.getProperty(firstNode, PROP_VERSION_LABEL)); - MutablePublishingPackage publishingPackage = publishingService.getPublishingQueue().createPublishingPackage(); + MutablePublishingPackage publishingPackage = publishingService.getPublishingQueue().createPublishingPackageBuilder(); publishingPackage.addNodesToPublish(firstNode, secondNode); - //TODO Implement Unpublish -// NodeRef thirdNode = fileFolderService.create(docLib, "third", ContentModel.TYPE_CONTENT).getNodeRef(); -// publishingPackage.addNodesToUnpublish(thirdNode); + NodeRef thirdNode = createContent("third"); + publishingPackage.addNodesToUnpublish(thirdNode); Calendar schedule = Calendar.getInstance(); schedule.add(Calendar.HOUR, 2); @@ -103,9 +101,9 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest ArrayList toUnpublish = new ArrayList(1); for (PublishingPackageEntry entry : pckg.getEntries()) { - assertNotNull(entry.getSnapshot()); if(entry.isPublish()) { + assertNotNull(entry.getSnapshot()); toPublish.add(entry.getNodeRef()); } else @@ -118,8 +116,8 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest assertTrue(toPublish.contains(firstNode)); assertTrue(toPublish.contains(secondNode)); -// assertEquals(1, toUnpublish.size()); -// assertTrue(toUnpublish.contains(thirdNode)); + assertEquals(1, toUnpublish.size()); + assertTrue(toUnpublish.contains(thirdNode)); // Check the correct version is recorded in the entry. PublishingPackageEntry entry = publishingPackage.getEntryMap().get(firstNode); @@ -148,7 +146,7 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest StatusUpdate update = publishingService.getPublishingQueue().createStatusUpdate(message, secondNode, channelNames); // Publish an event with the StatusUpdate - MutablePublishingPackage publishingPackage = publishingService.getPublishingQueue().createPublishingPackage(); + MutablePublishingPackage publishingPackage = publishingService.getPublishingQueue().createPublishingPackageBuilder(); publishingPackage.addNodesToPublish(firstNode, secondNode); Calendar schedule = Calendar.getInstance(); schedule.add(Calendar.HOUR, 2); @@ -167,7 +165,7 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest public void testScheduleNewEventPermissions() throws Exception { // Create Channels as Admin - ChannelType channelType = testHelper.mockChannelType(channelTypeId); + testHelper.mockChannelType(channelTypeId); Channel publishChannel = testHelper.createChannel(channelTypeId); Channel statusChannel = testHelper.createChannel(channelTypeId); @@ -182,7 +180,7 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest personManager.setUser(user1); // Publish an event - MutablePublishingPackage publishingPackage = publishingService.getPublishingQueue().createPublishingPackage(); + MutablePublishingPackage publishingPackage = publishingService.getPublishingQueue().createPublishingPackageBuilder(); publishingPackage.addNodesToPublish(firstNode, secondNode); try { diff --git a/source/java/org/alfresco/repo/publishing/StandardPublishingPackageSerializer.java b/source/java/org/alfresco/repo/publishing/StandardPublishingPackageSerializer.java index 6b71addcd1..cdfad0f786 100644 --- a/source/java/org/alfresco/repo/publishing/StandardPublishingPackageSerializer.java +++ b/source/java/org/alfresco/repo/publishing/StandardPublishingPackageSerializer.java @@ -25,10 +25,10 @@ import java.io.OutputStreamWriter; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.io.Writer; -import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.Set; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -54,8 +54,9 @@ public class StandardPublishingPackageSerializer implements PublishingPackageSer { /** * {@inheritDoc} + * @return */ - public PublishingPackage deserialize(InputStream input) throws Exception + public Map deserialize(InputStream input) throws Exception { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser parser = saxParserFactory.newSAXParser(); @@ -63,8 +64,7 @@ public class StandardPublishingPackageSerializer implements PublishingPackageSer XMLTransferManifestReader xmlReader = new XMLTransferManifestReader(processor); parser.parse(input, xmlReader); - PublishingPackageImpl publishingPackage = new PublishingPackageImpl(processor.getEntries()); - return publishingPackage; + return processor.getEntries(); } /** @@ -74,11 +74,10 @@ public class StandardPublishingPackageSerializer implements PublishingPackageSer { try { - Collection entries = publishingPackage.getEntries(); - + Set nodesToPublish = publishingPackage.getNodesToPublish(); TransferManifestHeader header = new TransferManifestHeader(); header.setCreatedDate(new Date()); - header.setNodeCount(entries.size()); + header.setNodeCount(nodesToPublish.size()); header.setReadOnly(false); header.setSync(false); @@ -87,8 +86,12 @@ public class StandardPublishingPackageSerializer implements PublishingPackageSer XMLTransferManifestWriter transferManifestWriter = new XMLTransferManifestWriter(); transferManifestWriter.startTransferManifest(writer); transferManifestWriter.writeTransferManifestHeader(header); - for (PublishingPackageEntry entry : entries) + + // Iterate over NodesToPublish and Serialize. + Map entryMap = publishingPackage.getEntryMap(); + for (NodeRef publishNode: nodesToPublish) { + PublishingPackageEntry entry = entryMap.get(publishNode); if (entry instanceof PublishingPackageEntryImpl) { PublishingPackageEntryImpl entryImpl = (PublishingPackageEntryImpl)entry; diff --git a/source/java/org/alfresco/service/cmr/publishing/MutablePublishingPackage.java b/source/java/org/alfresco/service/cmr/publishing/MutablePublishingPackage.java index 3c8b9952ef..bfbf1ce467 100644 --- a/source/java/org/alfresco/service/cmr/publishing/MutablePublishingPackage.java +++ b/source/java/org/alfresco/service/cmr/publishing/MutablePublishingPackage.java @@ -23,17 +23,21 @@ import java.util.Collection; import org.alfresco.service.cmr.repository.NodeRef; /** - * An extension of the {@link PublishingPackage} interface that permits changes to be made + * An extendsion of the {@link PublishingPackage} interface which allows values to be modified. * @author Brian + * @author Nick Smith * + * @since 4.0 */ public interface MutablePublishingPackage extends PublishingPackage { - void addNodesToUnpublish(NodeRef... nodesToRemove); + MutablePublishingPackage addNodesToUnpublish(NodeRef... nodesToRemove); - void addNodesToUnpublish(Collection nodesToRemove); + MutablePublishingPackage addNodesToUnpublish(Collection nodesToRemove); - void addNodesToPublish(NodeRef... nodesToPublish); + MutablePublishingPackage addNodesToPublish(NodeRef... nodesToPublish); - void addNodesToPublish(Collection nodesToPublish); + MutablePublishingPackage addNodesToPublish(Collection nodesToPublish); + + PublishingPackage build(); } diff --git a/source/java/org/alfresco/service/cmr/publishing/PublishingQueue.java b/source/java/org/alfresco/service/cmr/publishing/PublishingQueue.java index c7269961ff..7f15a463ee 100644 --- a/source/java/org/alfresco/service/cmr/publishing/PublishingQueue.java +++ b/source/java/org/alfresco/service/cmr/publishing/PublishingQueue.java @@ -31,7 +31,7 @@ public interface PublishingQueue * a call to the {@link PublishingQueue#scheduleNewEvent(PublishingPackage, String, Calendar, String, StatusUpdate)} operation. * @return A publishing package that can be populated before being placed on the publishing queue. */ - MutablePublishingPackage createPublishingPackage(); + MutablePublishingPackage createPublishingPackageBuilder(); StatusUpdate createStatusUpdate(String message, NodeRef nodeToLinkTo, String... channelIds); StatusUpdate createStatusUpdate(String message, NodeRef nodeToLinkTo, Collection channelIds);