Removed all references to Site from publishing REST API. Replaced publishing-events-query.post with publishing-events-for-node.get.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29301 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
N Smith
2011-07-25 09:30:08 +00:00
parent 0ec0b0939e
commit a6d7fef35a
8 changed files with 153 additions and 27 deletions

View File

@@ -19,9 +19,16 @@
package org.alfresco.repo.node; package org.alfresco.repo.node;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.service.cmr.repository.AssociationRef; import org.alfresco.service.cmr.repository.AssociationRef;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -130,4 +137,38 @@ public abstract class NodeUtils
} }
return null; return null;
} }
public List<NodeRef> sortByCreationDate(NodeService nodeService,Collection<NodeRef> nodes)
{
ArrayList<NodeRef> sorted = new ArrayList<NodeRef>(nodes);
Collections.sort(sorted, getNodeCreationDateComparator(nodeService));
return sorted;
}
public Comparator<NodeRef> getNodeCreationDateComparator(final NodeService nodeService)
{
return new Comparator<NodeRef>()
{
private Map<NodeRef, Long> dates = new HashMap<NodeRef, Long>();
public int compare(NodeRef o1, NodeRef o2)
{
long date1 = getDate(o1);
long date2 = getDate(o1);
return (int)(date1 - date2);
}
private long getDate(NodeRef node)
{
Long date = dates.get(node);
if(date == null)
{
Date dateObj = (Date) nodeService.getProperty(node, ContentModel.PROP_CREATED);
date = dateObj == null ? -1 : dateObj.getTime();
dates.put(node, date);
}
return date;
}
};
}
} }

View File

