1 package org.collectionspace.services.nuxeo.listener.relation;
3 import java.io.Serializable;
5 import org.apache.commons.logging.Log;
6 import org.apache.commons.logging.LogFactory;
7 import org.nuxeo.ecm.core.api.ClientException;
8 import org.nuxeo.ecm.core.api.DocumentModel;
9 import org.nuxeo.ecm.core.api.DocumentRef;
10 import org.nuxeo.ecm.core.event.Event;
11 import org.nuxeo.ecm.core.event.EventContext;
12 import org.nuxeo.ecm.core.event.EventListener;
13 import org.nuxeo.ecm.core.event.impl.DocumentEventContext;
15 public class RelationSubOrObjDeletionListener implements EventListener {
17 public static final String WORKFLOW_TRANSITION_TO = "to";
18 public static final String WORKFLOW_TRANSITION_DELETED = "deleted";
19 // FIXME We might experiment here with using log4j here instead of Apache Commons Logging
20 final Log logger = LogFactory.getLog(RelationSubOrObjDeletionListener.class);
22 public void handleEvent(Event event) throws ClientException {
23 logger.info("In handleEvent in RelationSubOrObjDeletionListener ...");
25 EventContext eventContext = event.getContext();
27 if (isDocumentSoftDeletedEvent(eventContext)) {
29 DocumentEventContext docContext = (DocumentEventContext) eventContext;
30 DocumentModel docModel = docContext.getSourceDocument();
32 // FIXME: Temporary for debugging
33 logger.debug("docType=" + docModel.getType());
34 logger.debug("id=" + docModel.getSourceId());
35 logger.debug("transition to=" + docContext.getProperties().get(WORKFLOW_TRANSITION_TO));
37 // Get a list of relation records where the just-soft-deleted
38 // document is either the subject or object of the relation
40 // Cycle through the list, soft deleting each of these relation records
47 * Identifies whether a supplied event concerns a document that has
48 * been transitioned to the 'deleted' workflow state.
50 * @param eventContext an event context
52 * @return true if this event concerns a document that has
53 * been transitioned to the 'deleted' workflow state.
55 private boolean isDocumentSoftDeletedEvent(EventContext eventContext) {
56 boolean isSoftDeletedEvent = false;
57 if (eventContext instanceof DocumentEventContext) {
58 if (eventContext.getProperties().containsKey(WORKFLOW_TRANSITION_TO)
59 && eventContext.getProperties().get(WORKFLOW_TRANSITION_TO).equals(WORKFLOW_TRANSITION_DELETED)) {
60 isSoftDeletedEvent = true;
63 return isSoftDeletedEvent;