]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-5727: Event listener now logs on movement record creates and updates. Bundle...
authorAron Roberts <aron@socrates.berkeley.edu>
Wed, 5 Dec 2012 02:49:37 +0000 (18:49 -0800)
committerAron Roberts <aron@socrates.berkeley.edu>
Wed, 5 Dec 2012 02:49:37 +0000 (18:49 -0800)
3rdparty/nuxeo/nuxeo-platform-listener/build.xml
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/pom.xml
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/java/org/collectionspace/services/listener/UpdateObjectLocationOnMove.java [new file with mode: 0644]
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/java/org/collectionspace/services/listener/UpdateRelationsOnDelete.java [deleted file]
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/resources/META-INF/MANIFEST.MF
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/resources/OSGI-INF/core-types-contrib.xml
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/resources/OSGI-INF/default-life-cycle-contrib.xml
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/resources/OSGI-INF/ecm-types-contrib.xml
3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/resources/OSGI-INF/layouts-contrib.xml

index 10dc369ba160b67d98402c267838bd3c4506966e..74e81ee56e0df27e17dc3ea29ae2b7d25680408b 100644 (file)
@@ -8,7 +8,6 @@
     <property name="services.trunk" value="../../.."/>
     <!-- environment should be declared before reading build.properties -->
     <property environment="env" />
-    <property file="${services.trunk}/build.properties" />
     <property name="mvn.opts" value="" />
     <property name="src" location="src"/>
     <property name="build" location="build"/>
index 56cdc3dc85a8cc209fb2b1f308a74b7cf7ab4c4b..2fed52dab8df1cc3a5af49035cd1f3a9d341363c 100644 (file)
     <name>org.collectionspace.services.listener.updateobjectlocationonmove</name>
     <url>http://maven.apache.org</url>
 
-       
-    <dependencies>
+        
+   <dependencies>
         <dependency>
             <groupId>org.collectionspace.services</groupId>
             <artifactId>org.collectionspace.services.common</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.collectionspace.services</groupId>
+            <artifactId>org.collectionspace.services.movement.service</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
        
     <build>
