View Javadoc

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   * CreateBibAction is the action class for BatchIngest(Staff upload screen) which creates a bibliographic
29   * record in Docstore.
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       *  This method takes the initial request when creating the BibAction.
38       * @param executionEnvironment
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       *   This method simulate the executionEnvironment.
86       * @param executionEnvironment
87       */
88  
89      @Override
90      public void executeSimulation(ExecutionEnvironment executionEnvironment) {
91          execute(executionEnvironment);
92      }
93  
94      /**
95       *      This method gets the uuid based on docType
96       * @param response
97       * @param docType
98       * @return  uuid
99       */
100     private String getUUID(Response response, String docType) {
101         List<ResponseDocument> documents = response.getDocuments();
102         return getUUID(documents, docType);
103     }
104 
105     /**
106    *  This method gets the uuid based on List of documents and docType.
107      * @param documents
108      * @param docType
109      * @return   uuid
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      *     Gets the docstoreHelperService attribute.
125      * @return  Returns the docstoreHelperService.
126      */
127     public DocstoreHelperService getDocstoreHelperService() {
128         return docstoreHelperService;
129     }
130 
131     /**
132      * Sets the docstoreHelperService attribute value.
133      * @param docstoreHelperService .The docstoreHelperService to set.
134      */
135     public void setDocstoreHelperService(DocstoreHelperService docstoreHelperService) {
136         this.docstoreHelperService = docstoreHelperService;
137     }
138 
139     /**
140      *   Sets the discoveryHelperService attribute value.
141      * @param discoveryHelperService .The discoveryHelperService to set.
142      */
143     public void setDiscoveryHelperService(DiscoveryHelperService discoveryHelperService) {
144         this.discoveryHelperService = discoveryHelperService;
145     }
146 
147     /**
148      * Gets the discoveryHelperService attribute.
149      * @return  Returns discoveryHelperService.
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 }