001 package org.kuali.ole.service; 002 003 import org.apache.commons.io.FileUtils; 004 import org.apache.log4j.Logger; 005 import org.kuali.ole.OLEConstants; 006 import org.kuali.ole.PropertyUtil; 007 import org.kuali.ole.deliver.loan.bo.OleLoanDocument; 008 import org.kuali.ole.ingest.FileUtil; 009 import org.kuali.ole.ingest.OlePatronRecordHandler; 010 import org.kuali.ole.ingest.OlePatronXMLSchemaValidator; 011 import org.kuali.ole.ingest.pojo.*; 012 import org.kuali.ole.patron.api.OlePatronDefinition; 013 import org.kuali.ole.patron.bo.*; 014 import org.kuali.ole.patron.constant.OLEPatronConstant; 015 import org.kuali.rice.kim.impl.identity.address.EntityAddressBo; 016 import org.kuali.rice.kim.impl.identity.address.EntityAddressTypeBo; 017 import org.kuali.rice.kim.impl.identity.email.EntityEmailBo; 018 import org.kuali.rice.kim.impl.identity.email.EntityEmailTypeBo; 019 import org.kuali.rice.kim.impl.identity.entity.EntityBo; 020 import org.kuali.rice.kim.impl.identity.name.EntityNameBo; 021 import org.kuali.rice.kim.impl.identity.name.EntityNameTypeBo; 022 import org.kuali.rice.kim.impl.identity.phone.EntityPhoneBo; 023 import org.kuali.rice.kim.impl.identity.phone.EntityPhoneTypeBo; 024 import org.kuali.rice.krad.service.BusinessObjectService; 025 import org.kuali.rice.krad.service.KRADServiceLocator; 026 import org.kuali.rice.location.impl.country.CountryBo; 027 import org.kuali.rice.location.impl.state.StateBo; 028 import org.xml.sax.SAXException; 029 030 import java.io.File; 031 import java.io.IOException; 032 import java.net.URISyntaxException; 033 import java.net.URL; 034 import java.util.*; 035 036 /** 037 * OlePatronConverterService generates list of patron to perform ole patron operation. 038 */ 039 public class OlePatronConverterService { 040 041 private static final Logger LOG = Logger.getLogger(OlePatronConverterService.class); 042 043 private BusinessObjectService businessObjectService; 044 private OlePatronRecordHandler olePatronRecordHandler; 045 private OlePatronService olePatronService; 046 int deletePatronCount = 0; 047 048 /** 049 * Gets the value of olePatronService which is of type OlePatronService 050 * @return olePatronService(OlePatronService) 051 */ 052 public OlePatronService getOlePatronService() { 053 return this.olePatronService; 054 } 055 056 /** 057 * Sets the value for olePatronService which is of type OlePatronService 058 * @param olePatronService(OlePatronService) 059 */ 060 public void setOlePatronService(OlePatronService olePatronService) { 061 this.olePatronService = olePatronService; 062 } 063 064 /** 065 * This method will get the values from the ingested xml file, check the entity id and addUnmatchedPatron (from screen) . 066 * @param fileContent 067 * @param addUnMatchedPatronFlag 068 * @param fileName 069 * @param olePatronIngestSummaryRecord 070 * @return list of OlePatronDocument 071 * @throws java.io.IOException 072 * @throws java.net.URISyntaxException 073 */ 074 public List<OlePatronDocument> persistPatronFromFileContent(String fileContent, boolean addUnMatchedPatronFlag, boolean deletePatron, String fileName,OlePatronIngestSummaryRecord olePatronIngestSummaryRecord) throws IOException, URISyntaxException { 075 List<OlePatronDocument> savedOlePatronDocuments = new ArrayList<OlePatronDocument>(); 076 OlePatronGroup olePatronGroup = new OlePatronGroup(); 077 OlePatronGroup patron = getOlePatronRecordHandler().buildPatronFromFileContent(fileContent); 078 List<OlePatron> createPatronList = new ArrayList<OlePatron>(); 079 List<OlePatron> updatePatronList = new ArrayList<OlePatron>(); 080 List<OlePatron> rejectedPatronList = new ArrayList<OlePatron>(); 081 List<OlePatron> failedPatronList = new ArrayList<OlePatron>(); 082 List<OlePatron> deletePatronList = new ArrayList<OlePatron>(); 083 int patronTotCount = patron.getPatronGroup().size(); 084 085 for (int i = 0; i < patron.getPatronGroup().size(); i++) { 086 if (patron.getPatronGroup().get(i).getPatronID() != null && !"".equals(patron.getPatronGroup().get(i).getPatronID())) { 087 if (isPatronExist(patron.getPatronGroup().get(i).getPatronID())) { 088 089 if(deletePatron) { 090 091 deletePatronList.add(patron.getPatronGroup().get(i)); 092 } 093 updatePatronList.add(patron.getPatronGroup().get(i)); 094 095 } else { 096 if (addUnMatchedPatronFlag) { 097 createPatronList.add(patron.getPatronGroup().get(i)); 098 } else { 099 rejectedPatronList.add(patron.getPatronGroup().get(i)); 100 } 101 } 102 } else { 103 String patronId = ""; 104 if (addUnMatchedPatronFlag) { 105 patronId = KRADServiceLocator.getSequenceAccessorService().getNextAvailableSequenceNumber("KRIM_ENTITY_ID_S").toString(); 106 patron.getPatronGroup().get(i).setPatronID(patronId); 107 createPatronList.add(patron.getPatronGroup().get(i)); 108 } else { 109 rejectedPatronList.add(patron.getPatronGroup().get(i)); 110 } 111 } 112 } 113 if(deletePatronList.size() > 0) { 114 deletePatronDocument(deletePatronList); 115 } 116 if (createPatronList.size() > 0) { 117 savedOlePatronDocuments.addAll(createOlePatronDocument(createPatronList,failedPatronList)); 118 olePatronIngestSummaryRecord.setPatronCreateCount(createPatronList.size()); 119 createPatronList.clear(); 120 } 121 if (updatePatronList.size() > 0) { 122 savedOlePatronDocuments.addAll(updateOlePatronDocument(updatePatronList,failedPatronList)); 123 olePatronIngestSummaryRecord.setPatronUpdateCount(updatePatronList.size()-deletePatronCount); 124 updatePatronList.clear(); 125 } 126 if (rejectedPatronList.size() > 0) { 127 olePatronIngestSummaryRecord.setPatronRejectCount(rejectedPatronList.size()); 128 rejectedPatronList.clear(); 129 } 130 if (failedPatronList.size()>0) { 131 olePatronIngestSummaryRecord.setPatronFailedCount(failedPatronList.size()); 132 } 133 olePatronIngestSummaryRecord.setPatronTotCount(patronTotCount); 134 olePatronIngestSummaryRecord.setPatronDeleteCount(deletePatronCount); 135 //deletePatronCount = 0; 136 olePatronIngestSummaryRecord.setFileName(fileName); 137 getBusinessObjectService().save(olePatronIngestSummaryRecord); 138 if (failedPatronList.size()>0) { 139 olePatronGroup.setPatronGroup(failedPatronList); 140 String patronXML = getOlePatronRecordHandler().toXML(failedPatronList); 141 saveFailureRecordsForAttachment(patronXML,olePatronIngestSummaryRecord.getOlePatronSummaryId()); 142 failedPatronList.clear(); 143 } 144 return savedOlePatronDocuments; 145 } 146 147 /** 148 * This method is for getting the uploaded process message 149 * @param olePatronIngestSummaryRecord 150 * @return message as a string 151 */ 152 public String getUploadProcessMessage(OlePatronIngestSummaryRecord olePatronIngestSummaryRecord){ 153 154 String uploadProcessMessage = OLEConstants.PATRON_RECORD_SUCCESS+" Total record : "+olePatronIngestSummaryRecord.getPatronTotCount()+ 155 ", Created record : "+olePatronIngestSummaryRecord.getPatronCreateCount()+ 156 ", Updated record : "+olePatronIngestSummaryRecord.getPatronUpdateCount()+ 157 ", Rejected record : "+olePatronIngestSummaryRecord.getPatronRejectCount()+ 158 ", Failed record : "+olePatronIngestSummaryRecord.getPatronFailedCount()+ 159 ", Deleted record : "+olePatronIngestSummaryRecord.getPatronDeleteCount(); 160 return uploadProcessMessage; 161 } 162 163 /** 164 * This method will check the entity id from the database , whether it is existing or not. 165 * @param patronId 166 * @return a boolean flag 167 */ 168 public boolean isPatronExist(String patronId) { 169 boolean flag = false; 170 if (getPatron(patronId) != null) { 171 flag = true; 172 } else { 173 flag = false; 174 } 175 return flag; 176 } 177 178 /** 179 * This method will get the entity id from the EntityBo Object 180 * @param patronId 181 * @return EntityBo object 182 */ 183 private EntityBo getPatron(String patronId) { 184 Map<String, Object> criteria = new HashMap<String, Object>(4); 185 criteria.put(OLEConstants.OlePatron.ENTITY_BO_ID, patronId); 186 187 return getBusinessObjectService().findByPrimaryKey(EntityBo.class, criteria); 188 } 189 190 /** 191 * This method is for creating a OlePatronDocument 192 * @param createPatronList 193 * @param failedPatronList 194 * @return list of OlePatronDocument 195 */ 196 public List<OlePatronDocument> createOlePatronDocument(List<OlePatron> createPatronList,List<OlePatron> failedPatronList) { 197 List<OlePatronDocument> newPatrons = new ArrayList<OlePatronDocument>(); 198 OlePatronDocument olePatronDocument = new OlePatronDocument(); 199 OlePatron olePatron; 200 int createPatron = createPatronList.size(); 201 for (int i = 0; i < createPatronList.size(); i++) { 202 boolean patronCreateFlag = true; 203 olePatron = new OlePatron(); 204 olePatron = createPatronList.get(i); 205 EntityBo kimEntity = new EntityBo(); 206 kimEntity.setId(olePatron.getPatronID()); 207 olePatronDocument.setEntity(kimEntity); 208 olePatronDocument.setBarcode(olePatron.getBarcode()); 209 olePatronDocument.setExpirationDate(olePatron.getExpirationDate()); 210 olePatronDocument.setCourtesyNotice(olePatron.getPatronLevelPolicies().isReceivesCourtesyNotice()); 211 olePatronDocument.setDeliveryPrivilege(olePatron.getPatronLevelPolicies().isHasDeliveryPrivilege()); 212 olePatronDocument.setGeneralBlock(olePatron.getPatronLevelPolicies().isGenerallyBlocked()); 213 olePatronDocument.setPagingPrivilege(olePatron.getPatronLevelPolicies().isHasPagingPrivilege()); 214 patronCreateFlag &= persistPatronNames(olePatron, olePatronDocument); 215 if(patronCreateFlag) 216 patronCreateFlag &= persistPatronBorrowerType(olePatron, olePatronDocument); 217 if(patronCreateFlag) 218 patronCreateFlag &= persistPatronPostalAddress(olePatron, olePatronDocument); 219 if(patronCreateFlag) 220 patronCreateFlag &= persistPatronPhoneNumbers(olePatron, olePatronDocument); 221 if(patronCreateFlag) 222 patronCreateFlag &= persistPatronEmailAddress(olePatron, olePatronDocument); 223 if(patronCreateFlag) 224 patronCreateFlag &= persistPatronNotes(olePatron, olePatronDocument); 225 olePatronDocument.setActiveIndicator(olePatron.isActive()); 226 if (patronCreateFlag) { 227 OlePatronDefinition patron = getOlePatronService().createPatron(OlePatronDocument.to(olePatronDocument)); 228 newPatrons.add(OlePatronDocument.from(patron)); 229 } else { 230 failedPatronList.add(olePatron); 231 } 232 } 233 createPatronList.removeAll(failedPatronList); 234 return newPatrons; 235 } 236 237 /** 238 * This method is for updating the OlePatronDocument 239 * @param updatePatronList 240 * @param failedPatronList 241 * @return list of OlePatronDocument 242 */ 243 public List<OlePatronDocument> updateOlePatronDocument(List<OlePatron> updatePatronList,List<OlePatron> failedPatronList) { 244 List<OlePatronDocument> updatedPatrons = new ArrayList<OlePatronDocument>(); 245 OlePatronDocument olePatronDocument = new OlePatronDocument(); 246 OlePatron olePatron; 247 Map criteria = new HashMap<String, String>(); 248 for (int i = 0; i < updatePatronList.size(); i++) { 249 olePatron = updatePatronList.get(i); 250 criteria.put(OLEConstants.OlePatron.PATRON_ID, olePatron.getPatronID()); 251 List<OlePatronDocument> patronImpls = (List<OlePatronDocument>) getBusinessObjectService().findMatching(OlePatronDocument.class, criteria); 252 OlePatronDocument patronDocument; 253 for (Iterator<OlePatronDocument> patronIterator = patronImpls.iterator(); patronIterator.hasNext(); ) { 254 boolean patronUpdateFlag = true; 255 patronDocument = patronIterator.next(); 256 olePatronDocument.setOlePatronId(patronDocument.getOlePatronId()); 257 olePatronDocument.setBarcode(olePatron.getBarcode()); 258 olePatronDocument.setExpirationDate(olePatron.getExpirationDate()); 259 olePatronDocument.setCourtesyNotice(olePatron.getPatronLevelPolicies().isReceivesCourtesyNotice()); 260 olePatronDocument.setDeliveryPrivilege(olePatron.getPatronLevelPolicies().isHasDeliveryPrivilege()); 261 olePatronDocument.setGeneralBlock(olePatron.getPatronLevelPolicies().isGenerallyBlocked()); 262 olePatronDocument.setPagingPrivilege(olePatron.getPatronLevelPolicies().isHasPagingPrivilege()); 263 olePatronDocument.setActiveIndicator(olePatron.isActive()); 264 olePatronDocument.setObjectId(patronDocument.getObjectId()); 265 olePatronDocument.setVersionNumber(patronDocument.getVersionNumber()); 266 267 patronUpdateFlag &= persistPatronNames(olePatron, olePatronDocument); 268 if(patronUpdateFlag) 269 patronUpdateFlag &= persistPatronBorrowerType(olePatron, olePatronDocument); 270 if(patronUpdateFlag) 271 patronUpdateFlag &= persistPatronPostalAddress(olePatron, olePatronDocument); 272 if(patronUpdateFlag) 273 patronUpdateFlag &= persistPatronPhoneNumbers(olePatron, olePatronDocument); 274 if(patronUpdateFlag) 275 patronUpdateFlag &= persistPatronEmailAddress(olePatron, olePatronDocument); 276 if(patronUpdateFlag) 277 patronUpdateFlag &= persistPatronNotes(olePatron, olePatronDocument); 278 if (patronUpdateFlag) { 279 OlePatronDefinition olePatronDefinition = getOlePatronService().updatePatron(OlePatronDocument.to(olePatronDocument)); 280 updatedPatrons.add(OlePatronDocument.from(olePatronDefinition)); 281 } else { 282 failedPatronList.add(olePatron); 283 } 284 } 285 } 286 updatePatronList.removeAll(failedPatronList); 287 return updatedPatrons; 288 } 289 290 public void deletePatronDocument(List<OlePatron> deletePatronList) { 291 292 OlePatronDocument olePatronDocument = new OlePatronDocument(); 293 OlePatron olePatron; 294 Map criteria = new HashMap<String, String>(); 295 for (int i = 0; i < deletePatronList.size(); i++) { 296 olePatron = deletePatronList.get(i); 297 criteria.put(OLEConstants.OlePatron.PATRON_ID, olePatron.getPatronID()); 298 List<OlePatronDocument> patronImpls = (List<OlePatronDocument>) getBusinessObjectService().findMatching(OlePatronDocument.class, criteria); 299 for (Iterator<OlePatronDocument> patronIterator = patronImpls.iterator(); patronIterator.hasNext(); ) { 300 olePatronDocument = patronIterator.next(); 301 List<OleLoanDocument> oleLoanDocuments = olePatronDocument.getOleLoanDocuments(); 302 if(oleLoanDocuments.size() == 0 && (olePatronDocument.getExpirationDate().before(new Date()))) { 303 KRADServiceLocator.getBusinessObjectService().delete(patronImpls); 304 deletePatronCount =+ 1; 305 } 306 } 307 308 } 309 } 310 /** 311 * This method is for getting the object of OlePatronGroup from the ingested xml (used for testCase). 312 * @param fileContent 313 * @return OlePatronGroup object 314 * @throws java.net.URISyntaxException 315 * @throws java.io.IOException 316 */ 317 public OlePatronGroup buildPatronFromFileContent(String fileContent) throws URISyntaxException, IOException { 318 return getOlePatronRecordHandler().buildPatronFromFileContent(fileContent); 319 } 320 321 /** 322 * This method will get the resource file(xml file) and convert object from the xml file (used for testCase) 323 * @param fileName 324 * @return OlePatronGroup object (converted from xml) 325 * @throws java.net.URISyntaxException 326 * @throws java.io.IOException 327 * @throws org.xml.sax.SAXException 328 */ 329 public OlePatronGroup buildPatron(String fileName) throws URISyntaxException, IOException, SAXException { 330 URL resource = getClass().getResource(fileName); 331 File file = new File(resource.toURI()); 332 String fileContent = new FileUtil().readFile(file); 333 if (validProfileXML(fileContent)) { 334 return getOlePatronRecordHandler().buildPatronFromFileContent(fileContent); 335 } 336 return null; 337 } 338 339 /** 340 * This method will validate the ingested xml against schema. 341 * @param fileContent 342 * @return boolean 343 * @throws java.io.IOException 344 * @throws org.xml.sax.SAXException 345 */ 346 private boolean validProfileXML(String fileContent) throws IOException, SAXException { 347 return new OlePatronXMLSchemaValidator().validateContentsAgainstSchema(null); 348 } 349 350 /** 351 * Persist phone numbers of the patron and set the values from the patron telephone numbers to entity phone bo object 352 * @param olePatron 353 * @param olePatronDocument 354 * @return boolean flag, to check whether the patron phone number type is valid . 355 */ 356 private boolean persistPatronPhoneNumbers(OlePatron olePatron, OlePatronDocument olePatronDocument) { 357 boolean phoneFlag = false; 358 List<EntityPhoneBo> phones = new ArrayList<EntityPhoneBo>(); 359 EntityPhoneBo entityPhoneBo; 360 List<OlePatronTelePhoneNumber> olePatronTelePhoneNumbers = olePatron.getTelephoneNumbers(); 361 for (Iterator<OlePatronTelePhoneNumber> iterator = olePatronTelePhoneNumbers.iterator(); iterator.hasNext(); ) { 362 OlePatronTelePhoneNumber phoneNumbers = iterator.next(); 363 entityPhoneBo = new EntityPhoneBo(); 364 entityPhoneBo.setPhoneNumber(phoneNumbers.getTelephoneNumber()); 365 Map criteria = new HashMap<String, String>(); 366 Map criteriaCountry = new HashMap<String, String>(); 367 if(!phoneNumbers.getTelephoneNumberType().equals("")){ 368 criteria.put(OLEConstants.CODE, phoneNumbers.getTelephoneNumberType()); 369 List<EntityPhoneTypeBo> entityType = (List<EntityPhoneTypeBo>) getBusinessObjectService().findMatching(EntityPhoneTypeBo.class, criteria); 370 if (entityType.size()> 0) { 371 entityPhoneBo.setPhoneType(entityType.get(0)); 372 entityPhoneBo.setPhoneTypeCode(entityType.get(0).getCode()); 373 if(phoneNumbers.getExtension() != null && !phoneNumbers.getExtension().equals("")){ 374 entityPhoneBo.setExtensionNumber(phoneNumbers.getExtension()); 375 } 376 if(phoneNumbers.getCountry() != null && !phoneNumbers.getCountry().equals("")){ 377 criteriaCountry.put(OLEConstants.CODE, phoneNumbers.getCountry()); 378 List<CountryBo> countryList = (List<CountryBo>) getBusinessObjectService().findMatching(CountryBo.class, criteriaCountry); 379 if (countryList.size()>0) { 380 entityPhoneBo.setCountryCode(phoneNumbers.getCountry()); 381 } else { 382 olePatron.setErrorMessage(OLEPatronConstant.COUNTRY_PHONE_ERROR); 383 return false; 384 } 385 } 386 entityPhoneBo.setActive(phoneNumbers.isActive()); 387 entityPhoneBo.setDefaultValue(phoneNumbers.isDefaults()); 388 phones.add(entityPhoneBo); 389 boolean defaultValue = checkPhoneMultipleDefault(phones); 390 if(defaultValue){ 391 olePatronDocument.setPhones(phones); 392 phoneFlag = true; 393 } else { 394 olePatron.setErrorMessage(OLEPatronConstant.PHONE_DEFAULT_VALUE_ERROR); 395 phoneFlag = false; 396 } 397 } else{ 398 olePatron.setErrorMessage(OLEPatronConstant.PHONETYPE_ERROR); 399 } 400 } else{ 401 olePatron.setErrorMessage(OLEPatronConstant.PHONETYPE_BLANK_ERROR); 402 } 403 } 404 return phoneFlag; 405 } 406 407 /** 408 * Persist email Address of the patron and set the values from the patron email address to entity email bo object 409 * @param olePatron 410 * @param olePatronDocument 411 * @return boolean flag ,to check whether the patron email type is valid . 412 */ 413 private boolean persistPatronEmailAddress(OlePatron olePatron, OlePatronDocument olePatronDocument) { 414 boolean emailFlag = false; 415 List<EntityEmailBo> email = new ArrayList<EntityEmailBo>(); 416 EntityEmailBo entityEmailBo; 417 List<OlePatronEmailAddress> olePatronEmailAddresses = olePatron.getEmailAddresses(); 418 for (Iterator<OlePatronEmailAddress> iterator = olePatronEmailAddresses.iterator(); iterator.hasNext(); ) { 419 OlePatronEmailAddress emailAddresses = iterator.next(); 420 entityEmailBo = new EntityEmailBo(); 421 entityEmailBo.setEmailAddress(emailAddresses.getEmailAddress()); 422 if(!emailAddresses.getEmailAddressType().equals("")){ 423 Map criteria = new HashMap<String, String>(); 424 criteria.put(OLEConstants.CODE, emailAddresses.getEmailAddressType()); 425 List<EntityEmailTypeBo> entityType = (List<EntityEmailTypeBo>) getBusinessObjectService().findMatching(EntityEmailTypeBo.class, criteria); 426 if (entityType.size()>0) { 427 entityEmailBo.setEmailType(entityType.get(0)); 428 entityEmailBo.setEmailTypeCode(entityType.get(0).getCode()); 429 entityEmailBo.setActive(emailAddresses.isActive()); 430 entityEmailBo.setDefaultValue(emailAddresses.isDefaults()); 431 email.add(entityEmailBo); 432 boolean defaultValue = checkEmailMultipleDefault(email); 433 if(defaultValue){ 434 olePatronDocument.setEmails(email); 435 emailFlag = true; 436 } else { 437 olePatron.setErrorMessage(OLEPatronConstant.EMAIL_DEFAULT_VALUE_ERROR); 438 emailFlag = false; 439 } 440 } else{ 441 olePatron.setErrorMessage(OLEPatronConstant.EMAILTYPE_ERROR); 442 } 443 } else{ 444 olePatron.setErrorMessage(OLEPatronConstant.EMAILTYPE_BLANK_ERROR); 445 } 446 } 447 return emailFlag; 448 } 449 450 /** 451 * Persist postal address of the patron and set the values from the patron postal address to entity address bo object 452 * @param olePatron 453 * @param olePatronDocument 454 * @return boolean flag , to check whether the patron address type is valid . 455 */ 456 private boolean persistPatronPostalAddress(OlePatron olePatron, OlePatronDocument olePatronDocument) { 457 boolean addressFlag = false; 458 List<EntityAddressBo> address = new ArrayList<EntityAddressBo>(); 459 EntityAddressBo entityAddressBo; 460 List<OlePatronPostalAddress> olePatronPostalAddresses = olePatron.getPostalAddresses(); 461 for (Iterator<OlePatronPostalAddress> iterator = olePatronPostalAddresses.iterator(); iterator.hasNext(); ) { 462 OlePatronPostalAddress postalAddresses = iterator.next(); 463 entityAddressBo = new EntityAddressBo(); 464 List<OleAddressLine> addressLineList = postalAddresses.getAddressLinesList(); 465 if(addressLineList.size()>0){ 466 for(int i=0;i<addressLineList.size();i++){ 467 if(i==0){ 468 entityAddressBo.setLine1(addressLineList.get(i).getAddressLine()); 469 } 470 if(i==1){ 471 entityAddressBo.setLine2(addressLineList.get(i).getAddressLine()); 472 } 473 if(i==2){ 474 entityAddressBo.setLine3(addressLineList.get(i).getAddressLine()); 475 } 476 } 477 } 478 Map criteria = new HashMap<String, String>(); 479 Map criteriaState = new HashMap<String, String>(); 480 Map criteriaCountry = new HashMap<String, String>(); 481 if(postalAddresses.getPostalAddressType() != null && !postalAddresses.getPostalAddressType().equals("")){ 482 criteria.put(OLEConstants.CODE, postalAddresses.getPostalAddressType()); 483 List<EntityAddressTypeBo> entityType = (List<EntityAddressTypeBo>) getBusinessObjectService().findMatching(EntityAddressTypeBo.class, criteria); 484 if (entityType.size()>0) { 485 entityAddressBo.setAddressType(entityType.get(0)); 486 entityAddressBo.setAddressTypeCode(entityType.get(0).getCode()); 487 } else{ 488 olePatron.setErrorMessage(OLEPatronConstant.ADDRESSTYPE_ERROR); 489 return false; 490 } 491 } else{ 492 olePatron.setErrorMessage(OLEPatronConstant.ADDRESS_TYPE_BLANK_ERROR); 493 return false; 494 } 495 if(postalAddresses.getStateProvince() != null && !postalAddresses.getStateProvince().equals("")){ 496 criteriaState.put(OLEConstants.CODE, postalAddresses.getStateProvince()); 497 List<StateBo> stateBoList = (List<StateBo>) getBusinessObjectService().findMatching(StateBo.class, criteriaState); 498 if (stateBoList.size()>0) { 499 entityAddressBo.setStateProvinceCode(postalAddresses.getStateProvince()); 500 } else { 501 olePatron.setErrorMessage(OLEPatronConstant.STATE_ERROR); 502 return false; 503 } 504 } 505 if(postalAddresses.getCountry() != null && !postalAddresses.getCountry().equals("")){ 506 criteriaCountry.put(OLEConstants.CODE, postalAddresses.getCountry()); 507 List<CountryBo> countryList = (List<CountryBo>) getBusinessObjectService().findMatching(CountryBo.class, criteriaCountry); 508 if (countryList.size()>0) { 509 entityAddressBo.setCountryCode(postalAddresses.getCountry()); 510 } else { 511 olePatron.setErrorMessage(OLEPatronConstant.COUNTRY_ADDRESS_ERROR); 512 return false; 513 } 514 } 515 entityAddressBo.setCity(postalAddresses.getCity()); 516 entityAddressBo.setPostalCode(postalAddresses.getPostalCode()); 517 entityAddressBo.setActive(postalAddresses.isActive()); 518 entityAddressBo.setDefaultValue(postalAddresses.isDefaults()); 519 address.add(entityAddressBo); 520 boolean defaultValue = checkAddressMultipleDefault(address); 521 if(defaultValue){ 522 olePatronDocument.setAddresses(address); 523 addressFlag = true; 524 } else { 525 olePatron.setErrorMessage(OLEPatronConstant.ADDRESS_DEFAULT_VALUE_ERROR); 526 addressFlag = false; 527 } 528 } 529 return addressFlag; 530 } 531 532 /** 533 * Persist names of the patron and set the values from the patron names to entity name bo object 534 * @param olePatron 535 * @param olePatronDocument 536 * @return boolean flag , to check whether the patron name type is valid . 537 */ 538 private boolean persistPatronNames(OlePatron olePatron, OlePatronDocument olePatronDocument) { 539 boolean nameFlag = false; 540 EntityNameBo names = new EntityNameBo(); 541 Map criteria = new HashMap<String, String>(); 542 criteria.put(OLEConstants.NAME, OLEConstants.PREFERRED); 543 List<EntityNameTypeBo> entityType = (List<EntityNameTypeBo>) getBusinessObjectService().findMatching(EntityNameTypeBo.class, criteria); 544 if (entityType.size()>0 ) { 545 names.setNameType(entityType.get(0)); 546 names.setNameCode(entityType.get(0).getCode()); 547 if (!olePatron.getName().getFirst().equals("") && !olePatron.getName().getSurname().equals("")) { 548 names.setFirstName(olePatron.getName().getFirst()); 549 names.setLastName(olePatron.getName().getSurname()); 550 if(olePatron.getName().getTitle()!= null && !olePatron.getName().getTitle().equals("")){ 551 names.setNamePrefix(olePatron.getName().getTitle()); 552 } 553 if(olePatron.getName().getSuffix()!= null && !olePatron.getName().getSuffix().equals("")){ 554 names.setNameSuffix(olePatron.getName().getSuffix()); 555 } 556 names.setActive(true); 557 names.setDefaultValue(true); 558 olePatronDocument.setName(names); 559 nameFlag = true; 560 }else{ 561 if(olePatron.getName().getFirst().equals("")){ 562 olePatron.setErrorMessage(OLEPatronConstant.FIRSTNAME_BLANK_ERROR); 563 } 564 if(olePatron.getName().getSurname().equals("")){ 565 olePatron.setErrorMessage(OLEPatronConstant.SURNAME_BLANK_ERROR); 566 } 567 } 568 } 569 return nameFlag; 570 } 571 572 /** 573 * Persist notes of the patron and set the values from the patron notes ( converted object from xml) to Patron notes bo object 574 * @param olePatron 575 * @param olePatronDocument 576 * @return boolean flag , to check whether the patron note type is valid . 577 */ 578 private boolean persistPatronNotes(OlePatron olePatron, OlePatronDocument olePatronDocument) { 579 boolean notesFlag = false; 580 List<OlePatronNotes> olePatronNotesList = new ArrayList<OlePatronNotes>(); 581 OlePatronNotes olePatronNotes; 582 List<OlePatronNote> olePatronNoteList = olePatron.getNotes(); 583 for (Iterator<OlePatronNote> iterator = olePatronNoteList.iterator(); iterator.hasNext(); ) { 584 OlePatronNote olePatronNote = iterator.next(); 585 olePatronNotes = new OlePatronNotes(); 586 if (olePatronNote.getNoteType() != null && !"".equals(olePatronNote.getNoteType())) { 587 Map criteria = new HashMap<String, String>(); 588 criteria.put(OLEConstants.PATRON_NOTE_TYPE_CODE, olePatronNote.getNoteType()); 589 List<OlePatronNoteType> olePatronNoteTypes = (List<OlePatronNoteType>) getBusinessObjectService().findMatching(OlePatronNoteType.class, criteria); 590 if (olePatronNoteTypes.size()>0) { 591 olePatronNotes.setOlePatronNoteType(olePatronNoteTypes.get(0)); 592 olePatronNotes.setPatronNoteTypeId(olePatronNoteTypes.get(0).getPatronNoteTypeId()); 593 olePatronNotes.setPatronNoteText(olePatronNote.getNote()); 594 olePatronNotes.setActive(olePatronNote.isActive()); 595 olePatronNotesList.add(olePatronNotes); 596 olePatronDocument.setNotes(olePatronNotesList); 597 notesFlag = true; 598 } else { 599 olePatron.setErrorMessage(OLEPatronConstant.NOTETYPE_ERROR); 600 } 601 602 } else{ 603 olePatron.setErrorMessage(OLEPatronConstant.NOTETYPE_BLANK_ERROR); 604 } 605 } 606 if (olePatronNoteList.isEmpty()) { 607 notesFlag = true; 608 } 609 return notesFlag; 610 } 611 612 /** 613 * This method is for persisting the borrower Type of the patron 614 * @param olePatron 615 * @param olePatronDocument 616 * @return boolean flag, to check whether the borrower Type is valid. 617 */ 618 private boolean persistPatronBorrowerType(OlePatron olePatron, OlePatronDocument olePatronDocument) { 619 boolean borrowerTypeFlag = false; 620 String borroweTypeId; 621 String borrowerTypeName; 622 borrowerTypeName = olePatron.getBorrowerType(); 623 if(borrowerTypeName!=null && !borrowerTypeName.equals("")){ 624 HashMap<String, String> map = new HashMap<String, String>(); 625 map.put(OLEConstants.BORROWER_TYPE_CODE, borrowerTypeName); 626 List<OleBorrowerType> borrowerTypes = (List<OleBorrowerType>) getBusinessObjectService().findMatching(OleBorrowerType.class, map); 627 if (borrowerTypes.size() > 0) { 628 borroweTypeId = borrowerTypes.get(0).getBorrowerTypeId(); 629 olePatronDocument.setBorrowerType(borroweTypeId); 630 olePatronDocument.setOleBorrowerType(borrowerTypes.get(0)); 631 borrowerTypeFlag = true; 632 }else{ 633 olePatron.setErrorMessage(OLEPatronConstant.BORROWERTYPE_ERROR); 634 } 635 }else{ 636 olePatron.setErrorMessage(OLEPatronConstant.BORROWERTYPE_BLANK_ERROR); 637 } 638 return borrowerTypeFlag; 639 } 640 641 /** 642 * This method is for saving the failed records in a separate location of home directory. 643 * @param patronXML 644 * @param patronReportId 645 */ 646 private void saveFailureRecordsForAttachment(String patronXML,String patronReportId) { 647 OlePatronIngestSummaryRecord olePatronIngestSummaryRecord ; 648 try { 649 HashMap<String, String> map = new HashMap<String, String>(); 650 String directory = PropertyUtil.getPropertyUtil().getProperty(OLEConstants.STAGING_DIRECTORY)+ 651 OLEConstants.PATRON_FILE_DIRECTORY; 652 String homeDirectory = System.getProperty(OLEConstants.USER_HOME_DIRECTORY); 653 int reportId = Integer.parseInt(patronReportId); 654 File file = new File(homeDirectory+directory); 655 if (file.isDirectory()) { 656 file = new File(homeDirectory+directory+reportId+OLEConstants.FAILED_PATRON_RECORD_NAME); 657 file.createNewFile(); 658 FileUtils.writeStringToFile(file, patronXML); 659 } else { 660 file.mkdirs(); 661 if (file.isDirectory()) { 662 File newFile = new File(file,reportId+OLEConstants.FAILED_PATRON_RECORD_NAME); 663 newFile.createNewFile(); 664 FileUtils.writeStringToFile(newFile,patronXML); 665 } 666 } 667 } catch (IOException e) { 668 e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 669 } 670 } 671 672 /** 673 * This method is for checking the entity phone has multiple defaults 674 * @param phoneBoList 675 * @return true , if the entity phone has only one default in a single patron record, else false 676 */ 677 protected boolean checkPhoneMultipleDefault (List<EntityPhoneBo> phoneBoList) { 678 679 boolean valid = true; 680 int defaultCounter = 0; 681 for(EntityPhoneBo entityPhoneBo:phoneBoList){ 682 if(entityPhoneBo.isDefaultValue()){ 683 defaultCounter++; 684 } else { 685 defaultCounter--; 686 } 687 } 688 if(defaultCounter > 1 || defaultCounter < 0){ 689 valid = false; 690 } 691 return valid; 692 } 693 694 /** 695 * This method is for checking the entity address has multiple defaults 696 * @param addrBoList 697 * @return true , if the entity address has only one default in a single patron record, else false 698 */ 699 protected boolean checkAddressMultipleDefault (List<EntityAddressBo> addrBoList) { 700 701 boolean valid = true; 702 int defaultCounter = 0; 703 for(EntityAddressBo entityAddressBo:addrBoList){ 704 if(entityAddressBo.isDefaultValue()){ 705 defaultCounter++; 706 } else { 707 defaultCounter--; 708 } 709 } 710 if(defaultCounter > 1 || defaultCounter < 0){ 711 valid = false; 712 } 713 return valid; 714 } 715 716 /** 717 * This method is for checking the entity email address has multiple defaults 718 * @param emailBoList 719 * @return true , if the entity email address has only one default in a single patron record, else false 720 */ 721 protected boolean checkEmailMultipleDefault (List<EntityEmailBo> emailBoList) { 722 723 boolean valid = true; 724 int defaultCounter = 0; 725 for(EntityEmailBo entityEmailBo:emailBoList){ 726 if(entityEmailBo.isDefaultValue()){ 727 defaultCounter++; 728 }else { 729 defaultCounter--; 730 } 731 } 732 if(defaultCounter > 1 || defaultCounter < 0){ 733 valid = false; 734 } 735 return valid; 736 } 737 738 /** 739 * Gets the instance of BusinessObjectService 740 * @return businessObjectService(BusinessObjectService) 741 */ 742 private BusinessObjectService getBusinessObjectService() { 743 if (null == businessObjectService) { 744 businessObjectService = KRADServiceLocator.getBusinessObjectService(); 745 } 746 return businessObjectService; 747 } 748 749 /** 750 * Gets the instance of OlePatronRecordHandler 751 * @return olePatronRecordHandler(OlePatronRecordHandler) 752 */ 753 public OlePatronRecordHandler getOlePatronRecordHandler() { 754 if (null == olePatronRecordHandler) { 755 olePatronRecordHandler = new OlePatronRecordHandler(); 756 } 757 return olePatronRecordHandler; 758 } 759 760 /** 761 * Sets the olePatronRecordHandler which is of type OlePatronRecordHandler 762 * @param olePatronRecordHandler(OlePatronRecordHandler) 763 */ 764 public void setOlePatronRecordHandler(OlePatronRecordHandler olePatronRecordHandler) { 765 this.olePatronRecordHandler = olePatronRecordHandler; 766 } 767 }