@@ -20,6 +20,7 @@
package org.alfresco.repo.publishing; package org.alfresco.repo.publishing;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.service.cmr.publishing.NodePublishStatus; import org.alfresco.service.cmr.publishing.NodePublishStatus;
@@ -65,6 +66,26 @@ public class PublishServiceImpl implements PublishingService
return publishingEventHelper.getPublishingEvent(id); return publishingEventHelper.getPublishingEvent(id);
} }
/**
* {@inheritDoc}
*/
public List<PublishingEvent> getEventsForPublishedNode(NodeRef publishedNode)
{
NodeRef queueNode = rootObject.getPublishingQueue().getNodeRef();
List<NodeRef> eventNodes = publishingEventHelper.getEventNodesForPublishedNode(queueNode, publishedNode);
return publishingEventHelper.getPublishingEvents(eventNodes);
}
/**
* {@inheritDoc}
*/
public List<PublishingEvent> getEventsForUnpublishedNode(NodeRef unpublishedNode)
{
NodeRef queueNode = rootObject.getPublishingQueue().getNodeRef();
List<NodeRef> eventNodes = publishingEventHelper.getEventNodesForUnpublishedNode(queueNode, unpublishedNode);
return publishingEventHelper.getPublishingEvents(eventNodes);
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@@ -77,7 +98,7 @@ public class PublishServiceImpl implements PublishingService
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public PublishingQueue getPublishingQueue(String siteId) public PublishingQueue getPublishingQueue()
{ {
return rootObject.getPublishingQueue(); return rootObject.getPublishingQueue();
} }

View File

@@ -307,16 +307,63 @@ public class PublishingEventHelper
*/ */
public List<NodeRef> getEventNodesForPublishedNodes(final NodeRef queue, Collection<NodeRef> publishedNodes) public List<NodeRef> getEventNodesForPublishedNodes(final NodeRef queue, Collection<NodeRef> publishedNodes)
{ {
Function<NodeRef, Collection<NodeRef>> transformer = new Function<NodeRef, Collection<NodeRef>>() return getEventNodesForNodeProperty(queue, PROP_PUBLISHING_EVENT_NODES_TO_PUBLISH, publishedNodes);
}
/**
* Returns a {@link List} of the {@link NodeRef}s representing PublishingEvents that were scheduled to unpublish at least one of the specified <code>unpublishedNodes</code>.
* @param queue
* @param unpublishedNodes
* @return
*/
public List<NodeRef> getEventNodesForUnpublishedNodes(final NodeRef queue, Collection<NodeRef> unpublishedNodes)
{
return getEventNodesForNodeProperty(queue, PROP_PUBLISHING_EVENT_NODES_TO_PUBLISH, unpublishedNodes);
}
/**
* Returns a {@link List} of the {@link NodeRef}s representing PublishingEvents that were scheduled to publish the specified <code>publishedNode</code>.
* @param queue
* @param publishedNode
* @return
*/
public List<NodeRef> getEventNodesForPublishedNode(final NodeRef queue, NodeRef publishedNode)
{
Function<NodeRef, List<NodeRef>> transformer = eventNodeForNodePropertyFinder(queue, PROP_PUBLISHING_EVENT_NODES_TO_PUBLISH);
return transformer.apply(publishedNode);
}
/**
* Returns a {@link List} of the {@link NodeRef}s representing PublishingEvents that were scheduled to unpublish the specified <code>unpublishedNode</code>.
* @param queue
* @param unpublishedNode
* @return
*/
public List<NodeRef> getEventNodesForUnpublishedNode(final NodeRef queue, NodeRef unpublishedNode)
{
Function<NodeRef, List<NodeRef>> transformer = eventNodeForNodePropertyFinder(queue, PROP_PUBLISHING_EVENT_NODES_TO_UNPUBLISH);
return transformer.apply(unpublishedNode);
}
private List<NodeRef> getEventNodesForNodeProperty(final NodeRef queue, final QName propertyKey, Collection<NodeRef> publishedNodes)
{
Function<NodeRef, List<NodeRef>> transformer = eventNodeForNodePropertyFinder(queue, propertyKey);
return transformFlat(publishedNodes, transformer);
}
private Function<NodeRef, List<NodeRef>> eventNodeForNodePropertyFinder(final NodeRef queue,
final QName propertyKey)
{
return new Function<NodeRef, List<NodeRef>>()
{ {
public Collection<NodeRef> apply(NodeRef publishedNode) public List<NodeRef> apply(NodeRef publishedNode)
{ {
List<ChildAssociationRef> assocs = nodeService.getChildAssocsByPropertyValue(queue, PROP_PUBLISHING_EVENT_NODES_TO_PUBLISH, publishedNode.toString()); String nodeString = publishedNode.toString();
List<ChildAssociationRef> assocs =
nodeService.getChildAssocsByPropertyValue(queue, propertyKey, nodeString);
return transform(assocs, NodeUtils.toChildRef()); return transform(assocs, NodeUtils.toChildRef());
} }
}; };
List<NodeRef> nodes = transformFlat(publishedNodes, transformer);
return nodes;
} }
public List<PublishingEvent> findPublishingEvents(NodeRef queue, PublishingEventFilter filter) public List<PublishingEvent> findPublishingEvents(NodeRef queue, PublishingEventFilter filter)

View File

@@ -183,4 +183,22 @@ public class PublishingEventImpl implements PublishingEvent
return new MutablePublishingEventImpl(this); return new MutablePublishingEventImpl(this);
} }
/**
* {@inheritDoc}
*/
@Override
public int compareTo(PublishingEvent event)
{
if(event == null)
{
return 1;
}
Date eventTime = event.getCreatedTime();
if(eventTime == null)
{
return 1;
}
return (int)(createdTime.getTime() - eventTime.getTime());
}
} }

View File

