]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
4400383f4dc671f929370c4b2d5eb3880550e020
[tmp/jakarta-migration.git] /
1 package org.collectionspace.services.listener.botgarden;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5
6 import org.jboss.resteasy.spi.ResteasyProviderFactory;
7
8 import org.collectionspace.services.batch.BatchResource;
9 import org.collectionspace.services.batch.nuxeo.FormatVoucherNameBatchJob;
10 import org.collectionspace.services.client.BatchClient;
11 import org.collectionspace.services.client.PoxPayloadIn;
12 import org.collectionspace.services.client.PoxPayloadOut;
13 import org.collectionspace.services.client.workflow.WorkflowClient;
14 import org.collectionspace.services.common.ResourceMap;
15 import org.collectionspace.services.common.context.ServiceContext;
16 import org.collectionspace.services.loanout.nuxeo.LoanoutBotGardenConstants;
17 import org.collectionspace.services.loanout.nuxeo.LoanoutConstants;
18 import org.collectionspace.services.nuxeo.client.java.CoreSessionWrapper;
19 import org.collectionspace.services.nuxeo.listener.AbstractCSEventSyncListenerImpl;
20
21 import org.nuxeo.ecm.core.api.DocumentModel;
22 import org.nuxeo.ecm.core.api.event.CoreEventConstants;
23 import org.nuxeo.ecm.core.api.event.DocumentEventTypes;
24 import org.nuxeo.ecm.core.event.Event;
25 import org.nuxeo.ecm.core.event.EventContext;
26 import org.nuxeo.ecm.core.event.impl.DocumentEventContext;
27
28 public class UpdateStyledNameListener extends AbstractCSEventSyncListenerImpl {
29         public static final String RUN_AFTER_MODIFIED_PROPERTY = "UpdateStyledNameListener.RUN_AFTER_MODIFIED";
30         static final Log logger = LogFactory.getLog(UpdateStyledNameListener.class);
31
32     @Override
33         public boolean shouldHandleEvent(Event event) {
34                 EventContext ec = event.getContext();
35
36                 if (ec instanceof DocumentEventContext) {
37                         DocumentEventContext context = (DocumentEventContext) ec;
38                         DocumentModel doc = context.getSourceDocument();
39
40                         logger.debug("docType=" + doc.getType());
41
42                         if (doc.getType().startsWith(LoanoutConstants.NUXEO_DOCTYPE) &&
43                                         !doc.isVersion() &&
44                                         !doc.isProxy() &&
45                                         !doc.getCurrentLifeCycleState().equals(WorkflowClient.WORKFLOWSTATE_DELETED)) {
46                                 return true;
47                         }
48                 }
49                 
50                 return false;
51     }
52     
53         @Override
54         public void handleCSEvent(Event event) {
55                 EventContext ec = event.getContext();
56                 DocumentEventContext context = (DocumentEventContext) ec;
57                 DocumentModel doc = context.getSourceDocument();
58
59                 logger.debug("docType=" + doc.getType());
60
61                 if (event.getName().equals(DocumentEventTypes.BEFORE_DOC_UPDATE)) {
62                         DocumentModel previousDoc = (DocumentModel) context.getProperty(CoreEventConstants.PREVIOUS_DOCUMENT_MODEL);
63
64                         String previousLabelRequested = (String) previousDoc.getProperty(LoanoutBotGardenConstants.LABEL_REQUESTED_SCHEMA_NAME,
65                                         LoanoutBotGardenConstants.LABEL_REQUESTED_FIELD_NAME);
66                         String labelRequested = (String) doc.getProperty(LoanoutBotGardenConstants.LABEL_REQUESTED_SCHEMA_NAME,
67                                         LoanoutBotGardenConstants.LABEL_REQUESTED_FIELD_NAME);
68
69                         logger.debug("previousLabelRequested=" + previousLabelRequested + " labelRequested=" + labelRequested);
70
71                         if ((previousLabelRequested == null || previousLabelRequested.equals(LoanoutBotGardenConstants.LABEL_REQUESTED_NO_VALUE)) &&
72                                         labelRequested.equals(LoanoutBotGardenConstants.LABEL_REQUESTED_YES_VALUE)) {
73                                 // The label request is changing from no to yes, so we should update the styled name.
74                                 ec.setProperty(RUN_AFTER_MODIFIED_PROPERTY, true);
75                         }
76                 }
77                 else {
78                         boolean doUpdate = false;
79
80                         if (event.getName().equals(DocumentEventTypes.DOCUMENT_CREATED)) {
81                                 String labelRequested = (String) doc.getProperty(LoanoutBotGardenConstants.LABEL_REQUESTED_SCHEMA_NAME,
82                                                 LoanoutBotGardenConstants.LABEL_REQUESTED_FIELD_NAME);
83
84                                 doUpdate = (labelRequested != null && labelRequested.equals(LoanoutBotGardenConstants.LABEL_REQUESTED_YES_VALUE));
85                         } else {
86                                 doUpdate = ec.hasProperty(RUN_AFTER_MODIFIED_PROPERTY) && ((Boolean) ec.getProperty(RUN_AFTER_MODIFIED_PROPERTY));
87                         }
88
89                         if (doUpdate) {
90                                 logger.debug("Updating styled name");
91
92                                 String voucherCsid = doc.getName();
93
94                                 try {
95                                         createFormatter(context).formatVoucherName(voucherCsid);
96                                 } catch (Exception e) {
97                                         logger.error(e.getMessage(), e);
98                                 }
99                         }
100                 }
101         }
102
103         private FormatVoucherNameBatchJob createFormatter(DocumentEventContext context) throws Exception {
104                 ResourceMap resourceMap = ResteasyProviderFactory.getContextData(ResourceMap.class);
105                 BatchResource batchResource = (BatchResource) resourceMap.get(BatchClient.SERVICE_NAME);
106                 ServiceContext<PoxPayloadIn, PoxPayloadOut> serviceContext = batchResource.createServiceContext(batchResource.getServiceName());
107
108                 serviceContext.setCurrentRepositorySession(new CoreSessionWrapper(context.getCoreSession()));
109
110                 FormatVoucherNameBatchJob formatter = new FormatVoucherNameBatchJob();
111                 formatter.setServiceContext(serviceContext);
112                 formatter.setResourceMap(resourceMap);
113
114                 return formatter;
115         }
116         
117         @Override
118         public Log getLogger() {
119                 return logger;
120         }
121 }