diff --git a/3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/java/org/collectionspace/services/listener/UpdateObjectLocationOnMove.java b/3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/java/org/collectionspace/services/listener/UpdateObjectLocationOnMove.java
new file mode 100644 (file)
index 0000000..14f160c
--- /dev/null
@@ -0,0 +1,40 @@
+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.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;
+import org.nuxeo.ecm.core.event.impl.DocumentEventContext;
+
+public class UpdateObjectLocationOnMove implements EventListener {
+
+    // FIXME: We might experiment here with using log4j instead of Apache Commons Logging;
+    // am using the latter to follow Ray's pattern for now
+    final Log logger = LogFactory.getLog(UpdateObjectLocationOnMove.class);
+
+    @Override
+    public void handleEvent(Event event) throws ClientException {
+        
+        logger.info("In handleEvent in UpdateObjectLocationOnMove ...");
+
+        EventContext eventContext = event.getContext();
+        if (eventContext == null) {
+            return;
+        }
+        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 ...");
+        }
+    }
+}
diff --git a/3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/java/org/collectionspace/services/listener/UpdateRelationsOnDelete.java b/3rdparty/nuxeo/nuxeo-platform-listener/updateobjectlocationonmove/src/main/java/org/collectionspace/services/listener/UpdateRelationsOnDelete.java
deleted file mode 100644 (file)
index 8efc9c1..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-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.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;
-import org.nuxeo.ecm.core.event.impl.DocumentEventContext;
-
-public class UpdateRelationsOnDelete implements EventListener {
-
-    // FIXME: Consider adding the following constant to
-    // org.collectionspace.services.common.workflow.jaxb.WorkflowJAXBSchema
-    // and referencing it from there.
-    private static final String WORKFLOWTRANSITION_TO = "to";
-    // FIXME: Consider substituting existing constant WorkflowClient.WORKFLOWSTATE_DELETED
-    private static final String WORKFLOWSTATE_DELETED = "deleted";
-    // FIXME: Consider substituting existing constant WorkflowClient.WORKFLOWSTATE_LOCKED
-    private static final String WORKFLOWSTATE_LOCKED = "locked";
-    // FIXME: Consider substituting existing constant WorkflowClient.WORKFLOWTRANSITION_DELETE
-    private static final String WORKFLOWTRANSITION_DELETE = "delete";
-
-    // FIXME: We might experiment here with using log4j instead of Apache Commons Logging;
-    // am using the latter to follow Ray's pattern for now
-    final Log logger = LogFactory.getLog(UpdateRelationsOnDelete.class);
-
-    @Override
-    public void handleEvent(Event event) throws ClientException {
-        logger.info("In handleEvent in UpdateRelationsOnDelete ...");
-
-        EventContext eventContext = event.getContext();
-
-        if (isDocumentSoftDeletedEvent(eventContext)) {
-            
-            DocumentEventContext docContext = (DocumentEventContext) eventContext;
-            DocumentModel docModel = docContext.getSourceDocument();
-            
-            // Retrieve a list of relation records, where the soft deleted
-            // document provided in the context of the current event is
-            // either the subject or object of any relation
-            
-            // Build a query string
-            String csid = docModel.getName();
-            StringBuilder queryString = new StringBuilder("");
-            queryString.append("SELECT * FROM Relation WHERE ");
-            // FIXME: Obtain and add tenant ID to the query here
-            // queryString.append("collectionspace_core:tenantId = 1 ");
-            // queryString.append(" AND ");
-            // queryString.append("ecm:currentLifeCycleState <> 'deleted' ");
-            queryString.append("ecm:isProxy = 0 ");
-            queryString.append(" AND ");
-            queryString.append("(");
-            queryString.append("relations_common:subjectCsid = ");
-            queryString.append("'");
-            queryString.append(csid);
-            queryString.append("'");
-            queryString.append(" OR ");
-            queryString.append("relations_common:objectCsid = ");
-            queryString.append("'");
-            queryString.append(csid);
-            queryString.append("'");
-            queryString.append(")");
-                        
-            // Create a filter to exclude from the list results any records
-            // that have already been soft deleted or are locked
-            List<String> workflowStatesToFilter = new ArrayList<String>();
-            workflowStatesToFilter.add(WORKFLOWSTATE_DELETED);
-            workflowStatesToFilter.add(WORKFLOWSTATE_LOCKED);
-            LifeCycleFilter workflowStateFilter = new LifeCycleFilter(null, workflowStatesToFilter);
-            
-            // Perform the filtered query
-            CoreSession session = docModel.getCoreSession();
-            DocumentModelList matchingDocuments;
-            try {
-                matchingDocuments = session.query(queryString.toString(), workflowStateFilter);
-            } catch (ClientException ce) {
-                logger.warn("Error attempting to retrieve relation records where "
-                        + "record of type '" + docModel.getType() + "' with CSID " + csid
-                        + " is the subject or object of any relation: " + ce.getMessage());
-                throw ce;
-            }
-
-            // Cycle through the list results, soft deleting each matching relation record
-            logger.trace("Attempting to soft delete " + matchingDocuments.size() + " relation records.");
-            for (DocumentModel doc : matchingDocuments) {
-                doc.followTransition(WORKFLOWTRANSITION_DELETE);
-            }
-
-        }
-
-    }
-
-    /**
-     * Identifies whether a supplied event concerns a document that has
-     * been transitioned to the 'deleted' workflow state.
-     * 
-     * @param eventContext an event context
-     * 
-     * @return true if this event concerns a document that has
-     * been transitioned to the 'deleted' workflow state.
-     */
-    private boolean isDocumentSoftDeletedEvent(EventContext eventContext) {
-        boolean isSoftDeletedEvent = false;
-        if (eventContext instanceof DocumentEventContext) {
-            if (eventContext.getProperties().containsKey(WORKFLOWTRANSITION_TO)
-                    && eventContext.getProperties().get(WORKFLOWTRANSITION_TO).equals(WORKFLOWSTATE_DELETED)) {
-                isSoftDeletedEvent = true;
-            }
-        }
-        return isSoftDeletedEvent;
-    }
-}
index 4fae07ad7cd4cab1b14314239bdef80f284d043a..8afea5901803d0a73b15c6fc5e4664a5e76d4967 100644 (file)
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0 
 Bundle-ManifestVersion: 1 
