1 package org.kuali.ole.ingest.action;
2
3 import org.kuali.ole.DataCarrierService;
4 import org.kuali.ole.OLEConstants;
5 import org.kuali.ole.docstore.model.xmlpojo.ingest.Response;
6 import org.kuali.ole.docstore.model.xmlpojo.ingest.ResponseDocument;
7 import org.kuali.ole.docstore.model.xstream.ingest.ResponseHandler;
8 import org.kuali.ole.describe.service.DiscoveryHelperService;
9 import org.kuali.ole.describe.service.DocstoreHelperService;
10 import org.kuali.ole.ingest.pojo.ProfileAttributeBo;
11 import org.kuali.ole.pojo.OleBibRecord;
12 import org.kuali.ole.pojo.OleOrderRecord;
13 import org.kuali.ole.pojo.bib.BibliographicRecord;
14 import org.kuali.ole.pojo.edi.EDIOrder;
15 import org.kuali.ole.pojo.edi.LineItemOrder;
16 import org.kuali.ole.service.OleOrderRecordService;
17 import org.kuali.ole.service.OleOverlayActionService;
18 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
19 import org.kuali.rice.krms.api.engine.ExecutionEnvironment;
20 import org.kuali.rice.krms.framework.engine.Action;
21
22 import java.util.HashMap;
23 import java.util.Iterator;
24 import java.util.List;
25 import java.util.Map;
26
27
28
29
30
31 public class CreateBibAction implements Action {
32 private DocstoreHelperService docstoreHelperService;
33 private DiscoveryHelperService discoveryHelperService;
34 private OleOrderRecordService oleOrderRecordService;
35 private OleOverlayActionService oleOverlayActionService;
36
37
38
39
40 @Override
41 public void execute(ExecutionEnvironment executionEnvironment) {
42 DataCarrierService dataCarrierService = GlobalResourceLoader.getService(OLEConstants.DATA_CARRIER_SERVICE);
43 List<ProfileAttributeBo> profileAttributes = (List<ProfileAttributeBo>) dataCarrierService.getData(OLEConstants.PROFILE_ATTRIBUTE_LIST);
44 BibliographicRecord bibliographicRecord = (BibliographicRecord) dataCarrierService.getData(OLEConstants.REQUEST_BIB_RECORD);
45 LineItemOrder lineItemOrder = (LineItemOrder) dataCarrierService.getData(OLEConstants.REQUEST_LINE_ITEM_ORDER_RECORD);
46 EDIOrder ediOrder = (EDIOrder) dataCarrierService.getData(OLEConstants.EDI_ORDER);
47 String profileName = (String)dataCarrierService.getData(OLEConstants.PROFILE_NM);
48 DocstoreHelperService docstoreHelperService = new DocstoreHelperService();
49 try {
50 String responseFromDocstore = docstoreHelperService.persistNewToDocstoreForIngest(lineItemOrder,bibliographicRecord, profileAttributes);
51 HashMap<String,Object> objects = new HashMap<String, Object>();
52 objects.put(OLEConstants.MRC,bibliographicRecord);
53 objects.put(OLEConstants.EDI,lineItemOrder);
54 ResponseHandler responseHander = new ResponseHandler();
55 Response response = responseHander.toObject(responseFromDocstore);
56 String instanceUUID = getUUID(response, OLEConstants.INSTANCE_DOC_TYPE);
57 if(null == instanceUUID){
58 throw new Exception("instance id returned from docstore is null");
59 }
60 List bibInfo = getBibInfo(instanceUUID);
61 if(bibInfo.isEmpty()){
62 Thread.sleep(2000);
63 bibInfo = getBibInfo(instanceUUID);
64 }
65 OleBibRecord oleBibRecord = new OleBibRecord();
66 Map<String, List> bibFieldValues = (Map<String, List>) bibInfo.get(0);
67 oleBibRecord.setBibAssociatedFieldsValueMap(bibFieldValues);
68 oleBibRecord.setLinkedInstanceId(instanceUUID);
69 oleBibRecord.setBibUUID(getUUID(response, OLEConstants.BIB_DOC_TYPE));
70 executionEnvironment.getEngineResults().setAttribute(OLEConstants.BIB_CREATION_FLAG, true);
71 OleOrderRecord oleOrderRecord =oleOrderRecordService.fetchOleOrderRecord(executionEnvironment.getEngineResults(), oleBibRecord, ediOrder, bibliographicRecord, profileAttributes);
72 oleOverlayActionService.performOverlayLookupAction(profileName,objects,instanceUUID,oleOrderRecord);
73 executionEnvironment.getEngineResults().setAttribute(OLEConstants.OLE_ORDER_RECORD, oleOrderRecord);
74 } catch (Exception e) {
75 e.printStackTrace();
76 executionEnvironment.getEngineResults().setAttribute(OLEConstants.OLE_ORDER_RECORD, null);
77 }
78 }
79
80 private List getBibInfo(String instanceUUID) {
81 return getDiscoveryHelperService().getBibInformationFromInsatnceId(instanceUUID);
82 }
83
84
85
86
87
88
89 @Override
90 public void executeSimulation(ExecutionEnvironment executionEnvironment) {
91 execute(executionEnvironment);
92 }
93
94
95
96
97
98
99
100 private String getUUID(Response response, String docType) {
101 List<ResponseDocument> documents = response.getDocuments();
102 return getUUID(documents, docType);
103 }
104
105
106
107
108
109
110
111 private String getUUID(List<ResponseDocument> documents, String docType) {
112 for (Iterator<ResponseDocument> iterator = documents.iterator(); iterator.hasNext(); ) {
113 ResponseDocument responseDocument = iterator.next();
114 if (responseDocument.getType().equals(docType)) {
115 return responseDocument.getUuid();
116 } else {
117 return getUUID(responseDocument.getLinkedDocuments(), docType);
118 }
119 }
120 return null;
121 }
122
123
124
125
126
127 public DocstoreHelperService getDocstoreHelperService() {
128 return docstoreHelperService;
129 }
130
131
132
133
134
135 public void setDocstoreHelperService(DocstoreHelperService docstoreHelperService) {
136 this.docstoreHelperService = docstoreHelperService;
137 }
138
139
140
141
142
143 public void setDiscoveryHelperService(DiscoveryHelperService discoveryHelperService) {
144 this.discoveryHelperService = discoveryHelperService;
145 }
146
147
148
149
150
151 public DiscoveryHelperService getDiscoveryHelperService() {
152 return discoveryHelperService;
153 }
154
155 public OleOrderRecordService getOleOrderRecordService() {
156 return oleOrderRecordService;
157 }
158
159 public void setOleOrderRecordService(OleOrderRecordService oleOrderRecordService) {
160 this.oleOrderRecordService = oleOrderRecordService;
161 }
162
163 public OleOverlayActionService getOleOverlayActionService() {
164 return oleOverlayActionService;
165 }
166
167 public void setOleOverlayActionService(OleOverlayActionService oleOverlayActionService) {
168 this.oleOverlayActionService = oleOverlayActionService;
169 }
170 }