001/* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 1.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl1.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.batchingest; 017 018import java.util.ArrayList; 019import java.util.HashMap; 020import java.util.Iterator; 021import java.util.List; 022import java.util.Map; 023import java.util.StringTokenizer; 024 025import javax.xml.parsers.SAXParser; 026import javax.xml.parsers.SAXParserFactory; 027 028import org.kuali.ole.select.businessobject.BibInfoBean; 029import org.kuali.ole.select.service.impl.OleBatchIngestServiceImpl; 030import org.xml.sax.Attributes; 031import org.xml.sax.SAXException; 032import org.xml.sax.helpers.DefaultHandler; 033 034public class MarcDataFormatTransformer { 035 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(MarcDataFormatTransformer.class); 036 037 private BibInfoBean bibInfoBean; 038 StringBuilder defaultValues = null; 039 String requestorSourceType = ""; 040 // Map<String,String> vendorCodeMap = new HashMap<String,String>(); 041 Map<String,String> deliverToName = new HashMap<String,String>(); 042 Map<String, Map<String, String>> fundCodesForMarcXMLTags = new HashMap<String, Map<String, String>>(); 043 044 public MarcDataFormatTransformer() { 045 046 // vendorCodeMap.put("YBP", "12106-0"); 047 //vendorCodeMap.put("L&H", "12106-0"); 048 049 deliverToName.put("JLL", "ole-jolevinson"); 050 deliverToName.put("CM", "ole-mschramm"); 051 deliverToName.put("AK", "ole-gkrau"); 052 deliverToName.put("RB", "ole-mbelton"); 053 054 HashMap<String, String> map1 = new HashMap<String, String>(); 055 map1.put("2947430", "7112"); 056 fundCodesForMarcXMLTags.put("43", map1); 057 HashMap<String, String> map2 = new HashMap<String, String>(); 058 map2.put("2947485", "7112"); 059 fundCodesForMarcXMLTags.put("13", map2); 060 HashMap<String, String> map3 = new HashMap<String, String>(); 061 map3.put("2947483", "7112"); 062 fundCodesForMarcXMLTags.put("74", map3); 063 HashMap<String, String> map4 = new HashMap<String, String>(); 064 map4.put("2947499", "7112"); 065 fundCodesForMarcXMLTags.put("98", map4); 066 HashMap<String, String> map5 = new HashMap<String, String>(); 067 map5.put("2947494", "7112"); 068 fundCodesForMarcXMLTags.put("65", map5); 069 HashMap<String, String> map6 = new HashMap<String, String>(); 070 map6.put("2947486", "7112"); 071 fundCodesForMarcXMLTags.put("19", map6); 072 HashMap<String, String> map7 = new HashMap<String, String>(); 073 map7.put("2947493", "7112"); 074 fundCodesForMarcXMLTags.put("64", map7); 075 HashMap<String, String> map8 = new HashMap<String, String>(); 076 map8.put("2947496", "7112"); 077 fundCodesForMarcXMLTags.put("93", map8); 078 HashMap<String, String> map9 = new HashMap<String, String>(); 079 map9.put("2947497", "7112"); 080 fundCodesForMarcXMLTags.put("94", map9); 081 HashMap<String, String> map10 = new HashMap<String, String>(); 082 map10.put("2947488", "7112"); 083 fundCodesForMarcXMLTags.put("35", map10); 084 HashMap<String, String> map11 = new HashMap<String, String>(); 085 map11.put("2947498", "7112"); 086 fundCodesForMarcXMLTags.put("95", map11); 087 HashMap<String, String> map12 = new HashMap<String, String>(); 088 map12.put("2947487", "7112"); 089 fundCodesForMarcXMLTags.put("21", map12); 090 HashMap<String, String> map13 = new HashMap<String, String>(); 091 map13.put("2947489", "7112"); 092 fundCodesForMarcXMLTags.put("37", map13); 093 HashMap<String, String> map14 = new HashMap<String, String>(); 094 map14.put("2947482", "7112"); 095 fundCodesForMarcXMLTags.put("27", map14); 096 HashMap<String, String> map15 = new HashMap<String, String>(); 097 map15.put("2947490", "7112"); 098 fundCodesForMarcXMLTags.put("50", map15); 099 HashMap<String, String> map16 = new HashMap<String, String>(); 100 map16.put("2947492", "7112"); 101 fundCodesForMarcXMLTags.put("53", map16); 102 HashMap<String, String> map17 = new HashMap<String, String>(); 103 map17.put("2947491", "7112"); 104 fundCodesForMarcXMLTags.put("51", map17); 105 HashMap<String, String> map18 = new HashMap<String, String>(); 106 map18.put("2947495", "7112"); 107 fundCodesForMarcXMLTags.put("86", map18); 108 } 109 110 111 public void parseDefaultValues() throws Exception{ 112 113 114 115 String path = getClass().getClassLoader().getResource("KualiETLConfig.xml").toString(); 116 SAXParserFactory factory = SAXParserFactory.newInstance(); 117 SAXParser saxParser = factory.newSAXParser(); 118 DefaultHandler handler = new DefaultHandler() { 119 120 boolean deliveryCampusCode = false; 121 // boolean deliverytoName = false; 122 boolean deliveryBuildingCode = false; 123 boolean deliveryBuildingLine1Address = false; 124 boolean deliveryBuildingRoomNumber = false; 125 boolean deliveryCityName = false; 126 boolean deliveryStateCode = false; 127 boolean deliveryPostalCode = false; 128 boolean deliveryCountryCode = false; 129 boolean purchaseOrderTransmissionMethodCode = false; 130 boolean purchaseOrderCostSourceCode = false; 131 boolean requestorPersonName = false; 132 boolean requestorPersonEmailAddress = false; 133 boolean requestorPersonPhoneNumber = false; 134 boolean requisitionDescription = false; 135 boolean financialYear = false; 136 boolean fundingSource = false; 137 boolean uom = false; 138 boolean chart = false; 139 // boolean objectCode = false; 140 boolean percent = false; 141 boolean chartOfAccountsCode = false; 142 boolean organizationCode = false; 143 boolean documentFundingSourceCode = false; 144 boolean useTaxIndicator = false; 145 boolean deliveryBuildingOtherIndicator = false; 146 boolean organizationAutomaticPurchaseOrderLimit = false; 147 boolean purchaseOrderAutomaticIndicator = false; 148 boolean receivingDocumentRequiredIndicator = false; 149 boolean paymentRequestPositiveApprovalIndicator = false; 150 boolean itemTypeCode = false; 151 boolean billingName = false; 152 boolean billingLine1Address = false; 153 boolean billingCityName = false; 154 boolean billingStateCode = false; 155 boolean billingPostalCode = false; 156 boolean billingCountryCode = false; 157 boolean billingPhoneNumber = false; 158 boolean vendorcustomernumber = false; 159 boolean requestorsource = false; 160 // boolean ybp = false; 161 162 //Event Handlers 163 public void startElement(String uri, String localName, String qName, 164 Attributes attributes) throws SAXException { 165 //reset 166 167 if (qName.equalsIgnoreCase("CONFIG")) { 168 bibInfoBean = new BibInfoBean(); 169 defaultValues = new StringBuilder(); 170 } 171 if (qName.equalsIgnoreCase("DELIVERYCAMPUSCODE")) { 172 bibInfoBean = new BibInfoBean(); 173 defaultValues = new StringBuilder(); 174 deliveryCampusCode = true; 175 }/*else if (qName.equalsIgnoreCase("DELIVERYTONAME")) { 176 defaultValues = new StringBuilder(); 177 deliverytoName = true; 178 }*/else if (qName.equalsIgnoreCase("DELIVERYBUILDINGCODE")) { 179 defaultValues = new StringBuilder(); 180 deliveryBuildingCode = true; 181 }else if (qName.equalsIgnoreCase("DELIVERYBUILDINGLINE1ADDRESS")) { 182 defaultValues = new StringBuilder(); 183 deliveryBuildingLine1Address = true; 184 }else if (qName.equalsIgnoreCase("DELIVERYBUILDINGROOMNUMBER")) { 185 defaultValues = new StringBuilder(); 186 deliveryBuildingRoomNumber = true; 187 }else if (qName.equalsIgnoreCase("DELIVERYCITYNAME")) { 188 defaultValues = new StringBuilder(); 189 deliveryCityName = true; 190 }else if (qName.equalsIgnoreCase("DELIVERYSTATECODE")) { 191 defaultValues = new StringBuilder(); 192 deliveryStateCode = true; 193 }else if (qName.equalsIgnoreCase("DELIVERYPOSTALCODE")) { 194 defaultValues = new StringBuilder(); 195 deliveryPostalCode = true; 196 }else if (qName.equalsIgnoreCase("DELIVERYCOUNTRYCODE")) { 197 defaultValues = new StringBuilder(); 198 deliveryCountryCode = true; 199 }else if (qName.equalsIgnoreCase("REQUISITIONDESCRIPTION")) { 200 defaultValues = new StringBuilder(); 201 requisitionDescription = true; 202 }else if (qName.equalsIgnoreCase("FINANCIALYEAR")) { 203 defaultValues = new StringBuilder(); 204 financialYear = true; 205 }else if (qName.equalsIgnoreCase("FUNDINGSOURCE")) { 206 defaultValues = new StringBuilder(); 207 fundingSource = true; 208 }else if (qName.equalsIgnoreCase("PURCHASEORDERTRANSMISSIONMETHODCODE")) { 209 defaultValues = new StringBuilder(); 210 purchaseOrderTransmissionMethodCode = true; 211 }else if (qName.equalsIgnoreCase("PURCHASEORDERCOSTSOURCECODE")) { 212 defaultValues = new StringBuilder(); 213 purchaseOrderCostSourceCode = true; 214 }else if (qName.equalsIgnoreCase("REQUESTORPERSONNAME")) { 215 defaultValues = new StringBuilder(); 216 requestorPersonName = true; 217 }else if (qName.equalsIgnoreCase("REQUESTORPERSONEMAILADDRESS")) { 218 defaultValues = new StringBuilder(); 219 requestorPersonEmailAddress = true; 220 }else if (qName.equalsIgnoreCase("REQUESTORPERSONPHONENUMBER")) { 221 defaultValues = new StringBuilder(); 222 requestorPersonPhoneNumber = true; 223 }else if (qName.equalsIgnoreCase("UOM")) { 224 defaultValues = new StringBuilder(); 225 uom = true; 226 }else if (qName.equalsIgnoreCase("CHART")) { 227 defaultValues = new StringBuilder(); 228 chart = true; 229 }/*else if (qName.equalsIgnoreCase("OBJECTCODE")) { 230 defaultValues = new StringBuilder(); 231 objectCode = true; 232 }*/else if (qName.equalsIgnoreCase("PERCENT")) { 233 defaultValues = new StringBuilder(); 234 percent = true; 235 }else if (qName.equalsIgnoreCase("CHARTOFACCOUNTSCODE")) { 236 defaultValues = new StringBuilder(); 237 chartOfAccountsCode = true; 238 }else if (qName.equalsIgnoreCase("ORGANIZATIONCODE")) { 239 defaultValues = new StringBuilder(); 240 organizationCode = true; 241 }else if (qName.equalsIgnoreCase("DOCUMENTFUNDINGSOURCECODE")) { 242 defaultValues = new StringBuilder(); 243 documentFundingSourceCode = true; 244 }else if (qName.equalsIgnoreCase("USETAXINDICATOR")) { 245 defaultValues = new StringBuilder(); 246 useTaxIndicator = true; 247 }else if (qName.equalsIgnoreCase("DELIVERYBUILDINGOTHERINDICATOR")) { 248 defaultValues = new StringBuilder(); 249 deliveryBuildingOtherIndicator = true; 250 }else if (qName.equalsIgnoreCase("ORGANIZATIONAUTOMATICPURCHASEORDERLIMIT")) { 251 defaultValues = new StringBuilder(); 252 organizationAutomaticPurchaseOrderLimit = true; 253 }else if (qName.equalsIgnoreCase("PURCHASEORDERAUTOMATICINDICATOR")) { 254 defaultValues = new StringBuilder(); 255 purchaseOrderAutomaticIndicator = true; 256 }else if (qName.equalsIgnoreCase("RECEIVINGDOCUMENTREQUIREDINDICATOR")) { 257 defaultValues = new StringBuilder(); 258 receivingDocumentRequiredIndicator = true; 259 }else if (qName.equalsIgnoreCase("PAYMENTREQUESTPOSITIVEAPPROVALINDICATOR")) { 260 defaultValues = new StringBuilder(); 261 paymentRequestPositiveApprovalIndicator = true; 262 }else if (qName.equalsIgnoreCase("ITEMTYPECODE")) { 263 defaultValues = new StringBuilder(); 264 itemTypeCode = true; 265 }else if(qName.equalsIgnoreCase("BILLINGNAME")){ 266 defaultValues = new StringBuilder(); 267 billingName = true; 268 }else if(qName.equalsIgnoreCase("BILLINGLINE1ADDRESS")){ 269 defaultValues = new StringBuilder(); 270 billingLine1Address = true; 271 } else if(qName.equalsIgnoreCase("BILLINGCITYNAME")){ 272 defaultValues = new StringBuilder(); 273 billingCityName = true; 274 }else if(qName.equalsIgnoreCase("BILLINGSTATECODE")){ 275 defaultValues = new StringBuilder(); 276 billingStateCode = true; 277 }else if(qName.equalsIgnoreCase("BILLINGPOSTALCODE")){ 278 defaultValues = new StringBuilder(); 279 billingPostalCode = true; 280 }else if(qName.equalsIgnoreCase("BILLINGCOUNTRYCODE")){ 281 defaultValues = new StringBuilder(); 282 billingCountryCode = true; 283 }else if(qName.equalsIgnoreCase("BILLINGPHONENUMBER")){ 284 defaultValues = new StringBuilder(); 285 billingPhoneNumber = true; 286 }else if(qName.equalsIgnoreCase("VENDORCUSTOMERNUMBER")){ 287 defaultValues = new StringBuilder(); 288 vendorcustomernumber = true; 289 }else if(qName.equalsIgnoreCase("REQUESTORSOURCE")){ 290 defaultValues = new StringBuilder(); 291 requestorsource = true; 292 } 293 294 } 295 296 297 public void endElement(String uri, String localName, 298 String qName) throws SAXException { 299 300 301 if (deliveryCampusCode) { 302 bibInfoBean.setDeliveryCampusCode(defaultValues.toString()); 303 defaultValues = null; 304 deliveryCampusCode = false; 305 }/*else if (deliverytoName) { 306 bibInfoBean.setDeliveryToName(defaultValues.toString()); 307 defaultValues = null; 308 deliverytoName = false; 309 }*/else if (deliveryBuildingCode) { 310 bibInfoBean.setDeliveryBuildingCode(defaultValues.toString()); 311 defaultValues = null; 312 deliveryBuildingCode = false; 313 }else if (deliveryBuildingLine1Address) { 314 bibInfoBean.setDeliveryBuildingLine1Address(defaultValues.toString()); 315 defaultValues = null; 316 deliveryBuildingLine1Address = false; 317 }else if (deliveryBuildingRoomNumber) { 318 bibInfoBean.setDeliveryBuildingRoomNumber(defaultValues.toString()); 319 defaultValues = null; 320 deliveryBuildingRoomNumber = false; 321 }else if (deliveryCityName) { 322 bibInfoBean.setDeliveryCityName(defaultValues.toString()); 323 defaultValues = null; 324 deliveryCityName = false; 325 }else if (deliveryStateCode) { 326 bibInfoBean.setDeliveryStateCode(defaultValues.toString()); 327 defaultValues = null; 328 deliveryStateCode = false; 329 }else if (deliveryPostalCode) { 330 bibInfoBean.setDeliveryPostalCode(defaultValues.toString()); 331 defaultValues = null; 332 deliveryPostalCode = false; 333 }else if (deliveryCountryCode) { 334 bibInfoBean.setDeliveryCountryCode(defaultValues.toString()); 335 defaultValues = null; 336 deliveryCountryCode = false; 337 }else if (purchaseOrderTransmissionMethodCode) { 338 bibInfoBean.setPurchaseOrderTransmissionMethodCode(defaultValues.toString()); 339 defaultValues = null; 340 purchaseOrderTransmissionMethodCode = false; 341 }else if (purchaseOrderCostSourceCode) { 342 bibInfoBean.setPurchaseOrderCostSourceCode(defaultValues.toString()); 343 defaultValues = null; 344 purchaseOrderCostSourceCode = false; 345 }else if (requestorPersonName) { 346 bibInfoBean.setRequestorPersonName(defaultValues.toString()); 347 defaultValues = null; 348 requestorPersonName = false; 349 }else if (requestorPersonEmailAddress) { 350 bibInfoBean.setRequestorPersonEmailAddress(defaultValues.toString()); 351 defaultValues = null; 352 requestorPersonEmailAddress = false; 353 }else if (requestorPersonPhoneNumber) { 354 bibInfoBean.setRequestorPersonPhoneNumber(defaultValues.toString()); 355 defaultValues = null; 356 requestorPersonPhoneNumber = false; 357 }else if (requisitionDescription) { 358 bibInfoBean.setRequisitionDescription(defaultValues.toString()); 359 defaultValues = null; 360 requisitionDescription = false; 361 }else if (financialYear) { 362 bibInfoBean.setFinantialYear(defaultValues.toString()); 363 defaultValues = null; 364 financialYear = false; 365 }else if (fundingSource) { 366 bibInfoBean.setFundingSource(defaultValues.toString()); 367 defaultValues = null; 368 fundingSource = false; 369 } else if (uom) { 370 bibInfoBean.setUom(defaultValues.toString()); 371 defaultValues = null; 372 uom = false; 373 }else if (chart) { 374 bibInfoBean.setChart(defaultValues.toString()); 375 defaultValues = null; 376 chart = false; 377 }/*else if (objectCode) { 378 bibInfoBean.setObjectCode(defaultValues.toString()); 379 defaultValues = null; 380 objectCode = false; 381 }*/else if (percent) { 382 if(defaultValues.toString().length()>0){ 383 bibInfoBean.setPercent(new Long(defaultValues.toString())); 384 percent = false; 385 } 386 defaultValues = null; 387 }else if (chartOfAccountsCode) { 388 bibInfoBean.setChartOfAccountsCode(defaultValues.toString()); 389 defaultValues = null; 390 chartOfAccountsCode = false; 391 }else if (organizationCode) { 392 bibInfoBean.setOrganizationCode(defaultValues.toString()); 393 defaultValues = null; 394 organizationCode = false; 395 }else if (documentFundingSourceCode) { 396 bibInfoBean.setDocumentFundingSourceCode(defaultValues.toString()); 397 defaultValues = null; 398 documentFundingSourceCode = false; 399 }else if (useTaxIndicator) { 400 bibInfoBean.setUseTaxIndicator(defaultValues.toString().equalsIgnoreCase("TRUE") ? true : false); 401 defaultValues = null; 402 useTaxIndicator = false; 403 }else if (deliveryBuildingOtherIndicator) { 404 bibInfoBean.setDeliveryBuildingOtherIndicator(defaultValues.toString().equalsIgnoreCase("TRUE") ? true : false); 405 defaultValues = null; 406 deliveryBuildingOtherIndicator = false; 407 }else if (organizationAutomaticPurchaseOrderLimit) { 408 bibInfoBean.setOrganizationAutomaticPurchaseOrderLimit(defaultValues.toString()); 409 defaultValues = null; 410 organizationAutomaticPurchaseOrderLimit = false; 411 }else if (purchaseOrderAutomaticIndicator) { 412 bibInfoBean.setPurchaseOrderAutomaticIndicator(defaultValues.toString().equalsIgnoreCase("TRUE") ? true : false); 413 defaultValues = null; 414 purchaseOrderAutomaticIndicator = false; 415 }else if (receivingDocumentRequiredIndicator) { 416 bibInfoBean.setReceivingDocumentRequiredIndicator(defaultValues.toString().equalsIgnoreCase("TRUE") ? true : false); 417 defaultValues = null; 418 receivingDocumentRequiredIndicator = false; 419 }else if (paymentRequestPositiveApprovalIndicator) { 420 bibInfoBean.setPaymentRequestPositiveApprovalIndicator(defaultValues.toString().equalsIgnoreCase("TRUE") ? true : false); 421 defaultValues = null; 422 paymentRequestPositiveApprovalIndicator = false; 423 }else if (itemTypeCode) { 424 bibInfoBean.setItemTypeCode(defaultValues.toString()); 425 defaultValues = null; 426 itemTypeCode = false; 427 }else if (billingName) { 428 bibInfoBean.setBillingName(defaultValues.toString()); 429 defaultValues = null; 430 billingName = false; 431 }else if (billingLine1Address) { 432 bibInfoBean.setBillingLine1Address(defaultValues.toString()); 433 defaultValues = null; 434 billingLine1Address = false; 435 }else if (billingCityName) { 436 bibInfoBean.setBillingCityName(defaultValues.toString()); 437 defaultValues = null; 438 billingCityName = false; 439 }else if (billingStateCode) { 440 bibInfoBean.setBillingStateCode(defaultValues.toString()); 441 defaultValues = null; 442 billingStateCode = false; 443 }else if (billingPostalCode) { 444 bibInfoBean.setBillingPostalCode(defaultValues.toString()); 445 defaultValues = null; 446 billingPostalCode = false; 447 }else if (billingCountryCode) { 448 bibInfoBean.setBillingCountryCode(defaultValues.toString()); 449 defaultValues = null; 450 billingCountryCode = false; 451 }else if (billingPhoneNumber) { 452 bibInfoBean.setBillingPhoneNumber(defaultValues.toString()); 453 defaultValues = null; 454 billingPhoneNumber = false; 455 }else if(vendorcustomernumber){ 456 bibInfoBean.setVendorCustomerNumber(defaultValues.toString()); 457 defaultValues = null; 458 vendorcustomernumber = false; 459 }else if(requestorsource){ 460 requestorSourceType = defaultValues.toString(); 461 defaultValues = null; 462 requestorsource = false; 463 } 464 465 } 466 467 public void characters(char ch[], int start, int length) 468 throws SAXException { 469 if(defaultValues != null) 470 defaultValues.append(ch, start, length); 471 } 472 473 };saxParser.parse(path, handler); 474 } 475 476 477 478 public String transformRawDataToXml(String rawData) throws Exception{ 479 StringBuilder xmlString = new StringBuilder(); 480 parseDefaultValues(); 481 boolean rootFlag = false; 482 String urlxsi = "\"http://www.w3.org/2001/XMLSchema-instance\""; 483 String ns = "xsi:noNamespaceSchemaLocation="; 484 String orderType = "firm_fixed_ybp"; // Need to take it from file name. 485 //String requestorSource = requestorSourceType; 486 if ( LOG.isDebugEnabled() ) { 487 LOG.debug("Start Checking the Data"); 488 LOG.debug(rawData); 489 } 490 xmlString.append("<requisitions ordertype='" + orderType + "' requestorsource='"+requestorSourceType+"' xmlns:xsi=" + urlxsi + " " + ns + "\"requisition.xsd\"" + ">\n"); 491 boolean emptyFlag = false; 492 StringTokenizer field = new StringTokenizer(rawData, "="); 493 while (field.hasMoreTokens()) { 494 495 String fieldLine = field.nextToken(); 496 if((fieldLine.trim().length()>0)&&(fieldLine.trim().length()>=4) ){ 497 String fieldCode = fieldLine.substring(0, 4); 498 499 if (fieldCode.contains("LDR")) { 500 if (rootFlag) { 501 try{ 502 if(emptyFlag){ 503 parseDefaultValues(); 504 xmlString = getDefaultValues(xmlString); 505 } 506 }catch(Exception e){ 507 e.printStackTrace(); 508 } 509 if(emptyFlag){ 510 xmlString.append("</requisition>\n"); 511 emptyFlag = false; 512 } 513 } 514 xmlString.append("<requisition>\n"); 515 String leader = fieldLine.substring(fieldCode.length(), fieldLine.length()); 516 xmlString.append("<leader><![CDATA["+leader.trim()+"]]></leader>\n"); 517 emptyFlag = true; 518 rootFlag = true; 519 }else if(fieldCode.contains("008")){ 520 String controlField = fieldLine.substring(fieldCode.length(), fieldLine.length()); 521 xmlString.append("<controlfield><![CDATA["+controlField.trim()+"]]></controlfield>\n"); 522 }else if (fieldCode.contains("020")) { 523 String[] subField = fieldLine.split("\\$"); 524 String isbn = ""; 525 for (int i = 0; i < subField.length; i++) { 526 String subFieldCode = String.valueOf(subField[i].charAt(0)); 527 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 528 isbn = subField[1].substring(1, subField[1].length()); 529 xmlString.append("<ISBN><![CDATA["+isbn.trim()+"]]></ISBN>\n"); 530 emptyFlag = true; 531 } 532 } 533 } else if (fieldCode.contains("100")) { 534 String[] subField = fieldLine.split("\\$"); 535 String author = ""; 536 for (int i = 0; i < subField.length; i++) { 537 String subFieldCode = String.valueOf(subField[i].charAt(0)); 538 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 539 author = subField[1].substring(1, subField[1].length()); 540 xmlString.append("<author><![CDATA["+author.trim()+"]]></author>\n"); 541 emptyFlag = true; 542 } 543 } 544 } else if (fieldCode.contains("245")) { 545 String[] subField = fieldLine.split("\\$"); 546 String title = ""; 547 for (int i = 0; i < subField.length; i++) { 548 String subFieldCode = String.valueOf(subField[i].charAt(0)); 549 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 550 title = subField[1].substring(1, subField[1].length()); 551 xmlString.append("<title><![CDATA["+title.trim()+"]]></title>\n"); 552 emptyFlag = true; 553 } 554 } 555 } else if (fieldCode.contains("250")) { 556 String[] subField = fieldLine.split("\\$"); 557 String edition = ""; 558 for (int i = 0; i < subField.length; i++) { 559 String subFieldCode = String.valueOf(subField[i].charAt(0)); 560 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 561 edition = subField[1].substring(1, subField[1].length()); 562 xmlString.append("<edition><![CDATA["+edition.trim()+"]]></edition>\n"); 563 emptyFlag = true; 564 } 565 } 566 } else if (fieldCode.contains("260")) { 567 String[] subField = fieldLine.split("\\$"); 568 String placeOfPublication = ""; 569 String publisher = ""; 570 String yearOfPublication = ""; 571 xmlString.append("<publicationdetails>\n"); 572 for (int i = 0; i < subField.length; i++) { 573 String subFieldCode = String.valueOf(subField[i].charAt(0)); 574 575 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 576 placeOfPublication = subField[i].substring(1, subField[i].length()); 577 xmlString.append("<placeofpublication><![CDATA["+placeOfPublication.trim()+"]]></placeofpublication>\n"); 578 emptyFlag = true; 579 } 580 581 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("b")) { 582 publisher = subField[i].substring(1, subField[i].length()); 583 xmlString.append("<publisher><![CDATA["+publisher.trim()+"]]></publisher>\n"); 584 emptyFlag = true; 585 } 586 587 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("c")) { 588 yearOfPublication = subField[i].substring(1, subField[i].length()); 589 xmlString.append("<yearofpublication><![CDATA["+yearOfPublication.trim()+"]]></yearofpublication>\n"); 590 emptyFlag = true; 591 } 592 } 593 xmlString.append("</publicationdetails>\n"); 594 } else if (fieldCode.contains("490")) { 595 String[] subField = fieldLine.split("\\$"); 596 for (int i = 0; i < subField.length; i++) { 597 String subFieldCode = String.valueOf(subField[i].charAt(0)); 598 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 599 String series = subField[1].substring(1, subField[1].length()); 600 xmlString.append("<seriesstatement><![CDATA["+series.replaceAll("&", "&").trim()+"]]></seriesstatement>\n"); 601 emptyFlag = true; 602 } 603 } 604 } else if (fieldCode.contains("960")) { 605 String[] subField = fieldLine.split("\\$"); 606 String accountNumber = ""; 607 String location = ""; 608 xmlString.append("<funddetails>\n"); 609 for (int i = 0; i < subField.length; i++) { 610 String subFieldCode = String.valueOf(subField[i].charAt(0)); 611 612 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 613 accountNumber = subField[i].substring(1, subField[i].length()); 614 HashMap<String, String> map = fundCodesForMarcXMLTags.get(accountNumber.trim()) != null?(HashMap<String, String>)fundCodesForMarcXMLTags.get(accountNumber.trim()):null; 615 616 String account=""; 617 String fundCode=""; 618 if(map != null){ 619 for (Iterator key = map.keySet().iterator(); key.hasNext();) { 620 account = (String)key.next(); 621 fundCode = (String)map.get(account); 622 } 623 } 624 625 626 xmlString.append("<accountno>"+account+"</accountno>\n"); 627 xmlString.append("<objectcode>"+fundCode+"</objectcode>\n"); 628 emptyFlag = true; 629 } 630 631 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("h")) { 632 location = subField[i].substring(1, subField[i].length()); 633 xmlString.append("<location><![CDATA["+location.trim()+"]]></location>\n"); 634 emptyFlag = true; 635 } 636 } 637 xmlString.append("</funddetails>\n"); 638 } else if (fieldCode.contains("961")) { 639 String[] subField = fieldLine.split("\\$"); 640 String libraryNote = ""; 641 for (int i = 0; i < subField.length; i++) { 642 String subFieldCode = String.valueOf(subField[i].charAt(0)); 643 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("d")) { 644 libraryNote = subField[1].substring(1, subField[1].length()); 645 xmlString.append("<librarynote><![CDATA["+libraryNote.trim()+"]]></librarynote>\n"); 646 emptyFlag = true; 647 } 648 } 649 } else if (fieldCode.contains("980")) { 650 String[] subField = fieldLine.split("\\$"); 651 String listPrice = ""; 652 String quantity = ""; 653 xmlString.append("<quantitydetails>\n"); 654 for (int i = 0; i < subField.length; i++) { 655 String subFieldCode = String.valueOf(subField[i].charAt(0)); 656 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("b")) { 657 listPrice = subField[i].substring(1, subField[i].length()); 658 xmlString.append("<listprice><![CDATA["+listPrice.trim()+"]]></listprice>\n"); 659 emptyFlag = true; 660 } 661 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("q")) { 662 quantity = subField[i].substring(1, subField[i].length()); 663 xmlString.append("<quantity><![CDATA["+quantity.trim()+"]]></quantity>\n"); 664 emptyFlag = true; 665 } 666 } 667 xmlString.append("</quantitydetails>\n"); 668 669 } else if (fieldCode.contains("982")) { 670 String[] subField = fieldLine.split("\\$"); 671 String ybp = ""; 672 String binding = ""; 673 String initials = ""; 674 xmlString.append("<transactiondata1>\n"); 675 for (int i = 0; i < subField.length; i++) { 676 String subFieldCode = String.valueOf(subField[i].charAt(0)); 677 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 678 ybp = subField[i].substring(1, subField[i].length()); 679 xmlString.append("<YBP><![CDATA["+ybp.trim()+"]]></YBP>\n"); 680 emptyFlag = true; 681 } 682 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("b")) { 683 xmlString.append("<subAccountNumber></subAccountNumber>\n"); 684 emptyFlag = true; 685 } 686 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("d")) { 687 binding = subField[i].substring(1, subField[i].length()); 688 xmlString.append("<binding><![CDATA["+binding.trim()+"]]></binding>\n"); 689 emptyFlag = true; 690 } 691 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("f")) { 692 initials = subField[i].substring(1, subField[i].length()); 693 xmlString.append("<initials><![CDATA["+initials.trim()+"]]></initials>\n"); 694 xmlString.append("<deliverytoname><![CDATA["+deliverToName.get(initials.trim())+"]]></deliverytoname>\n"); 695 emptyFlag = true; 696 } 697 } 698 xmlString.append("</transactiondata1>\n"); 699 700 } else if (fieldCode.contains("984")) { 701 702 String[] subField = fieldLine.split("\\$"); 703 String orderDate = ""; 704 String vendorCode = ""; 705 706 xmlString.append("<vendor>\n"); 707 for (int i = 0; i < subField.length; i++) { 708 String subFieldCode = String.valueOf(subField[i].charAt(0)); 709 710 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 711 orderDate = subField[i].substring(1, subField[i].length()); 712 xmlString.append("<dateOrdered><![CDATA["+orderDate.trim()+"]]></dateOrdered>\n"); 713 emptyFlag = true; 714 } 715 716 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("c")) { 717 vendorCode = subField[i].substring(1, subField[i].length()); 718 xmlString.append("<vendorcode>12106-0</vendorcode>\n"); 719 emptyFlag = true; 720 } 721 } 722 xmlString.append("</vendor>\n"); 723 } else if (fieldCode.contains("987")) { 724 String[] subField = fieldLine.split("\\$"); 725 String ybpuid = ""; 726 for (int i = 0; i < subField.length; i++) { 727 String subFieldCode = String.valueOf(subField[i].charAt(0)); 728 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 729 ybpuid = subField[1].substring(1, subField[1].length()); 730 xmlString.append("<ybpuid><![CDATA["+ybpuid.trim()+"]]></ybpuid>\n"); 731 emptyFlag = true; 732 } 733 } 734 } else if (fieldCode.contains("993")) { 735 String[] subField = fieldLine.split("\\$"); 736 String volumeNumber = ""; 737 for (int i = 0; i < subField.length; i++) { 738 String subFieldCode = String.valueOf(subField[i].charAt(0)); 739 if (subFieldCode != null && subFieldCode != "" && subFieldCode.equalsIgnoreCase("a")) { 740 volumeNumber = subField[1].substring(1, subField[1].length()); 741 xmlString.append("<volumenumber><![CDATA["+volumeNumber.trim()+"]]></volumenumber>\n"); 742 emptyFlag = true; 743 } 744 } 745 } 746 747 } 748 } 749 try{ 750 if(emptyFlag){ 751 parseDefaultValues(); 752 xmlString = getDefaultValues(xmlString); 753 } 754 }catch(Exception e){ 755 e.printStackTrace(); 756 } 757 if(emptyFlag){ 758 xmlString.append("</requisition>\n"); 759 emptyFlag = false; 760 } 761 xmlString.append("</requisitions>"); 762 return xmlString.toString(); 763 } 764 765 766 private StringBuilder getDefaultValues(StringBuilder xmlString){ 767 xmlString.append("<deliverycampuscode>"+bibInfoBean.getDeliveryCampusCode()+"</deliverycampuscode>\n"); 768 // xmlString.append("<deliverytoname>"+bibInfoBean.getDeliveryToName()+"</deliverytoname>\n"); 769 xmlString.append("<deliverybuildingcode>"+bibInfoBean.getDeliveryBuildingCode()+"</deliverybuildingcode>\n"); 770 xmlString.append("<deliverybuildingline1address>"+bibInfoBean.getDeliveryBuildingLine1Address()+"</deliverybuildingline1address>\n"); 771 xmlString.append("<deliverybuildingroomnumber>"+bibInfoBean.getDeliveryBuildingRoomNumber()+"</deliverybuildingroomnumber>\n"); 772 xmlString.append("<deliverycityname>"+bibInfoBean.getDeliveryCityName()+"</deliverycityname>\n"); 773 xmlString.append("<deliverystatecode>"+bibInfoBean.getDeliveryStateCode()+"</deliverystatecode>\n"); 774 xmlString.append("<deliverypostalcode>"+bibInfoBean.getDeliveryPostalCode()+"</deliverypostalcode>\n"); 775 xmlString.append("<deliverycountrycode>"+bibInfoBean.getDeliveryCountryCode()+"</deliverycountrycode>\n"); 776 xmlString.append("<purchaseordertransmissionmethodcode>"+bibInfoBean.getPurchaseOrderTransmissionMethodCode()+"</purchaseordertransmissionmethodcode>\n"); 777 xmlString.append("<purchaseordercostsourcecode>"+bibInfoBean.getPurchaseOrderCostSourceCode()+"</purchaseordercostsourcecode>\n"); 778 xmlString.append("<requestorpersonname>"+bibInfoBean.getRequestorPersonName()+"</requestorpersonname>\n"); 779 xmlString.append("<requestorpersonphonenumber>"+bibInfoBean.getRequestorPersonPhoneNumber()+"</requestorpersonphonenumber>\n"); 780 xmlString.append("<requestorpersonemailaddress>"+bibInfoBean.getRequestorPersonEmailAddress()+"</requestorpersonemailaddress>\n"); 781 xmlString.append("<requisitiondescription>"+bibInfoBean.getRequisitionDescription()+"</requisitiondescription>\n"); 782 xmlString.append("<fundingsource>"+bibInfoBean.getFundingSource()+"</fundingsource>\n"); 783 xmlString.append("<financialyear>"+bibInfoBean.getFinancialYear()+"</financialyear>\n"); 784 xmlString.append("<uom>"+bibInfoBean.getUom()+"</uom>\n"); 785 xmlString.append("<chart>"+bibInfoBean.getChart()+"</chart>\n"); 786 // xmlString.append("<objectcode>"+bibInfoBean.getObjectCode()+"</objectcode>\n"); 787 xmlString.append("<percent>"+bibInfoBean.getPercent()+"</percent>\n"); 788 xmlString.append("<chartofaccountscode>"+bibInfoBean.getChartOfAccountsCode()+"</chartofaccountscode>\n"); 789 xmlString.append("<organizationcode>"+bibInfoBean.getOrganizationCode()+"</organizationcode>\n"); 790 xmlString.append("<documentfundingsourcecode>"+bibInfoBean.getDocumentFundingSourceCode()+"</documentfundingsourcecode>\n"); 791 xmlString.append("<usetaxindicator>"+bibInfoBean.isUseTaxIndicator()+"</usetaxindicator>\n"); 792 xmlString.append("<deliverybuildingotherindicator>"+bibInfoBean.isDeliveryBuildingOtherIndicator()+"</deliverybuildingotherindicator>\n"); 793 xmlString.append("<organizationautomaticpurchaseorderlimit>"+bibInfoBean.getOrganizationAutomaticPurchaseOrderLimit()+"</organizationautomaticpurchaseorderlimit>\n"); 794 xmlString.append("<purchaseorderautomaticindicator>"+bibInfoBean.isPurchaseOrderAutomaticIndicator()+"</purchaseorderautomaticindicator>\n"); 795 xmlString.append("<receivingdocumentrequiredindicator>"+bibInfoBean.isReceivingDocumentRequiredIndicator()+"</receivingdocumentrequiredindicator>\n"); 796 xmlString.append("<paymentrequestpositiveapprovalindicator>"+bibInfoBean.isPaymentRequestPositiveApprovalIndicator()+"</paymentrequestpositiveapprovalindicator>\n"); 797 xmlString.append("<itemtypecode>"+bibInfoBean.getItemTypeCode()+"</itemtypecode>\n"); 798 xmlString.append("<billingname>"+bibInfoBean.getBillingName()+"</billingname>\n"); 799 xmlString.append("<billingline1address>"+bibInfoBean.getBillingLine1Address()+"</billingline1address>\n"); 800 xmlString.append("<billingcityname>"+bibInfoBean.getBillingCityName()+"</billingcityname>\n"); 801 xmlString.append("<billingstatecode>"+bibInfoBean.getBillingStateCode()+"</billingstatecode>\n"); 802 xmlString.append("<billingpostalcode>"+bibInfoBean.getBillingPostalCode()+"</billingpostalcode>\n"); 803 xmlString.append("<billingcountrycode>"+bibInfoBean.getBillingCountryCode()+"</billingcountrycode>\n"); 804 xmlString.append("<billingphonenumber>"+bibInfoBean.getBillingPhoneNumber()+"</billingphonenumber>\n"); 805 xmlString.append("<acquisitionunitvendoraccount>"+bibInfoBean.getVendorCustomerNumber()+"</acquisitionunitvendoraccount>\n"); 806 return xmlString; 807 } 808 809 810 public String getFailureRawData(String rawData,List<List> bibinfoFailure) throws Exception{ 811 StringBuilder failureBuilder = new StringBuilder(); 812 for(int failure=0;failure<bibinfoFailure.size();failure++){ 813 BibInfoBean bibBean = (BibInfoBean)bibinfoFailure.get(failure); 814 String leader = bibBean.getLeader(); 815 String ybpUid=bibBean.getYbpuid(); 816 StringTokenizer field = new StringTokenizer(rawData, "="); 817 int fromIndex = 0; 818 int toIndex =0; 819 String rawdata = ""; 820 while (field.hasMoreTokens()) { 821 822 String fieldLine = field.nextToken(); 823 if(!fieldLine.equalsIgnoreCase("\n")){ 824 String fieldCode = fieldLine.substring(0, 4); 825 if (fieldCode.contains("LDR")) { 826 if(fieldLine.contains(leader)){ 827 fromIndex = rawData.indexOf(fieldLine); 828 } 829 } 830 if (fieldCode.contains("987")) { 831 if(fieldLine.contains(ybpUid)){ 832 toIndex = rawData.indexOf(fieldLine); 833 rawdata = rawData.substring(fromIndex,toIndex); 834 failureBuilder.append(rawdata+fieldLine+"\nFailure Information :::"+bibBean.getFailure()+"\n\n"); 835 } 836 } 837 838 } 839 } 840 } 841 842 return failureBuilder.toString(); 843 } 844 845 846}