]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
bbb0325a369c580add200eafb5c9841d594c9ff9
[tmp/jakarta-migration.git] /
1 package org.collectionspace.services.batch.nuxeo;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.List;
6
7 import org.apache.commons.lang.StringUtils;
8 import org.collectionspace.services.client.CollectionObjectClient;
9 import org.collectionspace.services.client.CollectionObjectFactory;
10 import org.collectionspace.services.client.PoxPayloadOut;
11 import org.collectionspace.services.collectionobject.CollectionobjectsCommon;
12 import org.collectionspace.services.collectionobject.InventoryStatusList;
13 import org.collectionspace.services.common.api.RefNameUtils;
14 import org.collectionspace.services.common.api.RefNameUtils.AuthorityTermInfo;
15 import org.collectionspace.services.common.invocable.InvocationContext.Params.Param;
16 import org.collectionspace.services.common.invocable.InvocationResults;
17 import org.collectionspace.services.common.NuxeoBasedResource;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20
21 public class UpdateInventoryStatusBatchJob extends AbstractBatchJob {
22         final Logger logger = LoggerFactory.getLogger(UpdateInventoryStatusBatchJob.class);
23
24         public UpdateInventoryStatusBatchJob() {
25                 setSupportedInvocationModes(Arrays.asList(INVOCATION_MODE_LIST));
26         }
27
28         @Override
29         public void run() {
30                 setCompletionStatus(STATUS_MIN_PROGRESS);
31
32                 try {
33                         String mode = getInvocationContext().getMode();
34
35                         if (mode.equalsIgnoreCase(INVOCATION_MODE_LIST)) {
36                                 List<String> csids = getInvocationContext().getListCSIDs().getCsid();
37                                 List<String> values = this.getValues();
38
39                                 setResults(updateRecords(csids, values));
40                         }
41                         else {
42                                 throw new Exception("Unsupported invocation mode: " + mode);
43                         }
44
45                         setCompletionStatus(STATUS_COMPLETE);
46                 }
47                 catch(Exception e) {
48                         setCompletionStatus(STATUS_ERROR);
49                         setErrorInfo(new InvocationError(INT_ERROR_STATUS, e.getMessage()));
50                 }
51         }
52
53         private List<String> getValues() {
54                 List<String> values = new ArrayList<String>();
55
56                 for (Param param : this.getParams()) {
57                         if (param.getKey().equals("inventoryStatus")) {
58                                 values.add(param.getValue());
59                         }
60                 }
61
62                 return values;
63         }
64
65         public InvocationResults updateRecords(List<String> csids, List<String> values) throws Exception {
66                 InvocationResults results = new InvocationResults();
67                 int numAffected = 0;
68
69                 ArrayList<String> displayNames = new ArrayList<String>();
70
71                 for (String value : values) {
72                         AuthorityTermInfo termInfo = RefNameUtils.parseAuthorityTermInfo(value);
73                         String displayName = termInfo.displayName;
74
75                         displayNames.add(displayName);
76                 }
77
78                 for (String csid : csids) {
79                         updateRecord(csid, values);
80
81                         numAffected = numAffected + 1;
82                 }
83
84                 String userNote;
85
86                 if (displayNames.size() > 0) {
87                         userNote = "Inventory status changed to " + StringUtils.join(displayNames, ", ") + ".";
88                 } else {
89                         userNote = "Inventory status values removed.";
90                 }
91
92                 results.setNumAffected(numAffected);
93                 results.setUserNote(userNote);
94
95                 return results;
96         }
97
98         private void updateRecord(String csid, List<String> values) throws Exception {
99                 CollectionobjectsCommon collectionObject = new CollectionobjectsCommon();
100                 InventoryStatusList inventoryStatusList = new InventoryStatusList();
101
102                 inventoryStatusList.getInventoryStatus().addAll(values);
103                 collectionObject.setInventoryStatusList(inventoryStatusList);
104
105                 CollectionObjectClient client = new CollectionObjectClient();
106                 PoxPayloadOut payload = CollectionObjectFactory.createCollectionObjectInstance(client.getCommonPartName(), collectionObject);
107                 NuxeoBasedResource resource = (NuxeoBasedResource) getResourceMap().get(CollectionObjectClient.SERVICE_NAME);
108
109                 resource.update(getResourceMap(), createUriInfo(), csid, payload.asXML());
110         }
111 }