mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Removed the Environment from the publishing implementation.
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29183 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -34,17 +34,6 @@
|
||||
</property>
|
||||
</properties>
|
||||
<associations>
|
||||
<association name="pub:editorialChannel">
|
||||
<source>
|
||||
<mandatory>false</mandatory>
|
||||
<many>false</many>
|
||||
</source>
|
||||
<target>
|
||||
<class>pub:DeliveryChannel</class>
|
||||
<mandatory>false</mandatory>
|
||||
<many>false</many>
|
||||
</target>
|
||||
</association>
|
||||
<child-association name="pub:deliveryServers">
|
||||
<source>
|
||||
<mandatory>false</mandatory>
|
||||
@@ -275,11 +264,11 @@
|
||||
</aspect>
|
||||
|
||||
<aspect name="pub:published">
|
||||
<title>Channel Info</title>
|
||||
<title>Published</title>
|
||||
<description>Applied to a published node</description>
|
||||
<parent>cm:titled</parent>
|
||||
<associations>
|
||||
<child-association name="pub:source">
|
||||
<association name="pub:source">
|
||||
<source>
|
||||
<mandatory>false</mandatory>
|
||||
<many>true</many>
|
||||
@@ -289,8 +278,8 @@
|
||||
<mandatory>false</mandatory>
|
||||
<many>false</many>
|
||||
</target>
|
||||
</child-association>
|
||||
<child-association name="pub:lastPublishingEvent">
|
||||
</association>
|
||||
<association name="pub:lastPublishingEvent">
|
||||
<source>
|
||||
<mandatory>false</mandatory>
|
||||
<many>false</many>
|
||||
@@ -300,7 +289,18 @@
|
||||
<mandatory>false</mandatory>
|
||||
<many>true</many>
|
||||
</target>
|
||||
</child-association>
|
||||
</association>
|
||||
<association name="pub:publishedChannel">
|
||||
<source>
|
||||
<mandatory>false</mandatory>
|
||||
<many>false</many>
|
||||
</source>
|
||||
<target>
|
||||
<class>pub:DeliveryChannel</class>
|
||||
<mandatory>false</mandatory>
|
||||
<many>true</many>
|
||||
</target>
|
||||
</association>
|
||||
</associations>
|
||||
</aspect>
|
||||
|
||||
|
@@ -21,8 +21,8 @@ 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.NAMESPACE;
|
||||
import static org.alfresco.repo.publishing.PublishingModel.PROP_CHANNEL;
|
||||
import static org.alfresco.repo.publishing.PublishingModel.PROP_CHANNEL_TYPE;
|
||||
import static org.alfresco.repo.publishing.PublishingModel.PROP_CHANNEL_TYPE_ID;
|
||||
@@ -44,14 +44,13 @@ import org.alfresco.service.cmr.model.FileInfo;
|
||||
import org.alfresco.service.cmr.publishing.channels.Channel;
|
||||
import org.alfresco.service.cmr.publishing.channels.ChannelService;
|
||||
import org.alfresco.service.cmr.publishing.channels.ChannelType;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ContentData;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.alfresco.util.collections.CollectionUtils;
|
||||
import org.alfresco.util.collections.Filter;
|
||||
@@ -99,82 +98,41 @@ public class ChannelHelper
|
||||
return null;
|
||||
}
|
||||
Map<QName, Serializable> props = nodeService.getProperties(nodeRef);
|
||||
String channelTypeId = (String) props.get(PublishingModel.PROP_CHANNEL_TYPE_ID);
|
||||
String channelTypeId = (String) props.get(PROP_CHANNEL_TYPE_ID);
|
||||
ChannelType channelType = channelService.getChannelType(channelTypeId);
|
||||
String name = (String) props.get(ContentModel.PROP_NAME);
|
||||
return new ChannelImpl(channelType, nodeRef, name, this);
|
||||
}
|
||||
|
||||
public NodeRef addChannelToEnvironment(NodeRef environment, Channel channel, Map<QName, Serializable> properties)
|
||||
{
|
||||
ChannelType channelType = channel.getChannelType();
|
||||
String channelName = channel.getName();
|
||||
NodeRef envChannel = createChannelNode(environment, channelType, channelName, properties);
|
||||
nodeService.createAssociation(envChannel, channel.getNodeRef(), PublishingModel.ASSOC_EDITORIAL_CHANNEL);
|
||||
return envChannel;
|
||||
}
|
||||
|
||||
public Channel getChannel(NodeRef environment, String channelName, ChannelService channelService)
|
||||
{
|
||||
NodeRef channelNode = getChannelNodeForEnvironment(environment, channelName);
|
||||
if(channelNode != null)
|
||||
{
|
||||
return buildChannelObject(channelNode, channelService);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public NodeRef getChannelNodeForEnvironment(NodeRef environment, String channelName)
|
||||
{
|
||||
QName channelQName = getChannelQName(channelName);
|
||||
List<ChildAssociationRef> channelAssocs = nodeService.getChildAssocs(environment, ASSOC_CONTAINS, channelQName);
|
||||
return getSingleValue(channelAssocs, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a noderef from the editorial space (e.g. the doclib), this returns the corresponding noderef in the specified channel and environment.
|
||||
* Given a noderef from the editorial space (e.g. the doclib), this returns the corresponding noderef published to the specified channel.
|
||||
* @param source
|
||||
* @param environment
|
||||
* @param channelName
|
||||
* @param channelNode
|
||||
* @return
|
||||
*/
|
||||
public NodeRef mapSourceToEnvironment(NodeRef source, NodeRef environment, String channelName)
|
||||
public NodeRef mapSourceToEnvironment(NodeRef source, final NodeRef channelNode)
|
||||
{
|
||||
NodeRef channel = getChannelNodeForEnvironment(environment, channelName);
|
||||
return mapSourceToEnvironmentInternal(source, channel);
|
||||
}
|
||||
/**
|
||||
* Given a noderef from the editorial space (e.g. the doclib), this returns the corresponding noderef in the specified channelt
|
||||
* @param source
|
||||
* @param editorialChannel
|
||||
* @return
|
||||
*/
|
||||
public NodeRef mapSourceToEnvironment(NodeRef source, NodeRef editorialChannel)
|
||||
{
|
||||
// NodeRef liveChannel = mapChannelNOde(editorialChannel);
|
||||
return mapSourceToEnvironmentInternal(source, editorialChannel);
|
||||
}
|
||||
|
||||
private NodeRef mapSourceToEnvironmentInternal(NodeRef source, NodeRef liveChannel)
|
||||
{
|
||||
if(source == null || liveChannel == null)
|
||||
if(source == null || channelNode == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
List<ChildAssociationRef> parentAssocs = nodeService.getParentAssocs(source, ASSOC_SOURCE, RegexQNamePattern.MATCH_ALL);
|
||||
if(parentAssocs != null)
|
||||
List<AssociationRef> sourceAssocs = nodeService.getSourceAssocs(source, ASSOC_SOURCE);
|
||||
Function<? super AssociationRef, Boolean> acceptor = new Filter<AssociationRef>()
|
||||
{
|
||||
for (ChildAssociationRef parentAssoc : parentAssocs)
|
||||
public Boolean apply(AssociationRef assoc)
|
||||
{
|
||||
NodeRef publishedNode = parentAssoc.getParentRef();
|
||||
NodeRef parent = nodeService.getPrimaryParent(publishedNode).getParentRef();
|
||||
if(liveChannel.equals(parent))
|
||||
NodeRef publishedNode = assoc.getSourceRef();
|
||||
List<AssociationRef> channelAssoc = nodeService.getTargetAssocs(publishedNode, ASSOC_PUBLISHED_CHANNEL);
|
||||
if(CollectionUtils.isEmpty(channelAssoc))
|
||||
{
|
||||
return publishedNode;
|
||||
return false;
|
||||
}
|
||||
NodeRef target = channelAssoc.get(0).getTargetRef();
|
||||
return target.equals(channelNode);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
AssociationRef assoc = CollectionUtils.findFirst(sourceAssocs, acceptor);
|
||||
return assoc == null ? null : assoc.getSourceRef();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -184,27 +142,8 @@ public class ChannelHelper
|
||||
*/
|
||||
public NodeRef mapEnvironmentToSource(NodeRef publishedNode)
|
||||
{
|
||||
List<ChildAssociationRef> childAssocs = nodeService.getChildAssocs(publishedNode, ASSOC_SOURCE, RegexQNamePattern.MATCH_ALL);
|
||||
return getSingleValue(childAssocs, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link NodeRef} for the live channel given the {@link NodeRef} for the editorial channel.
|
||||
* @param editorialChannel
|
||||
* @return
|
||||
*/
|
||||
public NodeRef mapChannelNOde(NodeRef editorialChannel)
|
||||
{
|
||||
List<ChildAssociationRef> assocs = nodeService.getParentAssocs(editorialChannel, PublishingModel.ASSOC_EDITORIAL_CHANNEL, RegexQNamePattern.MATCH_ALL);
|
||||
if(assocs.isEmpty())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if(assocs.size()>1)
|
||||
{
|
||||
throw new IllegalStateException("There is more than one environment channel node!");
|
||||
}
|
||||
return assocs.get(0).getParentRef();
|
||||
List<AssociationRef> assocs = nodeService.getTargetAssocs(publishedNode, ASSOC_SOURCE);
|
||||
return getSingleValue(assocs, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -239,11 +178,9 @@ public class ChannelHelper
|
||||
return nodeService.getProperties(channel);
|
||||
}
|
||||
|
||||
public ChildAssociationRef createMapping(NodeRef source, NodeRef publishedNode)
|
||||
public AssociationRef createMapping(NodeRef source, NodeRef publishedNode)
|
||||
{
|
||||
QName qName = QName.createQName(NAMESPACE, GUID.generate());
|
||||
ChildAssociationRef assoc = nodeService.addChild(publishedNode, source, ASSOC_SOURCE, qName);
|
||||
nodeService.addAspect(source, ASPECT_PUBLISHED, null);
|
||||
AssociationRef assoc = nodeService.createAssociation(publishedNode, source, ASSOC_SOURCE);
|
||||
return assoc;
|
||||
}
|
||||
|
||||
@@ -348,6 +285,16 @@ public class ChannelHelper
|
||||
});
|
||||
}
|
||||
|
||||
public void addPublishedAspect(NodeRef publishedNode, NodeRef channelNode)
|
||||
{
|
||||
nodeService.addAspect(publishedNode, ASPECT_PUBLISHED, null);
|
||||
List<AssociationRef> channelAssoc = nodeService.getTargetAssocs(publishedNode, ASSOC_PUBLISHED_CHANNEL);
|
||||
if(CollectionUtils.isEmpty(channelAssoc))
|
||||
{
|
||||
nodeService.createAssociation(publishedNode, channelNode, ASSOC_PUBLISHED_CHANNEL);
|
||||
}
|
||||
}
|
||||
|
||||
private List<ChildAssociationRef> getChannelAssocs(NodeRef channelContainer)
|
||||
{
|
||||
if(channelContainer == null)
|
||||
@@ -379,12 +326,12 @@ public class ChannelHelper
|
||||
return null;
|
||||
}
|
||||
|
||||
private NodeRef getSingleValue(List<ChildAssociationRef> assocs, boolean getChild)
|
||||
private NodeRef getSingleValue(List<AssociationRef> assocs, boolean getChild)
|
||||
{
|
||||
if(assocs != null && assocs.size()==1 )
|
||||
{
|
||||
ChildAssociationRef association = assocs.get(0);
|
||||
return getChild ? association.getChildRef() : association.getParentRef();
|
||||
AssociationRef association = assocs.get(0);
|
||||
return getChild ? association.getTargetRef() : association.getSourceRef();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -425,4 +372,5 @@ public class ChannelHelper
|
||||
this.fileFolderService = fileFolderService;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -51,6 +51,16 @@ public class ChannelImpl implements Channel
|
||||
this.channelHelper = channelHelper;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getId()
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return nodeRef.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@@ -89,6 +99,7 @@ public class ChannelImpl implements Channel
|
||||
@Override
|
||||
public void publish(NodeRef nodeToPublish)
|
||||
{
|
||||
channelHelper.addPublishedAspect(nodeToPublish, nodeRef);
|
||||
if(channelHelper.canPublish(nodeToPublish, channelType))
|
||||
{
|
||||
channelType.publish(nodeToPublish, getProperties());
|
||||
@@ -119,8 +130,7 @@ public class ChannelImpl implements Channel
|
||||
*/
|
||||
public String getUrl(NodeRef publishedNode)
|
||||
{
|
||||
NodeRef mappedChannel = channelHelper.mapChannelNOde(nodeRef);
|
||||
NodeRef mappedNode = channelHelper.mapSourceToEnvironment(publishedNode, mappedChannel);
|
||||
NodeRef mappedNode = channelHelper.mapSourceToEnvironment(publishedNode, nodeRef);
|
||||
return channelType.getNodeUrl(mappedNode);
|
||||
}
|
||||
}
|
||||
|
@@ -39,7 +39,6 @@ import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.publishing.channels.Channel;
|
||||
import org.alfresco.service.cmr.publishing.channels.ChannelService;
|
||||
import org.alfresco.service.cmr.publishing.channels.ChannelType;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.site.SiteInfo;
|
||||
@@ -164,12 +163,7 @@ public class ChannelServiceImpl implements ChannelService
|
||||
actualProps.put(PROP_CHANNEL_TYPE_ID, channelType.getId());
|
||||
actualProps.put(PublishingModel.PROP_AUTHORISATION_COMPLETE, Boolean.FALSE);
|
||||
NodeRef channelNode = channelHelper.createChannelNode(channelContainer, channelType, name, actualProps);
|
||||
Channel channel = channelHelper.buildChannelObject(channelNode, this);
|
||||
|
||||
// Now create the corresponding channel nodes in the environment
|
||||
NodeRef environment = environmentHelper.getEnvironment(siteId);
|
||||
channelHelper.addChannelToEnvironment(environment, channel, actualProps);
|
||||
return channel;
|
||||
return channelHelper.buildChannelObject(channelNode, this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -177,17 +171,7 @@ public class ChannelServiceImpl implements ChannelService
|
||||
*/
|
||||
public void deleteChannel(Channel channel)
|
||||
{
|
||||
List<NodeRef> allChannelNodes = new ArrayList<NodeRef>();
|
||||
NodeRef editorialNode = channel.getNodeRef();
|
||||
allChannelNodes.add(editorialNode);
|
||||
for (AssociationRef assoc : nodeService.getSourceAssocs(editorialNode, PublishingModel.ASSOC_EDITORIAL_CHANNEL))
|
||||
{
|
||||
allChannelNodes.add(assoc.getSourceRef());
|
||||
}
|
||||
for (NodeRef channelNode : allChannelNodes)
|
||||
{
|
||||
nodeService.deleteNode(channelNode);
|
||||
}
|
||||
nodeService.deleteNode(channel.getNodeRef());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -386,20 +370,8 @@ public class ChannelServiceImpl implements ChannelService
|
||||
{
|
||||
HashMap<QName, Serializable> actualProps = new HashMap<QName, Serializable>(properties);
|
||||
actualProps.remove(ContentModel.PROP_NODE_UUID);
|
||||
List<NodeRef> allChannelNodes = new ArrayList<NodeRef>();
|
||||
NodeRef editorialNode = channel.getNodeRef();
|
||||
allChannelNodes.add(editorialNode);
|
||||
for (AssociationRef assoc : nodeService.getSourceAssocs(editorialNode, PublishingModel.ASSOC_EDITORIAL_CHANNEL))
|
||||
{
|
||||
allChannelNodes.add(assoc.getSourceRef());
|
||||
}
|
||||
for (NodeRef channelNode : allChannelNodes)
|
||||
{
|
||||
for (Map.Entry<QName, Serializable> entry : actualProps.entrySet())
|
||||
{
|
||||
nodeService.setProperty(channelNode, entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
nodeService.setProperties(editorialNode, actualProps);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -408,7 +380,8 @@ public class ChannelServiceImpl implements ChannelService
|
||||
@Override
|
||||
public Channel getChannel(String id)
|
||||
{
|
||||
if(id!=null)
|
||||
if(id!=null&& id.isEmpty()==false
|
||||
&& NodeRef.isNodeRef(id))
|
||||
{
|
||||
NodeRef node = new NodeRef(id);
|
||||
return channelHelper.buildChannelObject(node, this);
|
||||
|
@@ -34,7 +34,6 @@ import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.site.SiteServiceException;
|
||||
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.namespace.QName;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.junit.Before;
|
||||
@@ -53,9 +52,6 @@ public class ChannelServiceImplIntegratedTest extends AbstractPublishingIntegrat
|
||||
@Resource(name="channelService")
|
||||
private ChannelServiceImpl channelService;
|
||||
|
||||
@Resource(name="environmentHelper")
|
||||
private EnvironmentHelper environmentHelper;
|
||||
|
||||
private ChannelType mockedChannelType = mock(ChannelType.class);
|
||||
|
||||
@Before
|
||||
@@ -64,7 +60,6 @@ public class ChannelServiceImplIntegratedTest extends AbstractPublishingIntegrat
|
||||
{
|
||||
super.onSetUp();
|
||||
channelService = (ChannelServiceImpl) getApplicationContext().getBean("channelService");
|
||||
environmentHelper = (EnvironmentHelper) getApplicationContext().getBean("environmentHelper");
|
||||
when(mockedChannelType.getId()).thenReturn(channelTypeName);
|
||||
when(mockedChannelType.getChannelNodeType()).thenReturn(PublishingModel.TYPE_DELIVERY_CHANNEL);
|
||||
|
||||
@@ -82,30 +77,20 @@ public class ChannelServiceImplIntegratedTest extends AbstractPublishingIntegrat
|
||||
List<Channel> channels = channelService.getChannels(siteId);
|
||||
assertTrue(channels.isEmpty());
|
||||
|
||||
Channel channel = channelService.createChannel(siteId, channelTypeName, channelName, null);
|
||||
Channel channel = createChannel();
|
||||
assertEquals(channelTypeName, channel.getChannelType().getId());
|
||||
assertEquals(channelName, channel.getName());
|
||||
assertTrue(nodeService.exists(channel.getNodeRef()));
|
||||
|
||||
NodeRef environmentNode = environmentHelper.getEnvironment(siteId);
|
||||
assertNotNull(environmentNode);
|
||||
assertNotNull(nodeService.getChildByName(environmentNode, ContentModel.ASSOC_CONTAINS, channelName));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteChannel() throws Exception
|
||||
{
|
||||
testCreateChannel();
|
||||
|
||||
Channel channel = channelService.getChannel(siteId, channelName);
|
||||
Channel channel = createChannel();
|
||||
channelService.deleteChannel(channel);
|
||||
|
||||
List<Channel> channels = channelService.getChannels(siteId);
|
||||
assertTrue(channels.isEmpty());
|
||||
|
||||
NodeRef environmentNode = environmentHelper.getEnvironment(siteId);
|
||||
assertNotNull(environmentNode);
|
||||
assertNull(nodeService.getChildByName(environmentNode, ContentModel.ASSOC_CONTAINS, channelName));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -121,10 +106,6 @@ public class ChannelServiceImplIntegratedTest extends AbstractPublishingIntegrat
|
||||
assertEquals(1, channels.size());
|
||||
Channel channel = channels.get(0);
|
||||
assertEquals(newChannelName, channel.getName());
|
||||
NodeRef environmentNode = environmentHelper.getEnvironment(siteId);
|
||||
assertNotNull(environmentNode);
|
||||
assertNull(nodeService.getChildByName(environmentNode, ContentModel.ASSOC_CONTAINS, channelName));
|
||||
assertNotNull(nodeService.getChildByName(environmentNode, ContentModel.ASSOC_CONTAINS, newChannelName));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -197,8 +178,7 @@ public class ChannelServiceImplIntegratedTest extends AbstractPublishingIntegrat
|
||||
Channel channel = channelService.getChannel(siteId, channelName);
|
||||
assertNull("Should return null if unknown channelName", channel);
|
||||
|
||||
// Create channel
|
||||
Channel createdChannel = channelService.createChannel(siteId, channelTypeName, channelName, null);
|
||||
Channel createdChannel = createChannel();
|
||||
|
||||
try
|
||||
{
|
||||
@@ -216,4 +196,12 @@ public class ChannelServiceImplIntegratedTest extends AbstractPublishingIntegrat
|
||||
assertEquals(createdChannel.getChannelType().getId(), channel.getChannelType().getId());
|
||||
assertEquals(createdChannel.getNodeRef(), channel.getNodeRef());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
private Channel createChannel()
|
||||
{
|
||||
return channelService.createChannel(siteId, channelTypeName, channelName, null);
|
||||
}
|
||||
}
|
||||
|
@@ -28,7 +28,6 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
@@ -70,7 +69,6 @@ public class EnvironmentHelper
|
||||
private SiteService siteService;
|
||||
private NodeService nodeService;
|
||||
private PublishingEventHelper publishingEventHelper;
|
||||
private ChannelHelper channelHelper;
|
||||
|
||||
static
|
||||
{
|
||||
@@ -123,7 +121,7 @@ public class EnvironmentHelper
|
||||
*/
|
||||
public void setChannelHelper(ChannelHelper channelHelper)
|
||||
{
|
||||
this.channelHelper = channelHelper;
|
||||
//NOOP
|
||||
}
|
||||
|
||||
public NodeRef getEnvironment(String siteId)
|
||||
@@ -261,11 +259,6 @@ public class EnvironmentHelper
|
||||
|
||||
private PublishingEvent getLastPublishingEvent(NodeRef node, EnvironmentImpl environment, String channelName)
|
||||
{
|
||||
NodeRef mappedNode = channelHelper.mapSourceToEnvironment(node, environment.getNodeRef(), channelName);
|
||||
if(mappedNode==null || nodeService.exists(mappedNode)==false)
|
||||
{
|
||||
return null; // Node is not published.
|
||||
}
|
||||
//TODO Find the publish event.
|
||||
return null;
|
||||
}
|
||||
|
@@ -28,9 +28,11 @@ import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.service.cmr.publishing.MutablePublishingPackage;
|
||||
import org.alfresco.service.cmr.publishing.NodePublishStatus;
|
||||
import org.alfresco.service.cmr.publishing.NodePublishStatus.Status;
|
||||
import org.alfresco.service.cmr.publishing.channels.Channel;
|
||||
import org.alfresco.service.cmr.publishing.channels.ChannelService;
|
||||
import org.alfresco.service.cmr.publishing.channels.ChannelType;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
@@ -40,8 +42,8 @@ import org.junit.Test;
|
||||
*/
|
||||
public class EnvironmentImplTest extends AbstractPublishingIntegrationTest
|
||||
{
|
||||
private static final String channel1Name = "Channel1";
|
||||
private static final String channel2Name = "Channel2";
|
||||
private Channel channel1;
|
||||
private Channel channel2;
|
||||
|
||||
@Resource(name="channelService")
|
||||
private ChannelService channelService;
|
||||
@@ -52,7 +54,7 @@ public class EnvironmentImplTest extends AbstractPublishingIntegrationTest
|
||||
NodeRef first = fileFolderService.create(docLib, "first", ContentModel.TYPE_CONTENT).getNodeRef();
|
||||
NodeRef second = fileFolderService.create(docLib, "second", ContentModel.TYPE_CONTENT).getNodeRef();
|
||||
|
||||
Map<NodeRef, NodePublishStatus> results = environment.checkPublishStatus(channel1Name, first);
|
||||
Map<NodeRef, NodePublishStatus> results = environment.checkPublishStatus(channel1.getId(), first);
|
||||
assertEquals(1, results.size());
|
||||
checkNodeStatus(first, Status.NOT_PUBLISHED, results);
|
||||
|
||||
@@ -61,14 +63,14 @@ public class EnvironmentImplTest extends AbstractPublishingIntegrationTest
|
||||
schedule.add(Calendar.YEAR, 1);
|
||||
MutablePublishingPackage pckg =queue.createPublishingPackage();
|
||||
pckg.addNodesToPublish(first);
|
||||
queue.scheduleNewEvent(pckg, channel1Name, schedule, null, null);
|
||||
queue.scheduleNewEvent(pckg, channel1.getId(), schedule, null, null);
|
||||
|
||||
results = environment.checkPublishStatus(channel1Name, first, second);
|
||||
results = environment.checkPublishStatus(channel1.getId(), first, second);
|
||||
assertEquals(2, results.size());
|
||||
checkNodeStatus(first, Status.ON_QUEUE, results);
|
||||
checkNodeStatus(second, Status.NOT_PUBLISHED, results);
|
||||
|
||||
results = environment.checkPublishStatus(channel2Name, first, second);
|
||||
results = environment.checkPublishStatus(channel2.getId(), first, second);
|
||||
assertEquals(2, results.size());
|
||||
checkNodeStatus(first, Status.NOT_PUBLISHED, results);
|
||||
checkNodeStatus(second, Status.NOT_PUBLISHED, results);
|
||||
@@ -95,8 +97,8 @@ public class EnvironmentImplTest extends AbstractPublishingIntegrationTest
|
||||
{
|
||||
channelService.register(channelType);
|
||||
}
|
||||
channelService.createChannel(siteId, channelTypeId, channel1Name, null);
|
||||
channelService.createChannel(siteId, channelTypeId, channel2Name, null);
|
||||
this.channel1 = channelService.createChannel(siteId, channelTypeId, GUID.generate(), null);
|
||||
this.channel2 = channelService.createChannel(siteId, channelTypeId, GUID.generate(), null);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -55,13 +55,13 @@ import org.alfresco.service.cmr.publishing.StatusUpdate;
|
||||
import org.alfresco.service.cmr.publishing.channels.Channel;
|
||||
import org.alfresco.service.cmr.publishing.channels.ChannelService;
|
||||
import org.alfresco.service.cmr.publishing.channels.ChannelType;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.ContentService;
|
||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -73,7 +73,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
*/
|
||||
public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
{
|
||||
private static final String channelName = "Channel1";
|
||||
private static final String contentNodeName = "TheName";
|
||||
private static final String content = "The quick brown fox jumped over the lazy dog";
|
||||
|
||||
@@ -92,7 +91,8 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
@Autowired
|
||||
private PublishEventAction action;
|
||||
|
||||
private NodeRef channel;
|
||||
private Channel channel;
|
||||
private NodeRef channelNode;
|
||||
private String eventId;
|
||||
private ChannelType channelType;
|
||||
|
||||
@@ -110,10 +110,10 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
NodeRef publishEventNode = publishNode(source);
|
||||
|
||||
// Check published node exists and is in correct place.
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channel);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode);
|
||||
assertNotNull(publishedNode);
|
||||
assertTrue(nodeService.exists(publishedNode));
|
||||
assertEquals(channel, nodeService.getPrimaryParent(publishedNode).getParentRef());
|
||||
assertEquals(channelNode, nodeService.getPrimaryParent(publishedNode).getParentRef());
|
||||
|
||||
// Check published node type and aspects
|
||||
assertEquals(TYPE_CONTENT, nodeService.getType(publishedNode));
|
||||
@@ -131,9 +131,9 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
assertEquals(content, readContent(source));
|
||||
|
||||
// Check lastPublishingEvent association is created.
|
||||
List<ChildAssociationRef> assocs = nodeService.getChildAssocs(publishedNode, ASSOC_LAST_PUBLISHING_EVENT, RegexQNamePattern.MATCH_ALL);
|
||||
List<AssociationRef> assocs = nodeService.getTargetAssocs(publishedNode, ASSOC_LAST_PUBLISHING_EVENT);
|
||||
assertEquals(1, assocs.size());
|
||||
assertEquals(publishEventNode, assocs.get(0).getChildRef());
|
||||
assertEquals(publishEventNode, assocs.get(0).getTargetRef());
|
||||
}
|
||||
|
||||
public void testUpdatePublishedNode() throws Exception
|
||||
@@ -143,7 +143,7 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
NodeRef publishEventNode = publishNode(source);
|
||||
|
||||
// Check published node exists
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channel);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode);
|
||||
assertNotNull(publishedNode);
|
||||
assertTrue(nodeService.exists(publishedNode));
|
||||
|
||||
@@ -158,9 +158,9 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
assertFalse(aspects.contains(ASPECT_GEOGRAPHIC));
|
||||
|
||||
// Check lastPublishingEvent association is created.
|
||||
List<ChildAssociationRef> assocs = nodeService.getChildAssocs(publishedNode, ASSOC_LAST_PUBLISHING_EVENT, RegexQNamePattern.MATCH_ALL);
|
||||
List<AssociationRef> assocs = nodeService.getTargetAssocs(publishedNode, ASSOC_LAST_PUBLISHING_EVENT);
|
||||
assertEquals(1, assocs.size());
|
||||
assertEquals(publishEventNode, assocs.get(0).getChildRef());
|
||||
assertEquals(publishEventNode, assocs.get(0).getTargetRef());
|
||||
|
||||
// Modify source node
|
||||
double lattitude = 0.25;
|
||||
@@ -174,7 +174,7 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
|
||||
// Update published node.
|
||||
publishEventNode = publishNode(source);
|
||||
NodeRef newPublishNode = channelHelper.mapSourceToEnvironment(source, channel);
|
||||
NodeRef newPublishNode = channelHelper.mapSourceToEnvironment(source, channelNode);
|
||||
assertEquals(publishedNode, newPublishNode);
|
||||
|
||||
// Published node shoudl still exist.
|
||||
@@ -194,16 +194,16 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
assertEquals(newContent, readContent(source));
|
||||
|
||||
// Check lastPublishingEvent association has changed.
|
||||
assocs = nodeService.getChildAssocs(publishedNode, ASSOC_LAST_PUBLISHING_EVENT, RegexQNamePattern.MATCH_ALL);
|
||||
assocs = nodeService.getTargetAssocs(publishedNode, ASSOC_LAST_PUBLISHING_EVENT);
|
||||
assertEquals(1, assocs.size());
|
||||
assertEquals(publishEventNode, assocs.get(0).getChildRef());
|
||||
assertEquals(publishEventNode, assocs.get(0).getTargetRef());
|
||||
|
||||
// Remove aspect from source node.
|
||||
nodeService.removeAspect(source, ASPECT_GEOGRAPHIC);
|
||||
|
||||
// Update publish node
|
||||
publishNode(source);
|
||||
newPublishNode = channelHelper.mapSourceToEnvironment(source, channel);
|
||||
newPublishNode = channelHelper.mapSourceToEnvironment(source, channelNode);
|
||||
assertEquals(publishedNode, newPublishNode);
|
||||
|
||||
aspects = nodeService.getAspects(source);
|
||||
@@ -225,7 +225,7 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
when(channelType.canPublish()).thenReturn(true);
|
||||
|
||||
publishNode(source);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channel);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode);
|
||||
|
||||
// Check publish was called
|
||||
verify(channelType, times(1)).publish(eq(publishedNode), anyMap());
|
||||
@@ -239,7 +239,7 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
|
||||
// Publish source node but dont' call ChannelType.publish().
|
||||
publishNode(source);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channel);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode);
|
||||
|
||||
// Check publish was not called.
|
||||
verify(channelType, never()).publish(eq(publishedNode), anyMap());
|
||||
@@ -270,7 +270,7 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
|
||||
// Publish source node but don't call ChannelType.publish().
|
||||
publishNode(source);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channel);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode);
|
||||
|
||||
verify(channelType, never()).publish(eq(publishedNode), anyMap());
|
||||
|
||||
@@ -309,7 +309,7 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
|
||||
// Publish source node but don't call ChannelType.publish().
|
||||
publishNode(source);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channel);
|
||||
NodeRef publishedNode = channelHelper.mapSourceToEnvironment(source, channelNode);
|
||||
|
||||
verify(channelType, never()).publish(eq(publishedNode), anyMap());
|
||||
|
||||
@@ -330,7 +330,7 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
|
||||
// Create Status Update
|
||||
String message = "Here is the message ";
|
||||
StatusUpdate status = queue.createStatusUpdate(message, source, channelName);
|
||||
StatusUpdate status = queue.createStatusUpdate(message, source, channel.getId());
|
||||
|
||||
String url = "http://test/url";
|
||||
when(channelType.getNodeUrl(any(NodeRef.class))).thenReturn(url);
|
||||
@@ -372,7 +372,7 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
{
|
||||
Calendar schedule = Calendar.getInstance();
|
||||
schedule.add(Calendar.YEAR, 1);
|
||||
this.eventId = queue.scheduleNewEvent(publishPckg, channelName, schedule, null, statusUpdate);
|
||||
this.eventId = queue.scheduleNewEvent(publishPckg, channel.getId(), schedule, null, statusUpdate);
|
||||
}
|
||||
|
||||
private void addGeographicAspect(NodeRef source, double lattitude, double longtitude)
|
||||
@@ -425,9 +425,8 @@ public class PublishEventActionTest extends AbstractPublishingIntegrationTest
|
||||
Mockito.reset(channelType);
|
||||
mockChannelTypeBehaviour(channelType);
|
||||
}
|
||||
channelService.createChannel(siteId, channelTypeId, channelName, null);
|
||||
|
||||
this.channel = channelHelper.getChannelNodeForEnvironment(environment.getNodeRef(), channelName);
|
||||
this.channel = channelService.createChannel(siteId, channelTypeId, GUID.generate(), null);
|
||||
this.channelNode = channel.getNodeRef();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -19,6 +19,7 @@
|
||||
|
||||
package org.alfresco.repo.publishing;
|
||||
|
||||
import static org.alfresco.repo.publishing.PublishingModel.ASSOC_LAST_PUBLISHING_EVENT;
|
||||
import static org.alfresco.repo.publishing.PublishingModel.ASSOC_PUBLISHING_EVENT;
|
||||
import static org.alfresco.repo.publishing.PublishingModel.NAMESPACE;
|
||||
import static org.alfresco.repo.publishing.PublishingModel.PROP_PUBLISHING_EVENT_CHANNEL;
|
||||
@@ -64,6 +65,7 @@ import org.alfresco.service.cmr.publishing.PublishingEvent.Status;
|
||||
import org.alfresco.service.cmr.publishing.PublishingEventFilter;
|
||||
import org.alfresco.service.cmr.publishing.PublishingPackage;
|
||||
import org.alfresco.service.cmr.publishing.StatusUpdate;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.ContentService;
|
||||
@@ -193,7 +195,7 @@ public class PublishingEventHelper
|
||||
});
|
||||
}
|
||||
|
||||
public NodeRef createNode(NodeRef queueNode, PublishingPackage publishingPackage, String channelName, Calendar schedule, String comment, StatusUpdate statusUpdate)
|
||||
public NodeRef createNode(NodeRef queueNode, PublishingPackage publishingPackage, String channelId, Calendar schedule, String comment, StatusUpdate statusUpdate)
|
||||
throws Exception
|
||||
{
|
||||
if (schedule == null)
|
||||
@@ -202,7 +204,7 @@ public class PublishingEventHelper
|
||||
}
|
||||
String name = GUID.generate();
|
||||
Map<QName, Serializable> props =
|
||||
buildPublishingEventProperties(publishingPackage, channelName, schedule, comment, statusUpdate, name);
|
||||
buildPublishingEventProperties(publishingPackage, channelId, schedule, comment, statusUpdate, name);
|
||||
ChildAssociationRef newAssoc = nodeService.createNode(queueNode,
|
||||
ASSOC_PUBLISHING_EVENT,
|
||||
QName.createQName(NAMESPACE, name),
|
||||
@@ -213,14 +215,14 @@ public class PublishingEventHelper
|
||||
}
|
||||
|
||||
private Map<QName, Serializable> buildPublishingEventProperties(PublishingPackage publishingPackage,
|
||||
String channelName, Calendar schedule, String comment, StatusUpdate statusUpdate, String name)
|
||||
String channelId, Calendar schedule, String comment, StatusUpdate statusUpdate, String name)
|
||||
{
|
||||
Map<QName, Serializable> props = new HashMap<QName, Serializable>();
|
||||
props.put(ContentModel.PROP_NAME, name);
|
||||
props.put(PROP_PUBLISHING_EVENT_STATUS, Status.IN_PROGRESS.name());
|
||||
props.put(PROP_PUBLISHING_EVENT_TIME, schedule.getTime());
|
||||
props.put(PublishingModel.PROP_PUBLISHING_EVENT_TIME_ZONE, schedule.getTimeZone().getID());
|
||||
props.put(PublishingModel.PROP_PUBLISHING_EVENT_CHANNEL, channelName);
|
||||
props.put(PublishingModel.PROP_PUBLISHING_EVENT_CHANNEL, channelId);
|
||||
props.put(PublishingModel.PROP_PUBLISHING_EVENT_STATUS, PublishingModel.PROPVAL_PUBLISHING_EVENT_STATUS_SCHEDULED);
|
||||
if (comment != null)
|
||||
{
|
||||
@@ -238,7 +240,7 @@ public class PublishingEventHelper
|
||||
{
|
||||
props.put(PROP_STATUS_UPDATE_NODE_REF, statusNode.toString());
|
||||
}
|
||||
props.put(PROP_STATUS_UPDATE_CHANNEL_NAMES, (Serializable) statusUpdate.getChannelNames());
|
||||
props.put(PROP_STATUS_UPDATE_CHANNEL_NAMES, (Serializable) statusUpdate.getChannelIds());
|
||||
}
|
||||
return props;
|
||||
}
|
||||
@@ -467,4 +469,16 @@ public class PublishingEventHelper
|
||||
NodeRef environment = environmentAssoc.getParentRef();
|
||||
return environment;
|
||||
}
|
||||
|
||||
public AssociationRef linkeToLastEvent(NodeRef publishedNode, NodeRef eventNode)
|
||||
{
|
||||
List<AssociationRef> assocs = nodeService.getTargetAssocs(publishedNode, ASSOC_LAST_PUBLISHING_EVENT);
|
||||
if(isEmpty(assocs)==false)
|
||||
{
|
||||
// Remove old association.
|
||||
AssociationRef assoc = assocs.get(0);
|
||||
nodeService.removeAssociation(assoc.getSourceRef(), assoc.getTargetRef(), assoc.getTypeQName());
|
||||
}
|
||||
return nodeService.createAssociation(publishedNode, eventNode, ASSOC_LAST_PUBLISHING_EVENT);
|
||||
}
|
||||
}
|
||||
|
@@ -36,7 +36,7 @@ public class PublishingEventImpl implements PublishingEvent
|
||||
{
|
||||
private final String id;
|
||||
private final Status status;
|
||||
private final String channelName;
|
||||
private final String channelId;
|
||||
private final PublishingPackage publishingPackage;
|
||||
private final Date createdTime;
|
||||
private final String creator;
|
||||
@@ -55,7 +55,7 @@ public class PublishingEventImpl implements PublishingEvent
|
||||
{
|
||||
this.id = id;
|
||||
this.status = status;
|
||||
this.channelName = channelName;
|
||||
this.channelId = channelName;
|
||||
this.publishingPackage = publishingPackage;
|
||||
this.createdTime = createdTime;
|
||||
this.creator = creator;
|
||||
@@ -69,7 +69,7 @@ public class PublishingEventImpl implements PublishingEvent
|
||||
public PublishingEventImpl(PublishingEvent event)
|
||||
{
|
||||
this(event.getId(),
|
||||
event.getStatus(), event.getChannelName(),
|
||||
event.getStatus(), event.getChannelId(),
|
||||
event.getPackage(), event.getCreatedTime(),
|
||||
event.getCreator(), event.getModifiedTime(),
|
||||
event.getModifier(), event.getScheduledTime(), event.getComment(),
|
||||
@@ -97,9 +97,9 @@ public class PublishingEventImpl implements PublishingEvent
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String getChannelName()
|
||||
public String getChannelId()
|
||||
{
|
||||
return channelName;
|
||||
return channelId;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -73,11 +73,11 @@ public class PublishingEventProcessor
|
||||
nodeService.setProperty(eventNode, PublishingModel.PROP_PUBLISHING_EVENT_STATUS, inProgressStatus);
|
||||
PublishingEvent event = eventHelper.getPublishingEvent(eventNode);
|
||||
NodeRef environment = eventHelper.getEnvironmentNodeForPublishingEvent(eventNode);
|
||||
String channelName = event.getChannelName();
|
||||
Channel channel = channelHelper.getChannel(environment, channelName, channelService);
|
||||
String channelName = event.getChannelId();
|
||||
Channel channel = channelService.getChannel(channelName);
|
||||
if (channel == null)
|
||||
{
|
||||
fail(event, "No channel found");
|
||||
fail(eventNode, "No channel found");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -87,6 +87,10 @@ public class PublishingEventProcessor
|
||||
nodeService.setProperty(eventNode, PublishingModel.PROP_PUBLISHING_EVENT_STATUS, completedStatus);
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
fail(eventNode, e.getMessage());
|
||||
}
|
||||
finally
|
||||
{
|
||||
behaviourFilter.enableAllBehaviours();
|
||||
@@ -109,10 +113,10 @@ public class PublishingEventProcessor
|
||||
message += urlShortener.shortenUrl(nodeUrl);
|
||||
}
|
||||
}
|
||||
Set<String> channels = update.getChannelNames();
|
||||
for (String channelName : channels)
|
||||
Set<String> channels = update.getChannelIds();
|
||||
for (String channelId : channels)
|
||||
{
|
||||
Channel channel = channelHelper.getChannel(environment, channelName, channelService);
|
||||
Channel channel = channelService.getChannel(channelId);
|
||||
if(channel != null && channel.getChannelType().canPublishStatusUpdates())
|
||||
{
|
||||
channel.updateStatus(message);
|
||||
@@ -143,9 +147,10 @@ public class PublishingEventProcessor
|
||||
}
|
||||
|
||||
|
||||
public void fail(PublishingEvent event, String msg)
|
||||
public void fail(NodeRef eventNode, String msg)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
String completedStatus = PublishingEvent.Status.FAILED.name();
|
||||
nodeService.setProperty(eventNode, PublishingModel.PROP_PUBLISHING_EVENT_STATUS, completedStatus);
|
||||
}
|
||||
|
||||
public NodeRef publishEntry(Channel channel, PublishingPackageEntry entry, NodeRef eventNode)
|
||||
@@ -159,8 +164,7 @@ public class PublishingEventProcessor
|
||||
{
|
||||
updatePublishedNode(publishedNode, entry);
|
||||
}
|
||||
QName qName = QName.createQName(NAMESPACE, eventNode.getId());
|
||||
nodeService.addChild(publishedNode, eventNode, ASSOC_LAST_PUBLISHING_EVENT, qName);
|
||||
eventHelper.linkeToLastEvent(publishedNode, eventNode);
|
||||
channel.publish(publishedNode);
|
||||
return publishedNode;
|
||||
}
|
||||
|
@@ -58,8 +58,6 @@ import org.junit.Test;
|
||||
*/
|
||||
public class PublishingIntegratedTest extends BaseSpringTest
|
||||
{
|
||||
private static String channelName = "Test Channel - Name";
|
||||
|
||||
protected ServiceRegistry serviceRegistry;
|
||||
protected RetryingTransactionHelper retryingTransactionHelper;
|
||||
protected NodeService nodeService;
|
||||
@@ -74,6 +72,65 @@ public class PublishingIntegratedTest extends BaseSpringTest
|
||||
private ChannelType mockedChannelType = mock(ChannelType.class);
|
||||
private String channelTypeName;
|
||||
|
||||
@Test
|
||||
public void testScheduleNewEvent() throws Exception
|
||||
{
|
||||
Channel channel = channelService.createChannel(siteId, channelTypeName, GUID.generate(), null);
|
||||
|
||||
Set<NodeRef> nodes = new HashSet<NodeRef>();
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
nodes.add(nodeService.createNode(channel.getNodeRef(), ContentModel.ASSOC_CONTAINS, QName.createQName(
|
||||
NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef());
|
||||
}
|
||||
|
||||
PublishingQueue liveQueue = publishingService.getPublishingQueue(siteId);
|
||||
MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage();
|
||||
publishingPackage.addNodesToPublish(nodes);
|
||||
|
||||
Calendar scheduleTime = Calendar.getInstance();
|
||||
scheduleTime.add(Calendar.HOUR, 1);
|
||||
String eventId = liveQueue.scheduleNewEvent(publishingPackage, channel.getId(), scheduleTime, null, null);
|
||||
|
||||
PublishingEvent event = publishingService.getPublishingEvent(eventId);
|
||||
|
||||
Assert.assertEquals(scheduleTime, event.getScheduledTime());
|
||||
Assert.assertEquals(eventId, event.getId());
|
||||
Collection<PublishingPackageEntry> entries = event.getPackage().getEntries();
|
||||
Assert.assertEquals(4, entries.size());
|
||||
for (PublishingPackageEntry entry : entries)
|
||||
{
|
||||
Assert.assertTrue(entry.isPublish());
|
||||
Assert.assertTrue(nodes.remove(entry.getNodeRef()));
|
||||
}
|
||||
Assert.assertTrue(nodes.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCancelScheduledEvent()
|
||||
{
|
||||
Channel channel = channelService.createChannel(siteId, channelTypeName, GUID.generate(), null);
|
||||
|
||||
Set<NodeRef> nodes = new HashSet<NodeRef>();
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
nodes.add(nodeService.createNode(channel.getNodeRef(), ContentModel.ASSOC_CONTAINS, QName.createQName(
|
||||
NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef());
|
||||
}
|
||||
PublishingQueue liveQueue = publishingService.getPublishingQueue(siteId);
|
||||
MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage();
|
||||
publishingPackage.addNodesToPublish(nodes);
|
||||
|
||||
Calendar scheduleTime = Calendar.getInstance();
|
||||
scheduleTime.add(Calendar.HOUR, 1);
|
||||
String eventId = liveQueue.scheduleNewEvent(publishingPackage, channel.getId(), scheduleTime, null, null);
|
||||
PublishingEvent event = publishingService.getPublishingEvent(eventId);
|
||||
Assert.assertNotNull(event);
|
||||
publishingService.cancelPublishingEvent(eventId);
|
||||
event = publishingService.getPublishingEvent(eventId);
|
||||
Assert.assertNull(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@@ -106,62 +163,4 @@ public class PublishingIntegratedTest extends BaseSpringTest
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testScheduleNewEvent() throws Exception
|
||||
{
|
||||
Channel channel = channelService.createChannel(siteId, channelTypeName, channelName, null);
|
||||
|
||||
Set<NodeRef> nodes = new HashSet<NodeRef>();
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
nodes.add(nodeService.createNode(channel.getNodeRef(), ContentModel.ASSOC_CONTAINS, QName.createQName(
|
||||
NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef());
|
||||
}
|
||||
|
||||
PublishingQueue liveQueue = publishingService.getPublishingQueue(siteId);
|
||||
MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage();
|
||||
publishingPackage.addNodesToPublish(nodes);
|
||||
|
||||
Calendar scheduleTime = Calendar.getInstance();
|
||||
scheduleTime.add(Calendar.HOUR, 1);
|
||||
String eventId = liveQueue.scheduleNewEvent(publishingPackage, channelName, scheduleTime, null, null);
|
||||
|
||||
PublishingEvent event = publishingService.getPublishingEvent(eventId);
|
||||
|
||||
Assert.assertEquals(scheduleTime, event.getScheduledTime());
|
||||
Assert.assertEquals(eventId, event.getId());
|
||||
Collection<PublishingPackageEntry> entries = event.getPackage().getEntries();
|
||||
Assert.assertEquals(4, entries.size());
|
||||
for (PublishingPackageEntry entry : entries)
|
||||
{
|
||||
Assert.assertTrue(entry.isPublish());
|
||||
Assert.assertTrue(nodes.remove(entry.getNodeRef()));
|
||||
}
|
||||
Assert.assertTrue(nodes.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCancelScheduledEvent()
|
||||
{
|
||||
Channel channel = channelService.createChannel(siteId, channelTypeName, channelName, null);
|
||||
|
||||
Set<NodeRef> nodes = new HashSet<NodeRef>();
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
nodes.add(nodeService.createNode(channel.getNodeRef(), ContentModel.ASSOC_CONTAINS, QName.createQName(
|
||||
NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef());
|
||||
}
|
||||
PublishingQueue liveQueue = publishingService.getPublishingQueue(siteId);
|
||||
MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage();
|
||||
publishingPackage.addNodesToPublish(nodes);
|
||||
|
||||
Calendar scheduleTime = Calendar.getInstance();
|
||||
scheduleTime.add(Calendar.HOUR, 1);
|
||||
String eventId = liveQueue.scheduleNewEvent(publishingPackage, channelName, scheduleTime, null, null);
|
||||
PublishingEvent event = publishingService.getPublishingEvent(eventId);
|
||||
Assert.assertNotNull(event);
|
||||
publishingService.cancelPublishingEvent(eventId);
|
||||
event = publishingService.getPublishingEvent(eventId);
|
||||
Assert.assertNull(event);
|
||||
}
|
||||
}
|
@@ -72,7 +72,6 @@ public interface PublishingModel
|
||||
public static final QName PROP_ASSET_ID = QName.createQName(NAMESPACE, "assetId");
|
||||
public static final QName PROP_ASSET_URL = QName.createQName(NAMESPACE, "assetUrl");
|
||||
|
||||
|
||||
// Publishing Connection Properties
|
||||
public static final QName PROP_ACCOUNT_ID= QName.createQName(NAMESPACE, "accountId");
|
||||
public static final QName PROP_PROVIDER_ID= QName.createQName(NAMESPACE, "providerId");
|
||||
@@ -92,7 +91,7 @@ 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_EDITORIAL_CHANNEL= QName.createQName(NAMESPACE, "editorialChannel");
|
||||
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");
|
||||
|
@@ -75,11 +75,27 @@ public class PublishingQueueImpl implements PublishingQueue
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String scheduleNewEvent(PublishingPackage publishingPackage, String channelName, Calendar schedule, String comment, StatusUpdate statusUpdate)
|
||||
public List<PublishingEvent> getPublishingEvents(PublishingEventFilter filter)
|
||||
{
|
||||
return publishingEventHelper.findPublishingEvents(nodeRef, filter);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public PublishingEventFilter createPublishingEventFilter()
|
||||
{
|
||||
return new PublishingEventFilterImpl();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String scheduleNewEvent(PublishingPackage publishingPackage, String channelId, Calendar schedule, String comment, StatusUpdate statusUpdate)
|
||||
{
|
||||
try
|
||||
{
|
||||
NodeRef eventNode = publishingEventHelper.createNode(nodeRef, publishingPackage, channelName, schedule, comment, statusUpdate);
|
||||
NodeRef eventNode = publishingEventHelper.createNode(nodeRef, publishingPackage, channelId, schedule, comment, statusUpdate);
|
||||
publishingEventHelper.startPublishingWorkflow(eventNode, schedule);
|
||||
return eventNode.toString();
|
||||
}
|
||||
@@ -123,19 +139,5 @@ public class PublishingQueueImpl implements PublishingQueue
|
||||
this.versionService = versionService;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public List<PublishingEvent> getPublishingEvents(PublishingEventFilter filter)
|
||||
{
|
||||
return publishingEventHelper.findPublishingEvents(nodeRef, filter);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public PublishingEventFilter createPublishingEventFilter()
|
||||
{
|
||||
return new PublishingEventFilterImpl();
|
||||
}
|
||||
}
|
||||
|
@@ -55,7 +55,7 @@ import org.junit.Test;
|
||||
*/
|
||||
public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest
|
||||
{
|
||||
private static final String channelName = "TheChannel";
|
||||
private static final String channelId = "test://channel/node";
|
||||
private static final String comment = "The Comment";
|
||||
|
||||
protected PublishingService publishingService;
|
||||
@@ -82,7 +82,7 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest
|
||||
Calendar schedule = Calendar.getInstance();
|
||||
schedule.add(Calendar.HOUR, 2);
|
||||
|
||||
this.eventId = queue.scheduleNewEvent(publishingPackage, channelName, schedule, comment, null);
|
||||
this.eventId = queue.scheduleNewEvent(publishingPackage, channelId, schedule, comment, null);
|
||||
|
||||
//Check schedule triggered versioning.
|
||||
Serializable version = nodeService.getProperty(firstNode, PROP_VERSION_LABEL);
|
||||
@@ -94,7 +94,7 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest
|
||||
assertEquals(Status.SCHEDULED, event.getStatus());
|
||||
assertEquals(AuthenticationUtil.getAdminUserName(), event.getCreator());
|
||||
assertEquals(schedule, event.getScheduledTime());
|
||||
assertEquals(channelName, event.getChannelName());
|
||||
assertEquals(channelId, event.getChannelId());
|
||||
assertNull(event.getStatusUpdate());
|
||||
|
||||
PublishingPackage pckg = event.getPackage();
|
||||
@@ -151,13 +151,13 @@ public class PublishingQueueImplTest extends AbstractPublishingIntegrationTest
|
||||
publishingPackage.addNodesToPublish(firstNode, secondNode);
|
||||
Calendar schedule = Calendar.getInstance();
|
||||
schedule.add(Calendar.HOUR, 2);
|
||||
this.eventId = queue.scheduleNewEvent(publishingPackage, channelName, schedule, comment, update);
|
||||
this.eventId = queue.scheduleNewEvent(publishingPackage, channelId, schedule, comment, update);
|
||||
|
||||
PublishingEvent event = publishingService.getPublishingEvent(eventId);
|
||||
StatusUpdate actualUpdate = event.getStatusUpdate();
|
||||
assertEquals(message, actualUpdate.getMessage());
|
||||
assertEquals(secondNode, actualUpdate.getNodeToLinkTo());
|
||||
Set<String> names = actualUpdate.getChannelNames();
|
||||
Set<String> names = actualUpdate.getChannelIds();
|
||||
assertEquals(3, names.size());
|
||||
assertTrue(names.containsAll(channelNames));
|
||||
}
|
||||
|
@@ -57,7 +57,7 @@ public class StatusUpdateImpl implements StatusUpdate
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public Set<String> getChannelNames()
|
||||
public Set<String> getChannelIds()
|
||||
{
|
||||
return channelNames;
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@ public interface PublishingEvent
|
||||
|
||||
MutablePublishingEvent edit();
|
||||
|
||||
String getChannelName();
|
||||
String getChannelId();
|
||||
|
||||
StatusUpdate getStatusUpdate();
|
||||
}
|
||||
|
@@ -34,19 +34,19 @@ public interface PublishingQueue
|
||||
*/
|
||||
MutablePublishingPackage createPublishingPackage();
|
||||
|
||||
StatusUpdate createStatusUpdate(String message, NodeRef nodeToLinkTo, String... channelNames);
|
||||
StatusUpdate createStatusUpdate(String message, NodeRef nodeToLinkTo, Collection<String> channelNames);
|
||||
StatusUpdate createStatusUpdate(String message, NodeRef nodeToLinkTo, String... channelIds);
|
||||
StatusUpdate createStatusUpdate(String message, NodeRef nodeToLinkTo, Collection<String> channelIds);
|
||||
|
||||
/**
|
||||
* Adds the supplied publishing package onto the queue.
|
||||
* @param publishingPackage The publishing package that is to be enqueued
|
||||
* @param channelName The name of the channel that the package is to be published to
|
||||
* @param channelId The name of the channel that the package is to be published to
|
||||
* @param schedule The time at which the new publishing event should be scheduled (optional - <code>null</code> indicates "as soon as possible")
|
||||
* @param comment A comment to be stored with this new event (optional - may be <code>null</code>)
|
||||
* @param statusUpdate TODO
|
||||
* @return The identifier of the newly scheduled event
|
||||
*/
|
||||
String scheduleNewEvent(PublishingPackage publishingPackage, String channelName, Calendar schedule, String comment, StatusUpdate statusUpdate);
|
||||
String scheduleNewEvent(PublishingPackage publishingPackage, String channelId, Calendar schedule, String comment, StatusUpdate statusUpdate);
|
||||
|
||||
/**
|
||||
* Retrieve a list of publishing events associated with this publishing environment, filtering them using the
|
||||
|
@@ -31,6 +31,6 @@ import org.alfresco.service.cmr.repository.NodeRef;
|
||||
public interface StatusUpdate
|
||||
{
|
||||
String getMessage();
|
||||
Set<String> getChannelNames();
|
||||
Set<String> getChannelIds();
|
||||
NodeRef getNodeToLinkTo();
|
||||
}
|
||||
|
@@ -31,6 +31,7 @@ import org.alfresco.service.namespace.QName;
|
||||
*/
|
||||
public interface Channel
|
||||
{
|
||||
String getId();
|
||||
ChannelType getChannelType();
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user