]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-5727: Filter out all but active Movement records when responding to create...
authorAron Roberts <aron@socrates.berkeley.edu>
Wed, 5 Dec 2012 04:08:47 +0000 (20:08 -0800)
committerAron Roberts <aron@socrates.berkeley.edu>
Wed, 5 Dec 2012 04:08:47 +0000 (20:08 -0800)
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/pom.xml
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/java/org/collectionspace/services/listener/UpdateObjectLocationOnMove.java

index 2fed52dab8df1cc3a5af49035cd1f3a9d341363c..3c28ba123c2dcc30c297b75d03719ab969aad2be 100644 (file)
             <artifactId>org.collectionspace.services.movement.service</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.collectionspace.services</groupId>
+            <artifactId>org.collectionspace.services.client</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
        
     <build>
index 14f160c494fd36f6934554a800d415780c3d1b1a..39078782e001abe3e4eb3142a75d5f0093857e79 100644 (file)
@@ -1,15 +1,11 @@
 package org.collectionspace.services.listener;
 
-import java.util.ArrayList;
-import java.util.List;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.collectionspace.services.client.workflow.WorkflowClient;
 import org.collectionspace.services.movement.nuxeo.MovementConstants;
 import org.nuxeo.ecm.core.api.ClientException;
-import org.nuxeo.ecm.core.api.CoreSession;
 import org.nuxeo.ecm.core.api.DocumentModel;
-import org.nuxeo.ecm.core.api.DocumentModelList;
-import org.nuxeo.ecm.core.api.impl.LifeCycleFilter;
 import org.nuxeo.ecm.core.event.Event;
 import org.nuxeo.ecm.core.event.EventContext;
 import org.nuxeo.ecm.core.event.EventListener;
@@ -23,7 +19,7 @@ public class UpdateObjectLocationOnMove implements EventListener {
 
     @Override
     public void handleEvent(Event event) throws ClientException {
-        
+
         logger.info("In handleEvent in UpdateObjectLocationOnMove ...");
 
         EventContext eventContext = event.getContext();
@@ -33,8 +29,37 @@ public class UpdateObjectLocationOnMove implements EventListener {
         DocumentEventContext docEventContext = (DocumentEventContext) eventContext;
         DocumentModel docModel = docEventContext.getSourceDocument();
         logger.debug("docType=" + docModel.getType());
-        if (docModel.getType().startsWith(MovementConstants.NUXEO_DOCTYPE))  {
-            logger.info("A create or update event for a Movement document was received by UpdateObjectLocationOnMove ...");
+        if (docModel.getType().startsWith(MovementConstants.NUXEO_DOCTYPE)
+                && isActiveDocument(docModel)) {
+            logger.info("A create or update event for an active Movement document was received by UpdateObjectLocationOnMove ...");
+        }
+
+    }
+
+    /**
+     * Identifies whether a document is an active document; that is, if
+     * it is not a versioned record; not a proxy (symbolic link to an
+     * actual record); and not in the 'deleted' workflow state.
+     *
+     * (A note relating the latter: Nuxeo appears to send 'documentModified' events
+     * even on workflow transitions, such when records are 'soft deleted' by being
+     * transitioned to the 'deleted' workflow state.)
+     *
+     * @param docModel
+     * @return true if the document is an active document; false if it
+     * is not.
+     */
+    private boolean isActiveDocument(DocumentModel docModel) {
+        boolean isActiveDocument = false;
+        try {
+            if (!docModel.isVersion()
+                    && !docModel.isProxy()
+                    && !docModel.getCurrentLifeCycleState().equals(WorkflowClient.WORKFLOWSTATE_DELETED)) {
+                isActiveDocument = true;
+            }
+        } catch (ClientException ce) {
+            logger.warn("Error while identifying whether document is an active document: ", ce);
         }
+        return isActiveDocument;
     }
 }