-Bundle-Name: org.collectionspace.nuxeo.listener.relation
-Bundle-SymbolicName: org.collectionspace.nuxeo.listener.relation;singleton:=true 
+Bundle-Name: org.collectionspace.services.listener.updateobjectlocationonmove
+Bundle-SymbolicName: org.collectionspace.services.listener.updateobjectlocationonmove;singleton:=true 
 Bundle-Version: 1.0.0
 Bundle-Localization: plugin
 Bundle-Vendor: Nuxeo
@@ -9,7 +9,7 @@ Require-Bundle: org.nuxeo.runtime,
  org.nuxeo.ecm.core.api,
  org.nuxeo.ecm.core,
  org.nuxeo.ecm.webapp.core
-Provide-Package: org.collectionspace.nuxeo.listener.relation
+Provide-Package: org.collectionspace.services.listener.updateobjectlocationonmove
 Nuxeo-Component: OSGI-INF/core-types-contrib.xml,
  OSGI-INF/default-life-cycle-contrib.xml,
  OSGI-INF/ecm-types-contrib.xml,
index 8cedf80097a8bea7702a623251e2942d20a32cc0..a5b94d22e64982ab9c5f1ee838940d5b58056848 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0"?>
-<component name="org.collectionspace.nuxeo.listener.relation.core.types">
+<component name="org.collectionspace.services.listener.updateobjectlocationonmove.core.types">
     <!-- This page intentionally left blank -->
 </component>
index 08d595182c24eefc695e5137ea0c822fba7affc5..bdd1e2912df4a394342813009f87277c40cc036a 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0"?>
-<component name="org.collectionspace.nuxeo.listener.relation.LifeCycle">
+<component name="org.collectionspace.services.listener.updateobjectlocationonmove.LifeCycle">
     <!-- This page intentionally left blank -->
 </component>
index d25de03a767c60a51a3f5cb09fa0bbed1b0c22e4..612dde8fe7510b5d35a11486bb32418e50d9b85d 100644 (file)
@@ -1,11 +1,12 @@
 <?xml version="1.0"?>
-<component name="org.collectionspace.nuxeo.listener.relation.ecm.types">
+<component name="org.collectionspace.services.listener.updateobjectlocationonmove.ecm.types">
     
     <extension target="org.nuxeo.ecm.core.event.EventServiceComponent" point="listener">
-        <listener name="relationsuborobjdeletionlistener" async="false" postCommit="false"
-                          class="org.collectionspace.services.listener.UpdateRelationsOnDelete" priority="999">
-            <event>lifecycle_transition_event</event>
+        <listener name="relationsuborobjdeletionlistener" async="false" postCommit="true"
+                  class="org.collectionspace.services.listener.UpdateObjectLocationOnMove" priority="999">
+            <event>documentCreated</event>
+            <event>documentModified</event>
         </listener>
     </extension>
-    
+
 </component>
index 91f74f30b649aa82b84cecfc6d0f61de17ffe5ac..ef82a7ac10adf0858d28754c09cc31e954ec882a 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0"?>
-<component name="org.collectionspace.nuxeo.listener.relation.layouts.webapp">
+<component name="org.collectionspace.services.listener.updateobjectlocationonmove.layouts.webapp">
        <!-- This page intentionally left blank -->
 </component>