1 package org.collectionspace.services.batch.nuxeo;
3 import java.util.ArrayList;
4 import java.util.Arrays;
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;
21 public class UpdateInventoryStatusBatchJob extends AbstractBatchJob {
22 final Logger logger = LoggerFactory.getLogger(UpdateInventoryStatusBatchJob.class);
24 public UpdateInventoryStatusBatchJob() {
25 setSupportedInvocationModes(Arrays.asList(INVOCATION_MODE_LIST));
30 setCompletionStatus(STATUS_MIN_PROGRESS);
33 String mode = getInvocationContext().getMode();
35 if (mode.equalsIgnoreCase(INVOCATION_MODE_LIST)) {
36 List<String> csids = getInvocationContext().getListCSIDs().getCsid();
37 List<String> values = this.getValues();
39 setResults(updateRecords(csids, values));
42 throw new Exception("Unsupported invocation mode: " + mode);
45 setCompletionStatus(STATUS_COMPLETE);
48 setCompletionStatus(STATUS_ERROR);
49 setErrorInfo(new InvocationError(INT_ERROR_STATUS, e.getMessage()));
53 private List<String> getValues() {
54 List<String> values = new ArrayList<String>();
56 for (Param param : this.getParams()) {
57 if (param.getKey().equals("inventoryStatus")) {
58 values.add(param.getValue());
65 public InvocationResults updateRecords(List<String> csids, List<String> values) throws Exception {
66 InvocationResults results = new InvocationResults();
69 ArrayList<String> displayNames = new ArrayList<String>();
71 for (String value : values) {
72 AuthorityTermInfo termInfo = RefNameUtils.parseAuthorityTermInfo(value);
73 String displayName = termInfo.displayName;
75 displayNames.add(displayName);
78 for (String csid : csids) {
79 updateRecord(csid, values);
81 numAffected = numAffected + 1;
86 if (displayNames.size() > 0) {
87 userNote = "Inventory status changed to " + StringUtils.join(displayNames, ", ") + ".";
89 userNote = "Inventory status values removed.";
92 results.setNumAffected(numAffected);
93 results.setUserNote(userNote);
98 private void updateRecord(String csid, List<String> values) throws Exception {
99 CollectionobjectsCommon collectionObject = new CollectionobjectsCommon();
100 InventoryStatusList inventoryStatusList = new InventoryStatusList();
102 inventoryStatusList.getInventoryStatus().addAll(values);
103 collectionObject.setInventoryStatusList(inventoryStatusList);
105 CollectionObjectClient client = new CollectionObjectClient();
106 PoxPayloadOut payload = CollectionObjectFactory.createCollectionObjectInstance(client.getCommonPartName(), collectionObject);
107 NuxeoBasedResource resource = (NuxeoBasedResource) getResourceMap().get(CollectionObjectClient.SERVICE_NAME);
109 resource.update(getResourceMap(), createUriInfo(), csid, payload.asXML());