View Javadoc

1   package org.kuali.ole.ingest;
2   
3   import org.kuali.ole.*;
4   import org.kuali.ole.ingest.pojo.*;
5   import org.kuali.ole.describe.service.DocstoreHelperService;
6   import org.kuali.ole.ingest.pojo.IngestRecord;
7   import org.kuali.ole.ingest.pojo.MatchBo;
8   import org.kuali.ole.ingest.pojo.ProfileAttributeBo;
9   import org.kuali.ole.ingest.pojo.ProfileTerm;
10  import org.kuali.ole.pojo.OleBibRecord;
11  import org.kuali.ole.pojo.OleOrderRecord;
12  import org.kuali.ole.pojo.OleTxRecord;
13  import org.kuali.ole.pojo.bib.BibliographicRecord;
14  import org.kuali.ole.pojo.bib.Collection;
15  import org.kuali.ole.pojo.edi.*;
16  import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
17  import org.kuali.rice.coreservice.api.CoreServiceApiServiceLocator;
18  import org.kuali.rice.coreservice.api.parameter.Parameter;
19  import org.kuali.rice.coreservice.api.parameter.ParameterKey;
20  import org.kuali.rice.krad.service.BusinessObjectService;
21  import org.kuali.rice.krad.service.KRADServiceLocator;
22  import org.kuali.rice.krms.api.KrmsApiServiceLocator;
23  import org.kuali.rice.krms.api.engine.*;
24  import org.kuali.rice.krms.framework.engine.EngineResultsImpl;
25  import org.kuali.rice.krms.impl.repository.AgendaBo;
26  import org.xml.sax.SAXException;
27  
28  import javax.xml.parsers.ParserConfigurationException;
29  import javax.xml.xpath.XPathExpressionException;
30  import java.io.IOException;
31  import java.net.URISyntaxException;
32  import java.util.*;
33  
34  /**
35   * AbstractIngestProcessor which does the pre-processing for Staff Upload process to create Requisition.
36   */
37  public abstract class AbstractIngestProcessor {
38      private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(AbstractIngestProcessor.class);
39      private static final String NAMESPACE_CODE_SELECTOR = "namespaceCode";
40      private static final String NAME_SELECTOR = "name";
41      private BusinessObjectService businessObjectService;
42      private List<EngineResults> engineResults = new ArrayList<EngineResults>();
43      private String user;
44      String marcXMLContent;
45      String ediXMLContent;
46      private IngestRecord ingestRecord;
47      private DocstoreHelperService docstoreHelperService;
48  
49      public String getUser() {
50          return user;
51      }
52  
53      public void setUser(String user) {
54          this.user = user;
55      }
56  
57      /**
58       *  Gets the engineResults attribute.
59       * @return engineResults
60       */
61  
62      public List<EngineResults> getEngineResults() {
63          return engineResults;
64      }
65  
66      public DocstoreHelperService getDocstoreHelperService() {
67          if(docstoreHelperService==null)
68              docstoreHelperService=new DocstoreHelperService();
69          return docstoreHelperService;
70      }
71  
72      /**
73       *   This method takes the initial request when Ingesting a record.
74       * @param ingestRecord
75       */
76  
77      public int start(IngestRecord ingestRecord , boolean failure_flag) {
78          this.ingestRecord = ingestRecord;
79          this.setUser(ingestRecord.getUser());
80          byPassLogicForPreProcess(ingestRecord.getMarcFileContent(), ingestRecord.getEdiFileContent(), ingestRecord.getByPassPreProcessing());
81          try {
82              failure_flag=process();
83              ingestRecord.setUpdate(this.ingestRecord.isUpdate());
84          } catch (URISyntaxException e) {
85              LOG.info(e.getMessage());
86          } catch (IOException e) {
87              LOG.info(e.getMessage());
88          } catch (SAXException e) {
89              LOG.info(e.getMessage());
90          } catch (XPathExpressionException e) {
91              LOG.info(e.getMessage());
92          } catch (ParserConfigurationException e) {
93              LOG.info(e.getMessage());
94          } catch (InterruptedException e) {
95              LOG.info(e.getMessage());
96          } catch (Exception e) {
97              LOG.info(e.getMessage());
98          }
99  
100         postProcess();
101         int recordCount=engineResults.size();
102         return recordCount;
103     }
104 
105     /**
106      * This method forwards to preProcess method if preProcessReq is true else sets the marcXmlContent and ediXmlContent.
107      * @param rawMarcContent
108      * @param rawEdiContent
109      * @param preProcessingReq
110      */
111     private void byPassLogicForPreProcess(String rawMarcContent, String rawEdiContent, boolean preProcessingReq) {
112         if (preProcessingReq) {
113             preProcess(rawMarcContent, rawEdiContent);
114         } else {
115             marcXMLContent = rawMarcContent;
116             ediXMLContent = rawEdiContent;
117         }
118     }
119 
120     /**
121      *   This method forwards to preProcessMarc and preProcessEDI method.
122      * @param rawMarcContent
123      * @param rawEdiContent
124      */
125     private void preProcess(String rawMarcContent, String rawEdiContent) {
126         marcXMLContent = preProcessMarc(rawMarcContent);
127         ediXMLContent = preProcessEDI(rawEdiContent);
128     }
129 
130     /**
131      *  This method starts the process for marcXmlContent and ediXmlContent.
132      * @throws java.net.URISyntaxException
133      * @throws java.io.IOException
134      * @throws org.xml.sax.SAXException
135      * @throws javax.xml.xpath.XPathExpressionException
136      * @throws javax.xml.parsers.ParserConfigurationException
137      * @throws InterruptedException
138      */
139     public boolean process() throws URISyntaxException, IOException, SAXException, XPathExpressionException, ParserConfigurationException, InterruptedException, Exception {
140 
141         Engine engine = KrmsApiServiceLocator.getEngine();
142 
143         HashMap<String, String> map = new HashMap<String, String>();
144         map.put("AGENDA_NAME", ingestRecord.getAgendaName());
145         List<MatchBo> matchBos = (List<MatchBo>) getBusinessObjectService().findMatching(MatchBo.class, map);
146 
147         HashMap<String, Object> agendaValue = new HashMap<String, Object>();
148         agendaValue.put("nm", ingestRecord.getAgendaName());
149         List<AgendaBo> agendaBos = (List<AgendaBo>) getBusinessObjectService().findMatching(AgendaBo.class, agendaValue);
150         AgendaBo agendaBo = agendaBos.get(0);
151 
152         SelectionCriteria selectionCriteria =
153                 SelectionCriteria.createCriteria(null, getSelectionContext(agendaBo.getContext().getName()), getAgendaContext(ingestRecord.getAgendaName()));
154 
155         ExecutionOptions executionOptions = new ExecutionOptions();
156         executionOptions.setFlag(ExecutionFlag.LOG_EXECUTION, true);
157 
158         OLETranscationalRecordGenerator oleTranscationalRecordGenerator = new OLETranscationalRecordGenerator();
159         EDIOrders ediOrders = oleTranscationalRecordGenerator.fromXml(ediXMLContent);
160 
161         BibliographicRecordHandler bibliographicRecordHandler = new BibliographicRecordHandler();
162         Collection bibliographicRecords = bibliographicRecordHandler.fromXML(marcXMLContent);
163 
164         List<BibliographicRecord> records = bibliographicRecords.getRecords();
165 
166         List<ProfileAttributeBo> profileAttributeBos = getProfileAttributeBos(ingestRecord.getAgendaName());
167         List<OverlayOption> overlayOption = getOverlayOption(ingestRecord.getAgendaName());
168        // List<OverlayLookupAction> overlayLookupActionList = overlayProfileManagerService.convertXmlFileToOverlayObject(ingestRecord.getAgendaName());
169 
170         EDIOrder ediOrder = ediOrders.getOrders().get(0);
171         //TODO: Removing this validation as need to fix in OLE_Rice1.0-from load summary if re-ingested
172         //TODO: the num of marc and edi files may not match as the edi order is a whole and needs to be broken
173         //TODO: into one marc to one line item order and not one marc to one edi order.
174         // if (isNumMarcMatchingNumEdiRecords(ediOrder, records)) {
175         int matchBibEdiRecord=0;
176         for (Iterator<BibliographicRecord> iterator = records.iterator(); iterator.hasNext();matchBibEdiRecord++ ) {
177             BibliographicRecord bibliographicRecord = iterator.next();
178             if(matchBibEdiRecord<records.size() && matchBibEdiRecord<ediOrder.getLineItemOrder().size()) {
179                 if(records.get(matchBibEdiRecord)!=null && ediOrder.getLineItemOrder().get(matchBibEdiRecord)!=null){
180                     String singleMarcXML = bibliographicRecordHandler.generateXML(bibliographicRecord);
181                     Map<String, String> valuesMap = bibliographicRecordHandler.valuesMapFromXML(singleMarcXML);
182                     valuesMap.putAll(getvendorLineItemReferenceNumber(ediOrder));
183                     Facts.Builder factBuilder = Facts.Builder.create();
184                     String termIncominField = null;
185                     String termExistingField = null;
186                     for (Iterator<MatchBo> matchBoIterator = matchBos.iterator(); matchBoIterator.hasNext(); ) {
187                         MatchBo matchBo = matchBoIterator.next();
188                         ProfileTerm term = new ProfileTerm();
189                         String[] matchTermNames = matchBo.getTermName().split("-");
190                         if(matchTermNames[0].equalsIgnoreCase(OLEConstants.INCOMING_FIELD)) {
191                             term.setIncomingField(valuesMap.get(matchBo.getIncomingField()));
192                             termIncominField = term.getIncomingField();
193                             //if(termIncominField != null)
194                             factBuilder.addFact(matchBo.getTermName(),termIncominField);
195                         }
196                         else if(matchTermNames[0].equalsIgnoreCase(OLEConstants.EXISTING_FIELD)){
197                             term.setExistingField(matchBo.getExistingField());
198                             term.setIncomingField(termIncominField);
199                             termExistingField = term.getExistingField();
200                             //if(termExistingField != null)
201                             factBuilder.addFact(matchBo.getTermName(),termExistingField);
202                         }
203                         else {
204                             factBuilder.addFact(matchBo.getTermName(),null);
205                         }
206                     }
207                     LineItemOrderMatcherForBib lineItemOrderMatcherForBib = new LineItemOrderMatcherForBib();
208                     LineItemOrder lineItemOrder = lineItemOrderMatcherForBib.getLineItemOrder(ediOrder.getLineItemOrder(), bibliographicRecord, getVendorProfileCode(profileAttributeBos));
209                     DataCarrierService dataCarrierService = GlobalResourceLoader.getService(OLEConstants.DATA_CARRIER_SERVICE);
210                     dataCarrierService.addData(OLEConstants.REQUEST_BIB_RECORD, bibliographicRecord);
211                     dataCarrierService.addData(OLEConstants.PROFILE_ATTRIBUTE_LIST, profileAttributeBos);
212                     dataCarrierService.addData(OLEConstants.OVERLAY_OPTION_LIST, overlayOption);
213                  //   dataCarrierService.addData(OLEConstants.OVERLAY_LOOKUP_ACTION_LIST, overlayLookupActionList);
214                     dataCarrierService.addData(OLEConstants.REQUEST_LINE_ITEM_ORDER_RECORD,lineItemOrder);
215                     dataCarrierService.addData(OLEConstants.EDI_ORDER,ediOrder);
216                     dataCarrierService.addData(OLEConstants.PROFILE_NM,ingestRecord.getAgendaName());
217 
218                     EngineResults engineResult=engine.execute(selectionCriteria, factBuilder.build(), executionOptions);
219                     OleOrderRecord oleOrderRecord = (OleOrderRecord) engineResult.getAttribute(OLEConstants.OLE_ORDER_RECORD);
220                     if(oleOrderRecord==null){
221                         ingestRecord.setUpdate(true);
222                         oleOrderRecord = new OleOrderRecord();
223                         oleOrderRecord.setOriginalRecord(bibliographicRecord);
224                         oleOrderRecord.setOriginalEdi(ediOrder);
225                         OleTxRecord oleTxRecord = new OleTxRecord();
226                         oleTxRecord.setVendorItemIdentifier(OleTxRecordBuilder.getInstance().getVendorItemIdentifier(lineItemOrder));
227                         oleOrderRecord.setOleTxRecord(oleTxRecord);
228                     }else {
229                         OleTxRecord oleTxRecord = oleOrderRecord.getOleTxRecord();
230                         if(oleTxRecord!=null){
231                             if(oleTxRecord.getAccountNumber()==null || oleTxRecord.getAccountNumber().isEmpty()){
232                                  oleTxRecord.setAccountNumber(getParameter(OLEParameterConstants.OVERLAY_ACCOUNT_NUMBER));
233                             }
234                             if(oleTxRecord.getObjectCode()==null || oleTxRecord.getObjectCode().isEmpty()){
235                                 oleTxRecord.setObjectCode(getParameter(OLEParameterConstants.OVERLAY_OBJECT_CODE));
236                             }
237                             if(oleTxRecord.getItemChartCode()==null || oleTxRecord.getItemChartCode().isEmpty()){
238                                 oleTxRecord.setItemChartCode(getParameter(OLEParameterConstants.OVERLAY_CHART_CODE));
239                             }
240                         }
241                     }
242                     oleOrderRecord.setAgendaName(ingestRecord.getAgendaName());
243                     oleOrderRecord.setOleOriginalBibRecordFileName(ingestRecord.getOriginalMarcFileName());
244                     oleOrderRecord.setOriginalEDIFileName(ingestRecord.getOriginalEdiFileName());
245                     oleOrderRecord.setDescription(ingestRecord.getAgendaDescription());
246                     boolean validBFNFlag=isValidBFN(ediOrder, bibliographicRecord, profileAttributeBos);
247                     oleOrderRecord.addMessageToMap("isValidRecord",true);
248                     oleOrderRecord.addMessageToMap("isValidBFN",validBFNFlag);
249                     List<ResultEvent> allResults = engineResult.getAllResults();
250                     for (Iterator<ResultEvent> resultEventIterator = allResults.iterator(); resultEventIterator.hasNext(); ) {
251                         ResultEvent resultEvent = resultEventIterator.next();
252                         String ruleEvaluated = null;
253                         if (resultEvent.getType().equals("Rule Evaluated")) {
254                             if(validBFNFlag)
255                                 ruleEvaluated = resultEvent.getSource() + " : " + resultEvent.getResult();
256                             else
257                                 ruleEvaluated = resultEvent.getSource() + " : " + "false";
258                             List rulesEvaluatedList = (List) oleOrderRecord.getMessageMap().get("rulesEvaluated");
259                             if (null == rulesEvaluatedList) {
260                                 rulesEvaluatedList = new ArrayList();
261                             }
262                             rulesEvaluatedList.add(ruleEvaluated);
263                             oleOrderRecord.addMessageToMap("rulesEvaluated", rulesEvaluatedList);
264                         }
265                     }
266                    if("false".equals((((List)oleOrderRecord.getMessageMap().get("rulesEvaluated")).get(0)).toString().split(":")[1].trim()) && oleOrderRecord.getOleBibRecord()==null)
267                        oleOrderRecord.addMessageToMap("isBadControlField",true);
268                     else
269                        oleOrderRecord.addMessageToMap("isBadControlField",false);
270                     oleOrderRecord.addMessageToMap(OLEConstants.USER_ID,this.getUser());
271                     engineResult.setAttribute(OLEConstants.OLE_ORDER_RECORD, oleOrderRecord);
272                     engineResults.add(engineResult);
273                 }
274             }
275         }
276         if(records.size()>ediOrder.getLineItemOrder().size()){
277             for(int i=ediOrder.getLineItemOrder().size();i<records.size();i++){
278                 OleOrderRecord oleOrderRecord=new OleOrderRecord();
279                 oleOrderRecord.setAgendaName(ingestRecord.getAgendaName());
280                 oleOrderRecord.setOleOriginalBibRecordFileName(ingestRecord.getOriginalMarcFileName());
281                 oleOrderRecord.setOriginalEDIFileName(ingestRecord.getOriginalEdiFileName());
282                 oleOrderRecord.setOriginalRecord(records.get(i));
283                 oleOrderRecord.setDescription(ingestRecord.getAgendaDescription());
284                 oleOrderRecord.setOriginalEdi(ediOrder);
285                 oleOrderRecord.setOleBibRecord(new OleBibRecord());
286                 // OleTxRecord oleTxRecord = getOleTxRecord(ediOrder.getLineItemOrder().get(i), ediOrder, profileAttributeBos);
287                 oleOrderRecord.setOleTxRecord(null);
288                 oleOrderRecord.addMessageToMap("isValidRecord",false);
289                 oleOrderRecord.addMessageToMap("isBadControlField",false);
290                 Facts.Builder factBuilder = Facts.Builder.create();
291                 EngineResults engineResult=new EngineResultsImpl();
292                 engineResult.setAttribute(OLEConstants.OLE_ORDER_RECORD, oleOrderRecord);
293                 List rulesEvaluatedList = new ArrayList();
294                 String ruleEvaluated = "ISBN Validation"+ " : " + "true";
295                 rulesEvaluatedList.add(ruleEvaluated);
296                 oleOrderRecord.addMessageToMap("rulesEvaluated", rulesEvaluatedList);
297                 oleOrderRecord.addMessageToMap("isValidBFN","false");
298                 getEngineResults().add(engineResult);
299 
300             }
301         }
302         else if(records.size()<ediOrder.getLineItemOrder().size()){
303             for(int i=records.size();i<ediOrder.getLineItemOrder().size();i++){
304                 OleOrderRecord oleOrderRecord=new OleOrderRecord();
305                 oleOrderRecord.setAgendaName(ingestRecord.getAgendaName());
306                 oleOrderRecord.setOleOriginalBibRecordFileName(ingestRecord.getOriginalMarcFileName());
307                 oleOrderRecord.setOriginalEDIFileName(ingestRecord.getOriginalEdiFileName());
308                 oleOrderRecord.setOriginalRecord(null);
309                 oleOrderRecord.setDescription(ingestRecord.getAgendaDescription());
310                 oleOrderRecord.setOriginalEdi(ediOrder);
311                 oleOrderRecord.setOleBibRecord(new OleBibRecord());
312                 OleTxRecord oleTxRecord = getOleTxRecord(ediOrder.getLineItemOrder().get(i), ediOrder, profileAttributeBos);
313                 oleOrderRecord.setOleTxRecord(oleTxRecord);
314                 oleOrderRecord.addMessageToMap("isValidRecord",false);
315                 oleOrderRecord.addMessageToMap("isBadControlField",false);
316                 Facts.Builder factBuilder = Facts.Builder.create();
317                 EngineResults engineResult=new EngineResultsImpl();
318                 engineResult.setAttribute(OLEConstants.OLE_ORDER_RECORD, oleOrderRecord);
319                 List rulesEvaluatedList = new ArrayList();
320                 String ruleEvaluated = "ISBN Validation"+ " : " + "true";
321                 rulesEvaluatedList.add(ruleEvaluated);
322                 oleOrderRecord.addMessageToMap("rulesEvaluated", rulesEvaluatedList);
323                 oleOrderRecord.addMessageToMap("isValidBFN","false");
324                 getEngineResults().add(engineResult);
325 
326             }
327         }
328 
329        boolean all_records_failure_falg=true;
330 
331         List<EngineResults> engineResults = getEngineResults();
332         for (Iterator<EngineResults> iterator = engineResults.iterator(); iterator.hasNext(); ) {
333             EngineResults results = iterator.next();
334             OleOrderRecord oleOrderRecord = (OleOrderRecord) results.getAttribute(OLEConstants.OLE_ORDER_RECORD);
335 
336             if("true".equals((oleOrderRecord.getMessageMap().get("isValidRecord")).toString()) &&
337                     "true".equals((oleOrderRecord.getMessageMap().get("isValidBFN")).toString()) &&
338                     "false".equals((((List)oleOrderRecord.getMessageMap().get("rulesEvaluated")).get(0)).toString().split(":")[1].trim()))  {
339                 all_records_failure_falg=false;
340                 break;
341             }
342         }
343 
344      //} else {
345 //        EngineResultsImpl exceptionResult = new EngineResultsImpl();
346 //        exceptionResult.setAttribute(OLEConstants.OLE_ORDER_RECORD, null);
347 //        engineResults.add(exceptionResult);
348         // }
349 
350         return all_records_failure_falg;
351     }
352 
353     public String getParameter(String name){
354         ParameterKey parameterKey = ParameterKey.create(OLEConstants.APPL_ID,OLEConstants.SELECT_NMSPC,OLEConstants.SELECT_CMPNT,name);
355         Parameter parameter = CoreServiceApiServiceLocator.getParameterRepositoryService().getParameter(parameterKey);
356         return parameter!=null?parameter.getValue():null;
357     }
358     /**
359      *  This method checks the size of marc record  and edi record, if it is equal it will return true otherwise return false.
360      * @param ediOrder
361      * @param records
362      * @return   boolean
363      */
364     private boolean isNumMarcMatchingNumEdiRecords(EDIOrder ediOrder, List<BibliographicRecord> records) {
365         return records.size() == ediOrder.getLineItemOrder().size();
366     }
367 
368     /**
369      *  This method returns Vendor Profile code based on profileAttributeBo.
370      * @param profileAttributeBo
371      * @return   attributeValue.
372      */
373     private String getVendorProfileCode(List<ProfileAttributeBo> profileAttributeBo) {
374         for (Iterator<ProfileAttributeBo> iterator = profileAttributeBo.iterator(); iterator.hasNext(); ) {
375             ProfileAttributeBo attributeBo = iterator.next();
376             if (attributeBo.getAttributeName().equals(OLEConstants.VENDOR_PROFILE_CODE)) {
377                 return attributeBo.getAttributeValue();
378             }
379         }
380         return null;
381     }
382 
383 
384     /**
385      *  This method gets the OverlayOption based on agendaName.
386      * @param agendaName
387      * @return  matching
388      */
389     public List<OverlayOption> getOverlayOption(String agendaName) {
390         HashMap map = new HashMap();
391         map.put("agenda_name", agendaName);
392         List<OverlayOption> matching = (List<OverlayOption>) getBusinessObjectService().findMatching(OverlayOption.class, map);
393         return matching;
394     }
395 
396     /**
397      *  This method gets the ProfileAttributeBos based on agendaName.
398      * @param agendaName
399      * @return  matching
400      */
401     public List<ProfileAttributeBo> getProfileAttributeBos(String agendaName) {
402         HashMap map = new HashMap();
403         map.put("agenda_name", agendaName);
404         List<ProfileAttributeBo> matching = (List<ProfileAttributeBo>) getBusinessObjectService().findMatching(ProfileAttributeBo.class, map);
405         return matching;
406     }
407     /**
408      * This method gets the oleTxRecord based on lineItemOrder,ediOrder.
409      * @param ediOrder
410      * @param bibliographicRecord
411      * @param profileAttributeBos
412      * @return  oleTxRecord
413      */
414     private OleTxRecord getMatchingTxRecord(EDIOrder ediOrder, BibliographicRecord bibliographicRecord, List<ProfileAttributeBo> profileAttributeBos) throws Exception {
415         LineItemOrderMatcherForBib lineItemOrderMatcherForBib = new LineItemOrderMatcherForBib();
416         LineItemOrder lineItemOrder = lineItemOrderMatcherForBib.getLineItemOrder(ediOrder.getLineItemOrder(), bibliographicRecord, getVendorProfileCode(profileAttributeBos));
417         OleTxRecord oleTxRecord = OleTxRecordBuilder.getInstance().build(lineItemOrder, profileAttributeBos, ediOrder);
418         return oleTxRecord;
419     }
420 
421     private OleTxRecord getOleTxRecord(LineItemOrder lineItemOrder,EDIOrder ediOrder,List<ProfileAttributeBo> profileAttributeBos) throws Exception {
422         LineItemOrderMatcherForBib lineItemOrderMatcherForBib = new LineItemOrderMatcherForBib();
423         OleTxRecord oleTxRecord = OleTxRecordBuilder.getInstance().build(lineItemOrder, profileAttributeBos, ediOrder);
424         return oleTxRecord;
425     }
426 
427     private boolean isValidBFN(EDIOrder ediOrder, BibliographicRecord bibliographicRecord, List<ProfileAttributeBo> profileAttributeBos) throws Exception {
428         LineItemOrderMatcherForBib lineItemOrderMatcherForBib = new LineItemOrderMatcherForBib();
429         LineItemOrder lineItemOrder = lineItemOrderMatcherForBib.getLineItemOrder(ediOrder.getLineItemOrder(), bibliographicRecord, getVendorProfileCode(profileAttributeBos));
430         String bfn=null;
431         if(lineItemOrder!=null){
432             Map<String, String> accountInfo = OleTxRecordBuilder.getInstance().getAccountInfo(lineItemOrder);
433             bfn = accountInfo!=null?"1":null;
434         }
435         if(bfn!=null)
436             return  true;
437         return false;
438     }
439 
440 
441     //accountInfo.get(OLEIngestConstant.BFN)
442     /**
443      *  Gets the instance of businessObjectService.
444      *  if businessObjectService is null it will create a new instance else it will return existing businessObjectService.
445      * @return  businessObjectService
446      */
447     private BusinessObjectService getBusinessObjectService() {
448         if (null == businessObjectService) {
449             businessObjectService = KRADServiceLocator.getBusinessObjectService();
450         }
451         return businessObjectService;
452     }
453 
454     /**
455      *  This method returns selector map contains OLE code  and contextName.
456      * @param contextName
457      * @return  selector
458      */
459     protected Map<String, String> getSelectionContext(String contextName) {
460         Map<String, String> selector = new HashMap<String, String>();
461         selector.put(NAMESPACE_CODE_SELECTOR, "OLE");
462         selector.put(NAME_SELECTOR, contextName);
463         return selector;
464     }
465 
466     /**
467      *   This method returns selector map contains agendaName
468      * @param agendaName
469      * @return  selector
470      */
471     protected Map<String, String> getAgendaContext(String agendaName) {
472         Map<String, String> selector = new HashMap<String, String>();
473         selector.put(NAME_SELECTOR, agendaName);
474         return selector;
475     }
476 
477     private Map<String, String> getvendorLineItemReferenceNumber(EDIOrder ediOrder){
478         Map<String, String> referenceNumberMap = new HashMap<String, String>();
479         //List<LineItemOrder> lineItemOrders = new ArrayList<LineItemOrder>();
480         for(LineItemOrder lineItemOrder : ediOrder.getLineItemOrder()){
481             for(BuyerReferenceInformation buyerReferenceInformation : lineItemOrder.getBuyerReferenceInformation()){
482                 for(BuyerLineItemReference buyerLineItemReference : buyerReferenceInformation.getBuyerLineItemReference()){
483                     referenceNumberMap.put(buyerLineItemReference.getBuyersOrderLine(),buyerLineItemReference.getOrderLineNumber());
484                 }
485             }
486         }
487         return referenceNumberMap;
488     }
489 
490     public abstract String preProcessMarc(String marcFileContent);
491 
492     public abstract String preProcessEDI(String ediFileContent);
493 
494     public abstract void postProcess();
495 
496 }