protected void toXml(Record record) throws SAXException { if (!MarcFactory.newInstance().validateRecord(record)) { throw new MarcException("Marc record didn't validate"); } char temp[]; AttributesImpl atts = new AttributesImpl(); if (indent) handler.ignorableWhitespace("\n ".toCharArray(), 0, 3); handler.startElement(Constants.MARCXML_NS_URI, RECORD, RECORD, atts); if (indent) handler.ignorableWhitespace("\n ".toCharArray(), 0, 5); handler.startElement(Constants.MARCXML_NS_URI, LEADER, LEADER, atts); Leader leader = record.getLeader(); temp = leader.toString().toCharArray(); handler.characters(temp, 0, temp.length); handler.endElement(Constants.MARCXML_NS_URI, LEADER, LEADER); for (ControlField field : record.getControlFields()) { atts = new AttributesImpl(); atts.addAttribute("", "tag", "tag", "CDATA", field.getTag()); if (indent) handler.ignorableWhitespace("\n ".toCharArray(), 0, 5); handler.startElement(Constants.MARCXML_NS_URI, CONTROL_FIELD, CONTROL_FIELD, atts); temp = getDataElement(field.getData()); handler.characters(temp, 0, temp.length); handler.endElement(Constants.MARCXML_NS_URI, CONTROL_FIELD, CONTROL_FIELD); } for (DataField field : record.getDataFields()) { atts = new AttributesImpl(); atts.addAttribute("", "tag", "tag", "CDATA", field.getTag()); atts.addAttribute("", "ind1", "ind1", "CDATA", String.valueOf(field.getIndicator1())); atts.addAttribute("", "ind2", "ind2", "CDATA", String.valueOf(field.getIndicator2())); if (indent) handler.ignorableWhitespace("\n ".toCharArray(), 0, 5); handler.startElement(Constants.MARCXML_NS_URI, DATA_FIELD, DATA_FIELD, atts); for (Subfield subfield : field.getSubfields()) { atts = new AttributesImpl(); atts.addAttribute("", "code", "code", "CDATA", String.valueOf(subfield.getCode())); if (indent) handler.ignorableWhitespace("\n ".toCharArray(), 0, 7); handler.startElement(Constants.MARCXML_NS_URI, SUBFIELD, SUBFIELD, atts); temp = getDataElement(subfield.getData()); handler.characters(temp, 0, temp.length); handler.endElement(Constants.MARCXML_NS_URI, SUBFIELD, SUBFIELD); } if (indent) handler.ignorableWhitespace("\n ".toCharArray(), 0, 5); handler.endElement(Constants.MARCXML_NS_URI, DATA_FIELD, DATA_FIELD); } if (indent) handler.ignorableWhitespace("\n ".toCharArray(), 0, 3); handler.endElement(Constants.MARCXML_NS_URI, RECORD, RECORD); }
// file import rules public ActionResult importFile(File selectedFile) throws IOException { Timer timer = new Timer(); TreeMap<String, Stats> types = new TreeMap<String, Stats>(); InputStream in = new FileInputStream(selectedFile); MarcReader reader = new MarcPermissiveStreamReader(in, true, true); while (reader.hasNext()) { Record record = reader.next(); String bib_id = ""; DataField df907 = (DataField) record.getVariableField("907"); if (df907 != null) { Subfield df907a = df907.getSubfield('a'); if (df907a != null) { bib_id = df907a.getData(); } } if (bib_id.startsWith(".b")) { bib_id = bib_id.substring(2, 9); } String key = bib_id; Stats stat = Generator.INSTANCE.create(key); types.put(stat.key, stat); String checksum = getChecksum(record.toString()); stat.setVal(InventoryStatsItem.Hash_Code, checksum); } // end while loop return new ActionResult( selectedFile, selectedFile.getName(), this.toString(), details, types, true, timer.getDuration()); }
@Override public String[] getValues(VariableField vf) { DataField df = (DataField) vf; String value = df.getSubfield('a').getData(); String tag = df.getTag(); if (tag.equals("100")) { Subfield csf = df.getSubfield('c'); if (csf != null) { String data = csf.getData(); int dlen = data.length(); StringBuffer sb = new StringBuffer(value.length() + data.length() + 1); sb.append(value); sb.append(' '); char c = data.charAt(dlen - 1); if (c == ',' || c == '.') { sb.append(data, 0, dlen - 1); } else sb.append(data); value = sb.toString(); } } else { // 110 & 710 List<Subfield> sfs = df.getSubfields('b'); if (sfs.size() > 0) { StringBuffer buf = new StringBuffer(value.length() + sfs.size() * 5); buf.append(value); Iterator<Subfield> sfi = sfs.iterator(); while (sfi.hasNext()) { buf.append(' '); buf.append(sfi.next().getData()); } int last = buf.length() - 1; char c = buf.charAt(last); if (c == ',' || c == '.') { buf.setLength(last); } value = buf.toString(); } } return new String[] {trim(value).toString()}; }