View Javadoc

1   package org.kuali.ole.ingest;
2   
3   import org.kuali.ole.OLEConstants;
4   import org.kuali.ole.OleOrderRecordHandler;
5   import org.kuali.ole.OleOrderRecords;
6   import org.kuali.ole.PropertyUtil;
7   import org.kuali.ole.converter.MarcXMLConverter;
8   import org.kuali.ole.converter.OLEEDIConverter;
9   import org.kuali.ole.docstore.model.xmlpojo.ingest.Request;
10  import org.kuali.ole.docstore.model.xmlpojo.ingest.RequestDocument;
11  import org.kuali.ole.docstore.model.xstream.ingest.RequestHandler;
12  import org.kuali.ole.editor.service.DocstoreHelperService;
13  import org.kuali.ole.editor.service.OleExposedWebService;
14  import org.kuali.ole.editor.service.OleWebServiceProvider;
15  import org.kuali.ole.pojo.OleBibRecord;
16  import org.kuali.ole.pojo.OleOrderRecord;
17  import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
18  import org.kuali.rice.krms.api.engine.EngineResults;
19  import org.xml.sax.SAXException;
20  
21  import java.io.IOException;
22  import java.util.ArrayList;
23  import java.util.Arrays;
24  import java.util.Iterator;
25  import java.util.List;
26  
27  /**
28   * IngestProcessor converts the marcFileContent in to marcXmlContent,ediFileContent in to ediXMLContent and also
29   * creates Requisition and Purchase Order based on oleOrderRecordXml
30   */
31  public class IngestProcessor extends AbstractIngestProcessor {
32      /**
33       *   This method modify the marcFileContent in to marcXmlContent.
34       * @param marcFileContent
35       * @return  modifiedXMLContent.
36       */
37      @Override
38      public String preProcessMarc(String marcFileContent) {
39          String marcXMLContent = null;
40          MarcXMLConverter marcXMLConverter = new MarcXMLConverter();
41          marcXMLContent = marcXMLConverter.convert(marcFileContent);
42  
43          //TODO: hack to get rid of the extra xmlns entry. Not sure why the second entry gets generated when calling marc4J in ole-docstore-utility.
44          //TODO: the duplicate entry does not get genereated if its run directly in the ole-docstore-utilty project.
45          String modifiedXMLContent =
46                  marcXMLContent.
47                          replace("collection xmlns=\"http://www.loc.gov/MARC21/slim\" xmlns=\"http://www.loc.gov/MARC21/slim",
48                                  "collection xmlns=\"http://www.loc.gov/MARC21/slim");
49          return modifiedXMLContent;
50      }
51  
52      /**
53       *  This method converts the ediFileContent in to ediXMLContent.
54       * @param ediFileContent
55       * @return  ediXMLContent.
56       */
57      @Override
58      public String preProcessEDI(String ediFileContent) {
59          String ediXMLContent = null;
60          OLEEDIConverter oleEDIConverter = new OLEEDIConverter();
61          try {
62              ediXMLContent = oleEDIConverter.convertToXML(ediFileContent);
63          } catch (IOException e) {
64              System.out.println(e.getMessage());
65          } catch (SAXException e) {
66              System.out.println(e.getMessage());
67          }
68          return ediXMLContent;
69      }
70  
71      /**
72       * This method creates Requisition and Purchase Order based on oleOrderRecordXml.
73       * The oleExposedWebService will call the createReqAndPO method in oleRice1 and creates the requisition and PO.
74       */
75      @Override
76      public void postProcess() {
77          OleOrderRecords oleOrderRecords = null;
78          try {
79              oleOrderRecords = new OleOrderRecords();
80              List<EngineResults> engineResults = getEngineResults();
81              List<OleOrderRecord> oleOrderRecordList = new ArrayList();
82              for (Iterator<EngineResults> iterator = engineResults.iterator(); iterator.hasNext(); ) {
83                  EngineResults results = iterator.next();
84                  OleOrderRecord oleOrderRecord = (OleOrderRecord) results.getAttribute(OLEConstants.OLE_ORDER_RECORD);
85                  oleOrderRecordList.add(oleOrderRecord);
86              }
87              oleOrderRecords.setRecords(oleOrderRecordList);
88              OleOrderRecordHandler oleEditorResponseHandler = new OleOrderRecordHandler();
89              String oleOrderRecordXml = oleEditorResponseHandler.toXML(oleOrderRecords);
90              OleWebServiceProvider oleWebServiceProvider = GlobalResourceLoader.getService(OLEConstants.OLE_WEB_SERVICE_PROVIDER);
91              OleExposedWebService oleExposedWebService =
92                      (OleExposedWebService) oleWebServiceProvider.
93                              getService("org.kuali.ole.editor.service.OleExposedWebService", "oleExposedWebService", getURL());
94              oleExposedWebService.createReqAndPO(oleOrderRecordXml);
95          } catch (Exception e) {
96              System.out.println(e.getMessage());
97              String xmlForRollback = buildRequestForRollback(oleOrderRecords);
98              DocstoreHelperService docstoreHelperService = GlobalResourceLoader.getService(OLEConstants.DOCSTORE_HELPER_SERVICE);
99              try {
100                 docstoreHelperService.rollbackData(xmlForRollback);
101             } catch (Exception e1) {
102                 System.out.println(e1.getMessage());
103             }
104         }
105     }
106 
107     /**
108      *  This method builds the request to Rollback the LinkedDocs for failure transactions.
109      * @param oleOrderRecords
110      * @return  xml
111      */
112     private String buildRequestForRollback(OleOrderRecords oleOrderRecords) {
113         String xml = null;
114         for (Iterator<OleOrderRecord> iterator = oleOrderRecords.getRecords().iterator(); iterator.hasNext(); ) {
115             OleOrderRecord oleOrderRecord = iterator.next();
116             OleBibRecord oleBibRecord = oleOrderRecord.getOleBibRecord();
117             String bibUUID = oleBibRecord.getBibUUID();
118 
119             RequestHandler requestHandler = new RequestHandler();
120             Request request = new Request();
121             request.setOperation("deleteWithLinkedDocs");
122             RequestDocument requestDocument = new RequestDocument();
123             requestDocument.setId(bibUUID);
124             request.setRequestDocuments(Arrays.asList(requestDocument));
125             xml = requestHandler.toXML(request);
126         }
127 
128         return xml;
129     }
130 
131     /**
132      *  Gets the oleExposedWebService url from PropertyUtil.
133      * @return  url.
134      */
135     public String getURL() {
136         String url = PropertyUtil.getPropertyUtil().getProperty("oleExposedWebService.url");
137         return url;
138     }
139 }