1   package org.kuali.ole.service.impl;
2   
3   import org.kuali.ole.DataCarrierService;
4   import org.kuali.ole.OLEConstants;
5   import org.kuali.ole.docstore.common.document.content.bib.marc.DataField;
6   import org.kuali.ole.docstore.common.document.content.bib.marc.SubField;
7   import org.kuali.ole.ingest.pojo.OleDataField;
8   import org.kuali.ole.ingest.pojo.OverlayOption;
9   import org.kuali.ole.select.bo.*;
10  import org.kuali.ole.service.OverlayRetrivalService;
11  import org.kuali.ole.util.StringUtil;
12  import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
13  import org.kuali.rice.krad.service.BusinessObjectService;
14  import org.kuali.rice.krad.service.KRADServiceLocator;
15  
16  import java.util.ArrayList;
17  import java.util.HashMap;
18  import java.util.List;
19  import java.util.Map;
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  public class OverlayRetrivalServiceImpl implements OverlayRetrivalService {
30  
31      private DataCarrierService dataCarrierService;
32  
33      @Override
34      public List<OleGloballyProtectedField> getGloballyProtectedFields() throws Exception {
35          BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
36          List<OleGloballyProtectedField> oleGloballyProtectedFieldList = (List<OleGloballyProtectedField>) businessObjectService.findAll(OleGloballyProtectedField.class);
37          return oleGloballyProtectedFieldList;
38      }
39  
40      @Override
41      public List<String> getGloballyProtectedFieldsList()throws Exception{
42          List fieldList = new ArrayList<String>();
43          StringBuffer fields = null;
44          String tagField = null;
45          String firstIndicator = null;
46          String secondIndicator = null;
47          String subField = null;
48          List<OleGloballyProtectedField> protectedFieldList = getGloballyProtectedFields();
49          for(OleGloballyProtectedField oleGloballyProtectedField : protectedFieldList){
50              tagField = oleGloballyProtectedField.getTag();
51              firstIndicator = oleGloballyProtectedField.getFirstIndicator()!=null? StringUtil.trimHashNullValues(oleGloballyProtectedField.getFirstIndicator()):OLEConstants.DELIMITER_HASH;
52              secondIndicator = oleGloballyProtectedField.getSecondIndicator()!=null? StringUtil.trimHashNullValues(oleGloballyProtectedField.getSecondIndicator()):OLEConstants.DELIMITER_HASH;
53              subField = oleGloballyProtectedField.getSubField()!=null?OLEConstants.DELIMITER_DOLLAR+oleGloballyProtectedField.getSubField():OLEConstants.DELIMITER_DOLLAR+"*";
54              fields = new StringBuffer();
55              fields = fields.append(tagField).append(firstIndicator).append(secondIndicator).append(subField);
56              fieldList.add(fields.toString());
57          }
58  
59          return fieldList;
60      }
61  
62      @Override
63      public List getGloballyProtectedFieldsModificationList() throws Exception {
64          List fieldList = new ArrayList<String>();
65          StringBuffer fields = null;
66          String tagField = null;
67          String firstIndicator = null;
68          String secondIndicator = null;
69          String subField = null;
70          Map<String, String> criteria = new HashMap<String, String>();
71          criteria.put("modifyFlag","false");
72          BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
73          List<OleGloballyProtectedField> protectedFieldList = (List<OleGloballyProtectedField>)businessObjectService.findMatching(OleGloballyProtectedField.class,criteria);
74          for(OleGloballyProtectedField oleGloballyProtectedField : protectedFieldList){
75              
76                  tagField = oleGloballyProtectedField.getTag();
77                  firstIndicator = oleGloballyProtectedField.getFirstIndicator()!=null?"-"+ oleGloballyProtectedField.getFirstIndicator():"-";
78                  secondIndicator = oleGloballyProtectedField.getSecondIndicator()!=null?"-"+ oleGloballyProtectedField.getSecondIndicator():"-";
79                  subField = oleGloballyProtectedField.getSubField()!=null?"-"+ oleGloballyProtectedField.getSubField():"-";
80                  fields = new StringBuffer();
81                  fields = fields.append(tagField).append(firstIndicator).append(secondIndicator).append(subField);
82                  fieldList.add(fields.toString());
83              
84          }
85  
86          return fieldList;
87      }
88  
89      @Override
90      public OverlayOption getAddOverlayOptionWithWildCardSearch(List<DataField> newDatafields, List<OverlayOption> overlayOptionList) throws Exception {
91          OverlayOption addOverlayOption = null;
92          for(OverlayOption overlayOption : overlayOptionList){
93              if(overlayOption.getName().equals(OLEConstants.OVERLAY_OPTION_ADD)){
94                  overlayOption = checkWildCard(newDatafields, overlayOption);
95                  addOverlayOption = overlayOption;
96              }
97          }
98          return addOverlayOption;
99      }
100 
101     @Override
102     public OverlayOption getAddOverlayOption(List<OverlayOption> overlayOptionList)throws Exception{
103         OverlayOption addOverlayOption = null;
104         for(OverlayOption overlayOption : overlayOptionList){
105             if(overlayOption.getName().equals(OLEConstants.OVERLAY_OPTION_ADD)){
106                 addOverlayOption = overlayOption;
107             }
108         }
109         return addOverlayOption;
110     }
111 
112     @Override
113     public OverlayOption getDeleteOverlayOption(List<OverlayOption> overlayOptionList)throws Exception{
114         OverlayOption deleteOverlayOption = null;
115         for(OverlayOption overlayOption : overlayOptionList){
116             if(overlayOption.getName().equals(OLEConstants.OVERLAY_OPTION_DELETE)){
117                 deleteOverlayOption = overlayOption;
118             }
119         }
120         return deleteOverlayOption;
121     }
122 
123     @Override
124     public OverlayOption getDeleteOverlayOptionWithWildCardSearch(List<DataField> newDatafields, List<OverlayOption> overlayOptionList) {
125         OverlayOption deleteOverlayOption = null;
126         for(OverlayOption overlayOption : overlayOptionList){
127             if(overlayOption.getName().equals(OLEConstants.OVERLAY_OPTION_DELETE)){
128                 overlayOption = checkWildCard(newDatafields, overlayOption);
129                 deleteOverlayOption = overlayOption;
130             }
131         }
132         return deleteOverlayOption;
133     }
134 
135     @Override
136     public OverlayOption getUpdateOverlayOption(List<OverlayOption> overlayOptionList)throws Exception{
137         OverlayOption updateOverlayOption = null;
138         for(OverlayOption overlayOption : overlayOptionList){
139             if(overlayOption.getName().equals(OLEConstants.OVERLAY_OPTION_UPDATE)){
140                 updateOverlayOption = overlayOption;
141             }
142         }
143         return updateOverlayOption;
144     }
145 
146     @Override
147     public OverlayOption getUpdateOverlayOptionWithWildCardSearch(List<DataField> newDatafields, List<OverlayOption> overlayOptionList) throws Exception {
148         OverlayOption updateOverlayOption = null;
149         for(OverlayOption overlayOption : overlayOptionList){
150             if(overlayOption.getName().equals(OLEConstants.OVERLAY_OPTION_UPDATE)){
151                 overlayOption = checkWildCard(newDatafields, overlayOption);
152                 updateOverlayOption = overlayOption;
153             }
154         }
155         return updateOverlayOption;
156     }
157 
158     
159 
160 
161 
162 
163 
164 
165 
166 
167 
168 
169 
170 
171 
172 
173 
174 
175 
176 
177 
178 
179 
180 
181     
182 
183 
184 
185 
186 
187 
188 
189 
190 
191 
192 
193 
194 
195 
196 
197 
198 
199 
200 
201 
202     public OverlayOption checkWildCard(List<DataField> newDatafieldList, OverlayOption overlayOption){
203         List<OleDataField> overlayOptionOleDataFields = overlayOption.getOleDataFields();
204         OverlayOption newOverlayOption = new OverlayOption();
205         newOverlayOption.setId(overlayOption.getId());
206         newOverlayOption.setAgendaName(overlayOption.getAgendaName());
207         newOverlayOption.setName(overlayOption.getName());
208         List<OleDataField> oleDataFields = new ArrayList<OleDataField>();
209         for(OleDataField oleDataField : overlayOptionOleDataFields){
210             String tag = oleDataField.getDataFieldTag();
211             boolean isSubFieldCodeStar = "*".equalsIgnoreCase(oleDataField.getSubFieldCode());
212             if(tag.contains("*")){
213                 char[] dataFieldSplit = oleDataField.getDataFieldTag().toCharArray();
214                 for(DataField dataFields : newDatafieldList){
215                     boolean isStartsWithDataField = dataFields.getTag().startsWith(String.valueOf(dataFieldSplit[0]));
216                     if(isStartsWithDataField){
217                         for(SubField subField : dataFields.getSubFields()){
218                             if(isSubFieldCodeStar){
219                                 OleDataField newOleDataFieldSubFieldCodeStar = new OleDataField();
220                                 newOleDataFieldSubFieldCodeStar.setId(oleDataField.getId());
221                                 newOleDataFieldSubFieldCodeStar.setOverlayOptionId(oleDataField.getOverlayOptionId());
222                                 newOleDataFieldSubFieldCodeStar.setAgendaName(oleDataField.getAgendaName());
223                                 newOleDataFieldSubFieldCodeStar.setDataFieldTag(dataFields.getTag());
224                                 newOleDataFieldSubFieldCodeStar.setDataFieldInd1(oleDataField.getDataFieldInd1());
225                                 newOleDataFieldSubFieldCodeStar.setDataFieldInd2(oleDataField.getDataFieldInd2());
226                                 newOleDataFieldSubFieldCodeStar.setSubFieldCode(subField.getCode());
227                                 oleDataFields.add(newOleDataFieldSubFieldCodeStar);
228                             }
229                             else if(oleDataField.getSubFieldCode().equalsIgnoreCase(subField.getCode())){
230                                 OleDataField newOleDataField = new OleDataField();
231                                 newOleDataField.setId(oleDataField.getId());
232                                 newOleDataField.setOverlayOptionId(oleDataField.getOverlayOptionId());
233                                 newOleDataField.setAgendaName(oleDataField.getAgendaName());
234                                 newOleDataField.setDataFieldTag(dataFields.getTag());
235                                 newOleDataField.setDataFieldInd1(oleDataField.getDataFieldInd1());
236                                 newOleDataField.setDataFieldInd2(oleDataField.getDataFieldInd2());
237                                 newOleDataField.setSubFieldCode(subField.getCode());
238                                 oleDataFields.add(newOleDataField);
239                             }
240                         }
241                     }
242                 }
243             }
244             else if(!tag.contains("*") && oleDataField.getSubFieldCode().equalsIgnoreCase("*")){
245                 for(DataField dataFields : newDatafieldList){
246                     if(tag.equalsIgnoreCase(dataFields.getTag())){
247                         for(SubField subField : dataFields.getSubFields()){
248                             OleDataField newOleDataFieldSubFieldCodeStar = new OleDataField();
249                             newOleDataFieldSubFieldCodeStar.setId(oleDataField.getId());
250                             newOleDataFieldSubFieldCodeStar.setOverlayOptionId(oleDataField.getOverlayOptionId());
251                             newOleDataFieldSubFieldCodeStar.setAgendaName(oleDataField.getAgendaName());
252                             newOleDataFieldSubFieldCodeStar.setDataFieldTag(dataFields.getTag());
253                             newOleDataFieldSubFieldCodeStar.setDataFieldInd1(oleDataField.getDataFieldInd1());
254                             newOleDataFieldSubFieldCodeStar.setDataFieldInd2(oleDataField.getDataFieldInd2());
255                             newOleDataFieldSubFieldCodeStar.setSubFieldCode(subField.getCode());
256                             oleDataFields.add(newOleDataFieldSubFieldCodeStar);
257                         }
258                     }
259                 }
260             }
261             else {
262                 oleDataFields.add(oleDataField);
263             }
264         }
265         newOverlayOption.setOleDataFields(oleDataFields);
266         return newOverlayOption;
267     }
268     @Override
269     public OleCallNumber getCallNumberRecord(String inputValue)throws Exception{
270         BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
271         Map<String,String> criteriaMap = new HashMap<String,String>();
272         criteriaMap.put(OLEConstants.OVERLAY_INPUTVALUE,inputValue);
273         List<OleCallNumber> oleCallNumberList = (List<OleCallNumber>) businessObjectService.findMatching(OleCallNumber.class,criteriaMap);
274         if(oleCallNumberList!=null && oleCallNumberList.size()>0){
275             return oleCallNumberList.iterator().next();
276         }else{
277             return null;
278         }
279     }
280 
281     public OleCallNumber getCallNumberRecord(HashMap<String,String> criteriaMap)throws Exception{
282         BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
283         List<OleCallNumber> oleCallNumberList = (List<OleCallNumber>) businessObjectService.findMatching(OleCallNumber.class,criteriaMap);
284         if(oleCallNumberList!=null && oleCallNumberList.size()>0){
285             return oleCallNumberList.iterator().next();
286         }else{
287             return null;
288         }
289     }
290     @Override
291     public OleCode getOleCodeRecord(String inputValue)throws Exception{
292         BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
293         Map<String,String> criteriaMap = new HashMap<String,String>();
294         criteriaMap.put(OLEConstants.OVERLAY_INPUTVALUE,inputValue);
295         List<OleCode> oleCodeList = (List<OleCode>) businessObjectService.findMatching(OleCode.class,criteriaMap);
296         if(oleCodeList!=null && oleCodeList.size()>0){
297             return oleCodeList.iterator().next();
298         }else{
299             return null;
300         }
301     }
302     @Override
303     public OleCode getOleCodeRecord(HashMap<String,String> criteriaMap)throws Exception{
304         BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
305         List<OleCode> oleCodeList = (List<OleCode>) businessObjectService.findMatching(OleCode.class,criteriaMap);
306         if(oleCodeList!=null && oleCodeList.size()>0){
307             return oleCodeList.iterator().next();
308         }else{
309             return null;
310         }
311     }
312     @Override
313     public OleBudgetCode getOleBudgetCode(String inputValue)throws Exception{
314         BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
315         Map<String,String> criteriaMap = new HashMap<String,String>();
316         criteriaMap.put(OLEConstants.OVERLAY_INPUTVALUE,inputValue);
317         List<OleBudgetCode> oleBudgetCodeList = (List<OleBudgetCode>) businessObjectService.findMatching(OleBudgetCode.class,criteriaMap);
318         if(oleBudgetCodeList!=null && oleBudgetCodeList.size()>0){
319             return oleBudgetCodeList.iterator().next();
320         }else{
321             return null;
322         }
323     }
324     @Override
325     public OleBudgetCode getOleBudgetCode(HashMap<String,String> criteriaMap)throws Exception{
326         BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
327         List<OleBudgetCode> oleBudgetCodeList = (List<OleBudgetCode>) businessObjectService.findMatching(OleBudgetCode.class,criteriaMap);
328         if(oleBudgetCodeList!=null && oleBudgetCodeList.size()>0){
329             return oleBudgetCodeList.iterator().next();
330         }else{
331             return null;
332         }
333     }
334 
335     @Override
336     public OleVendorAccountInfo getAccountObjectForVendorRefNo(HashMap<String,String> criteriaMap)throws Exception{
337         BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
338         List<OleVendorAccountInfo> oleVendorAccountInfoList = (List<OleVendorAccountInfo>) businessObjectService.findMatching(OleVendorAccountInfo.class,criteriaMap);
339         if(oleVendorAccountInfoList!=null && oleVendorAccountInfoList.size()>0){
340             return oleVendorAccountInfoList.iterator().next();
341         }else{
342             return null;
343         }
344 
345 
346 
347     }
348 
349     
350 
351 
352 
353     protected DataCarrierService getDataCarrierService() {
354         if(dataCarrierService == null){
355             return GlobalResourceLoader.getService(OLEConstants.DATA_CARRIER_SERVICE);
356         }
357         return dataCarrierService;
358     }
359 
360 }