public SpecificCharacterSet getSpecificCharacterSet(VR vr) { return vr.useSpecificCharacterSet() ? getSpecificCharacterSet() : SpecificCharacterSet.ASCII; }
private StringBuilder appendAttribute(String privateCreator, int tag, VR vr, Object value, int maxLength, StringBuilder sb, String prefix) { sb.append(prefix).append(TagUtils.toString(tag)).append(' ').append(vr).append(" ["); if (vr.prompt(value, bigEndian, getSpecificCharacterSet(vr), maxLength - sb.length() - 1, sb)) { sb.append("] ").append(ElementDictionary.keywordOf(tag, privateCreator)); if (sb.length() > maxLength) sb.setLength(maxLength); } sb.append('\n'); return sb; }
private void writeItem(final Attributes item) throws SAXException { final SpecificCharacterSet cs = item.getSpecificCharacterSet(); try { item.accept(new Attributes.Visitor(){ @Override public boolean visit(Attributes attrs, int tag, VR vr, Object value) throws Exception { writeAttribute(tag, vr, value, cs, item); return true; }}, false); } catch (SAXException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } }
private Object decodeStringValue(int index) { Object value = loadBulkData(values[index]); if (value instanceof byte[]) { value = vrs[index].toStrings((byte[]) value, bigEndian, getSpecificCharacterSet(vrs[index])); if (value instanceof String && ((String) value).isEmpty()) value = Value.NULL; values[index] = value; } return value; }
public void write(Attributes attrs) { final SpecificCharacterSet cs = attrs.getSpecificCharacterSet(); gen.writeStartObject(); try { attrs.accept(new Attributes.Visitor(){ @Override public boolean visit(Attributes attrs, int tag, VR vr, Object value) throws Exception { writeAttribute(tag, vr, value, cs, attrs); return true; }}, false); } catch (Exception e) { throw new RuntimeException(e); } gen.writeEnd(); }
public SpecificCharacterSet getSpecificCharacterSet() { if (cs != null) return cs; if (containsSpecificCharacterSet) cs = SpecificCharacterSet.valueOf( getStrings(null, Tag.SpecificCharacterSet, VR.CS)); else if (parent != null) return parent.getSpecificCharacterSet(); else cs = SpecificCharacterSet.getDefaultCharacterSet(); return cs; }
public int calcLength(DicomEncodingOptions encOpts, boolean explicitVR) { if (isEmpty()) return 0; this.groupLengths = encOpts.groupLength ? new int[countGroups()] : null; this.length = calcLength(encOpts, explicitVR, getSpecificCharacterSet(), groupLengths); return this.length; }
public void internalizeStringValues(boolean decode) { SpecificCharacterSet cs = getSpecificCharacterSet(); for (int i = 0; i < values.length; i++) { VR vr = vrs[i]; Object value = values[i]; if (vr.isStringType()) { if (value instanceof byte[]) { if (!decode) continue; value = vr.toStrings((byte[]) value, bigEndian, cs); } if (value instanceof String) values[i] = ((String) value).intern(); else if (value instanceof String[]) { String[] ss = (String[]) value; for (int j = 0; j < ss.length; j++) ss[j] = ss[j].intern(); } } else if (value instanceof Sequence) for (Attributes item : (Sequence) value) item.internalizeStringValues(decode); } }
private void decodeStringValuesUsingSpecificCharacterSet() { Object value; VR vr; SpecificCharacterSet cs = getSpecificCharacterSet(); for (int i = 0; i < size; i++) { value = values[i]; if (value instanceof Sequence) { for (Attributes item : (Sequence) value) item.decodeStringValuesUsingSpecificCharacterSet(); } else if ((vr = vrs[i]).useSpecificCharacterSet()) if (value instanceof byte[]) values[i] = vr.toStrings((byte[]) value, bigEndian, cs); } }
public byte[] getBytes(String privateCreator, int tag) throws IOException { int index = indexOf(privateCreator, tag); if (index < 0) return null; Object value = values[index]; VR vr = vrs[index]; try { if (value instanceof Value) return ((Value) value).toBytes(vr, bigEndian); return vr.toBytes(value, getSpecificCharacterSet(vr)); } catch (UnsupportedOperationException e) { LOG.info("Attempt to access {} {} as bytes", TagUtils.toString(tag), vr); return null; } }
vr.vr.prompt(value, attrs.bigEndian(), attrs.getSpecificCharacterSet(vr.vr), 200, sb); sb.append(']'); if (iav.reason != Invalid.Item) {
public void writeTo(DicomOutputStream out) throws IOException { if (isEmpty()) return; if (groupLengths == null && out.getEncodingOptions().groupLength) throw new IllegalStateException( "groupLengths not initialized by calcLength()"); SpecificCharacterSet cs = getSpecificCharacterSet(); if (tags[0] < 0) { int index0 = -(1 + indexOf(0)); writeTo(out, cs, index0, size, groupLengthIndex0); writeTo(out, cs, 0, index0, 0); } else { writeTo(out, cs, 0, size, 0); } }
public void writeGroupTo(DicomOutputStream out, int groupLengthTag) throws IOException { if (isEmpty()) throw new IllegalStateException("No attributes"); checkInGroup(0, groupLengthTag); checkInGroup(size-1, groupLengthTag); SpecificCharacterSet cs = getSpecificCharacterSet(); out.writeGroupLength(groupLengthTag, calcLength(out.getEncodingOptions(), out.isExplicitVR(), cs, null)); writeTo(out, cs, 0, size, 0); }
public static void unifyCharacterSets(Attributes... attrsList) { if (attrsList.length == 0) return; SpecificCharacterSet utf8 = SpecificCharacterSet.valueOf("ISO_IR 192"); SpecificCharacterSet commonCS = attrsList[0].getSpecificCharacterSet(); if (!commonCS.equals(utf8)) { for (int i = 1; i < attrsList.length; i++) { SpecificCharacterSet cs = attrsList[i].getSpecificCharacterSet(); if (!(cs.equals(commonCS) || cs.isASCII() && commonCS.containsASCII())) { if (commonCS.isASCII() && cs.containsASCII()) commonCS = cs; else { commonCS = utf8; break; } } } } for (Attributes attrs : attrsList) { SpecificCharacterSet cs = attrs.getSpecificCharacterSet(); if (!(cs.equals(commonCS))) { if (!cs.isASCII() || !commonCS.containsASCII()) attrs.decodeStringValuesUsingSpecificCharacterSet(); attrs.setString(Tag.SpecificCharacterSet, VR.CS, commonCS.toCodes()); } } }
public String[] getStrings(String privateCreator, int tag, VR vr) { int index = indexOf(privateCreator, tag); if (index < 0) return null; Object value = values[index]; if (value == Value.NULL) return StringUtils.EMPTY_STRING; if (vr == null) vr = vrs[index]; else updateVR(index, vr); if (vr.isStringType()) { value = decodeStringValue(index); if (value == Value.NULL) return StringUtils.EMPTY_STRING; } try { return toStrings(vr.toStrings(value, bigEndian, getSpecificCharacterSet(vr))); } catch (UnsupportedOperationException e) { LOG.info("Attempt to access {} {} as string", TagUtils.toString(tag), vr); return null; } }
line.append(" ["); if (vr.prompt(b, dis.bigEndian(), attrs.getSpecificCharacterSet(), width - line.length() - 1, line)) { line.append(']');
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"); }
private void writeAttribute(int tag, VR vr, Object value, SpecificCharacterSet cs, Attributes attrs) { if (TagUtils.isGroupLength(tag)) return; gen.writeStartObject(TagUtils.toHexString(tag)); gen.write("vr", vr.name()); if (value instanceof Value) writeValue((Value) value, attrs.bigEndian()); else writeValue(vr, value, attrs.bigEndian(), attrs.getSpecificCharacterSet(vr), true); gen.writeEnd(); }
attrs.setBytes(tag, vr, b); writeValue(vr, b, dis.bigEndian(), attrs.getSpecificCharacterSet(vr), false);
else writeValues(vr, b, dis.bigEndian(), attrs.getSpecificCharacterSet(vr));