@@ -84,7 +84,7 @@ public class PublishingIntegratedTest extends BaseSpringTest
NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef()); NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef());
} }
PublishingQueue liveQueue = publishingService.getPublishingQueue(siteId); PublishingQueue liveQueue = publishingService.getPublishingQueue();
MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage(); MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage();
publishingPackage.addNodesToPublish(nodes); publishingPackage.addNodesToPublish(nodes);
@@ -117,7 +117,7 @@ public class PublishingIntegratedTest extends BaseSpringTest
nodes.add(nodeService.createNode(channel.getNodeRef(), ContentModel.ASSOC_CONTAINS, QName.createQName( nodes.add(nodeService.createNode(channel.getNodeRef(), ContentModel.ASSOC_CONTAINS, QName.createQName(
NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef()); NamespaceService.CONTENT_MODEL_1_0_URI, Integer.toString(i)), ContentModel.TYPE_CONTENT).getChildRef());
} }
PublishingQueue liveQueue = publishingService.getPublishingQueue(siteId); PublishingQueue liveQueue = publishingService.getPublishingQueue();
MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage(); MutablePublishingPackage publishingPackage = liveQueue.createPublishingPackage();
publishingPackage.addNodesToPublish(nodes); publishingPackage.addNodesToPublish(nodes);

View File

@@ -25,9 +25,9 @@ import java.util.Date;
/** /**
* @author Brian * @author Brian
* * @author Nick Smith
*/ */
public interface PublishingEvent public interface PublishingEvent extends Comparable<PublishingEvent>
{ {
enum Status {SCHEDULED, IN_PROGRESS, CANCEL_REQUESTED, COMPLETED, FAILED} enum Status {SCHEDULED, IN_PROGRESS, CANCEL_REQUESTED, COMPLETED, FAILED}

View File

@@ -21,7 +21,6 @@ package org.alfresco.service.cmr.publishing;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -47,18 +46,4 @@ public interface PublishingQueue
* @return The identifier of the newly scheduled event * @return The identifier of the newly scheduled event
*/ */
String scheduleNewEvent(PublishingPackage publishingPackage, String channelId, 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
* supplied PublishingEventFilter object (optional - may be <code>null</code>)
* @param filter The filter that is to be applied to the publishing events on this environment
* @return A list of PublishingEvent objects representing the publishing events that matched the supplied filter on this publishing environment
*/
List<PublishingEvent> getPublishingEvents(PublishingEventFilter filter);
/**
* A factory method that creates a {@link PublishingEventFilter} object.
* @return a new {@link PublishingEventFilter}.
*/
PublishingEventFilter createPublishingEventFilter();
} }

View File

@@ -19,6 +19,7 @@
package org.alfresco.service.cmr.publishing; package org.alfresco.service.cmr.publishing;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -26,7 +27,6 @@ import org.alfresco.service.cmr.repository.NodeRef;
public interface PublishingService public interface PublishingService
{ {
/** /**
* Retrieve the publishing event that has the specified identifier * Retrieve the publishing event that has the specified identifier
* *
@@ -37,6 +37,20 @@ public interface PublishingService
*/ */
PublishingEvent getPublishingEvent(String id); PublishingEvent getPublishingEvent(String id);
/**
* Retrieve a list of publishing events for which the specified <code>node</code> was published.
* @param publishedNode The node that was published.
* @return A list of {@link PublishingEvent}s.
*/
List<PublishingEvent> getEventsForPublishedNode(NodeRef publishedNode);
/**
* Retrieve a list of publishing events for which the specified <code>node</code> was unpublished.
* @param unpublishedNode The node that was unpublished.
* @return A list of {@link PublishingEvent}s.
*/
List<PublishingEvent> getEventsForUnpublishedNode(NodeRef unpublishedNode);
/** /**
* Request that the specified publishing event be cancelled. This call will * Request that the specified publishing event be cancelled. This call will
* cancel the identified publishing event immediately if it hasn't been * cancel the identified publishing event immediately if it hasn't been
@@ -51,7 +65,7 @@ public interface PublishingService
* Retrieve the publishing queue associated with this publishing environment * Retrieve the publishing queue associated with this publishing environment
* @return A PublishingQueue object corresponding tho this environment's publishing queue * @return A PublishingQueue object corresponding tho this environment's publishing queue
*/ */
PublishingQueue getPublishingQueue(String siteId); PublishingQueue getPublishingQueue();
/** /**
* Discover the publishing status of each of the specified nodes * Discover the publishing status of each of the specified nodes