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; }
private int[] decodeISValue(int index) { Object value = index < 0 ? Value.NULL : values[index]; if (value == Value.NULL) return ByteUtils.EMPTY_INTS; if (value instanceof int[]) return (int[]) value; int[] is; if (value instanceof byte[]) value = vrs[index].toStrings((byte[]) value, bigEndian, SpecificCharacterSet.ASCII); if (value instanceof String) { String s = (String) value; if (s.isEmpty()) { values[index] = Value.NULL; return ByteUtils.EMPTY_INTS; } is = new int[] { StringUtils.parseIS(s) }; } else { // value instanceof String[] String[] ss = (String[]) value; is = new int[ss.length]; for (int i = 0; i < is.length; i++) { String s = ss[i]; is[i] = (s != null && !s.isEmpty()) ? StringUtils.parseIS(s) : Integer.MIN_VALUE; } } values[index] = is; return is; }
private double[] decodeDSValue(int index) { Object value = index < 0 ? Value.NULL : values[index]; if (value == Value.NULL) return ByteUtils.EMPTY_DOUBLES; if (value instanceof double[]) return (double[]) value; double[] ds; if (value instanceof byte[]) value = vrs[index].toStrings((byte[]) value, bigEndian, SpecificCharacterSet.ASCII); if (value instanceof String) { String s = (String) value; if (s.isEmpty()) { values[index] = Value.NULL; return ByteUtils.EMPTY_DOUBLES; } ds = new double[] { StringUtils.parseDS(s) }; } else { // value instanceof String[] String[] ss = (String[]) value; ds = new double[ss.length]; for (int i = 0; i < ds.length; i++) { String s = ss[i]; ds[i] = (s != null && !s.isEmpty()) ? StringUtils.parseDS(s) : Double.NaN; } } values[index] = ds; return ds; }
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 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; } }
private void writeStringValues(VR vr, Object val, boolean bigEndian, SpecificCharacterSet cs) { gen.writeStartArray("Value"); Object o = vr.toStrings(val, bigEndian, cs); String[] ss = (o instanceof String[]) ? (String[]) o
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); } } }