private void startDocument() throws SAXException { ch.startDocument(); startElement("NativeDicomModel", "xml:space", "preserve"); }
private void startElement(String name, String attrName, int attrValue) throws SAXException { startElement(name, attrName, Integer.toString(attrValue)); }
private void startElement(String name, String attrName, String attrValue) throws SAXException { addAttribute(attrName, attrValue); startElement(name); }
private void writeElement(String qname, String s) throws SAXException { if (s != null) { startElement(qname); char[] buf = buffer; for (int off = 0, totlen = s.length(); off < totlen;) { int len = Math.min(totlen - off, buf.length); s.getChars(off, off += len, buf, 0); ch.characters(buf, 0, len); } endElement(qname); } }
private void writeInlineBinary(byte[] b) throws SAXException { startElement("InlineBinary"); char[] buf = buffer; for (int off = 0; off < b.length;) { int len = Math.min(b.length - off, BASE64_CHUNK_LENGTH); Base64.encode(b, off, len, buf, 0); ch.characters(buf, 0, (len * 4 / 3 + 3) & ~3); off += len; } endElement("InlineBinary"); }
@Override public void readValue(DicomInputStream dis, Sequence seq) throws IOException { try { startElement("Item", "number", seq.size() + 1); dis.readValue(dis, seq); endElement("Item"); } catch (SAXException e) { throw new IOException(e); } }
private void writeBulkData(BulkData bulkData) throws SAXException { if (bulkData.getUUID() != null) addAttribute("uuid", bulkData.getUUID()); if (bulkData.getURI() != null) addAttribute("uri", bulkData.getURI()); startElement("BulkData"); endElement("BulkData"); }
int number = 0; for (Attributes item : seq) { startElement("Item", "number", ++number); writeItem(item); endElement("Item"); if (frag instanceof Value && ((Value) frag).isEmpty()) continue; startElement("DataFragment", "number", number); if (frag instanceof BulkData) writeBulkData((BulkData) frag);
private void writeValues(VR vr, Object val, boolean bigEndian, SpecificCharacterSet cs) throws SAXException { if (vr.isStringType()) val = vr.toStrings(val, bigEndian, cs); int vm = vr.vmOf(val); for (int i = 0; i < vm; i++) { String s = vr.toString(val, bigEndian, i, null); addAttribute("number", Integer.toString(i + 1)); if (vr == VR.PN) { PersonName pn = new PersonName(s, true); startElement("PersonName"); writePNGroup("Alphabetic", pn, PersonName.Group.Alphabetic); writePNGroup("Ideographic", pn, PersonName.Group.Ideographic); writePNGroup("Phonetic", pn, PersonName.Group.Phonetic); endElement("PersonName"); } else { writeElement("Value", s); } } }
private void writeAttribute(int tag, VR vr, Object value, SpecificCharacterSet cs, Attributes attrs) throws SAXException { if (TagUtils.isGroupLength(tag) || TagUtils.isPrivateCreator(tag)) return; String privateCreator = attrs.getPrivateCreator(tag); addAttributes(tag, vr, privateCreator); startElement("DicomAttribute"); if (value instanceof Value) writeAttribute((Value) value, attrs.bigEndian()); else if (!vr.isInlineBinary()) { writeValues(vr, value, attrs.bigEndian(), attrs.getSpecificCharacterSet(vr)); } else if (value instanceof byte[]) { writeInlineBinary(attrs.bigEndian() ? vr.toggleEndian((byte[]) value, true) : (byte[]) value); } else throw new IllegalArgumentException("vr: " + vr + ", value class: " + value.getClass()); endElement("DicomAttribute"); }
@Override public void readValue(DicomInputStream dis, Fragments frags) throws IOException { int len = dis.length(); if (dis.isExcludeBulkData()) { dis.skipFully(len); } else try { frags.add(ByteUtils.EMPTY_BYTES); // increment size if (len > 0) { startElement("DataFragment", "number", frags.size()); if (dis.isIncludeBulkDataURI()) { writeBulkData(dis.createBulkData(dis)); } else { byte[] b = dis.readValue(); if (dis.bigEndian()) frags.vr().toggleEndian(b, false); writeInlineBinary(b); } endElement("DataFragment"); } } catch (SAXException e) { throw new IOException(e); } }
private void writePNGroup(String qname, PersonName pn, PersonName.Group group) throws SAXException { if (pn.contains(group)) { startElement(qname); writeElement("FamilyName", pn.get(group, PersonName.Component.FamilyName)); writeElement("GivenName", pn.get(group, PersonName.Component.GivenName)); writeElement("MiddleName", pn.get(group, PersonName.Component.MiddleName)); writeElement("NamePrefix", pn.get(group, PersonName.Component.NamePrefix)); writeElement("NameSuffix", pn.get(group, PersonName.Component.NameSuffix)); endElement(qname); } }
String privateCreator = attrs.getPrivateCreator(tag); addAttributes(tag, vr, privateCreator); startElement("DicomAttribute"); if (vr == VR.SQ || len == -1) { dis.readValue(dis, attrs);