package ua.stu.scplib.attribute; /** * <p>Utilities to support the concept of the DICOM Value Representation (VR), including * two byte arrays for each VR, and tester methods that determine whether or not a * particular two byte array is a particular type of VR.</p> * * @author dclunie */ public class ValueRepresentation { public static byte[] AE = { 'A', 'E' }; /***/ public static byte[] AS = { 'A', 'S' }; /***/ public static byte[] AT = { 'A', 'T' }; /***/ public static byte[] CS = { 'C', 'S' }; /***/ public static byte[] DA = { 'D', 'A' }; /***/ public static byte[] DS = { 'D', 'S' }; /***/ public static byte[] DT = { 'D', 'T' }; /***/ public static byte[] FL = { 'F', 'L' }; /***/ public static byte[] FD = { 'F', 'D' }; /***/ public static byte[] IS = { 'I', 'S' }; /***/ public static byte[] LO = { 'L', 'O' }; /***/ public static byte[] LT = { 'L', 'T' }; /***/ public static byte[] OB = { 'O', 'B' }; /***/ public static byte[] OF = { 'O', 'F' }; /***/ public static byte[] OW = { 'O', 'W' }; /***/ public static byte[] OX = { 'O', 'X' }; // OB or OW /***/ public static byte[] PN = { 'P', 'N' }; /***/ public static byte[] SH = { 'S', 'H' }; /***/ public static byte[] SL = { 'S', 'L' }; /***/ public static byte[] SQ = { 'S', 'Q' }; /***/ public static byte[] SS = { 'S', 'S' }; /***/ public static byte[] ST = { 'S', 'T' }; /***/ public static byte[] TM = { 'T', 'M' }; /***/ public static byte[] UI = { 'U', 'I' }; /***/ public static byte[] UL = { 'U', 'L' }; /***/ public static byte[] UN = { 'U', 'N' }; /***/ public static byte[] US = { 'U', 'S' }; /***/ public static byte[] UT = { 'U', 'T' }; /***/ public static byte[] XS = { 'X', 'S' }; // US or SS /***/ public static byte[] XO = { 'X', 'O' }; // US or SS or OW /** * @param vr */ public static final boolean isApplicationEntityVR(byte[] vr) { return vr[0]=='A' && vr[1]=='E'; } /** * @param vr */ public static final boolean isAgeStringVR(byte[] vr) { return vr[0]=='A' && vr[1]=='S'; } /** * @param vr */ public static final boolean isAttributeTagVR(byte[] vr) { return vr[0]=='A' && vr[1]=='T'; } /** * @param vr */ public static final boolean isCodeStringVR(byte[] vr) { return vr[0]=='C' && vr[1]=='S'; } /** * @param vr */ public static final boolean isDateVR(byte[] vr) { return vr[0]=='D' && vr[1]=='A'; } /** * @param vr */ public static final boolean isDateTimeVR(byte[] vr) { return vr[0]=='D' && vr[1]=='T'; } /** * @param vr */ public static final boolean isDecimalStringVR(byte[] vr) { return vr[0]=='D' && vr[1]=='S'; } /** * @param vr */ public static final boolean isFloatDoubleVR(byte[] vr) { return vr[0]=='F' && vr[1]=='D'; } /** * @param vr */ public static final boolean isFloatSingleVR(byte[] vr) { return vr[0]=='F' && vr[1]=='L'; } /** * @param vr */ public static final boolean isIntegerStringVR(byte[] vr) { return vr[0]=='I' && vr[1]=='S'; } /** * @param vr */ public static final boolean isLongStringVR(byte[] vr) { return vr[0]=='L' && vr[1]=='O'; } /** * @param vr */ public static final boolean isLongTextVR(byte[] vr) { return vr[0]=='L' && vr[1]=='T'; } /** * @param vr */ public static final boolean isOtherByteVR(byte[] vr) { return vr[0]=='O' && vr[1]=='B'; } /** * @param vr */ public static final boolean isOtherFloatVR(byte[] vr) { return vr[0]=='O' && vr[1]=='F'; } /** * @param vr */ public static final boolean isOtherWordVR(byte[] vr) { return vr[0]=='O' && vr[1]=='W'; } /** * @param vr */ public static final boolean isOtherUnspecifiedVR(byte[] vr) { // Not a real VR ... but returned by dictionary return vr[0]=='O' && vr[1]=='X'; } /** * @param vr */ public static final boolean isOtherByteOrWordVR(byte[] vr) { return vr[0]=='O' && (vr[1]=='B' || vr[1]=='W' || vr[1]=='X'); } /** * @param vr */ public static final boolean isPersonNameVR(byte[] vr) { return vr[0]=='P' && vr[1]=='N'; } /** * @param vr */ public static final boolean isShortStringVR(byte[] vr) { return vr[0]=='S' && vr[1]=='H'; } /** * @param vr */ public static final boolean isSignedLongVR(byte[] vr) { return vr[0]=='S' && vr[1]=='L'; } /** * @param vr */ public static final boolean isSequenceVR(byte[] vr) { return vr[0]=='S' && vr[1]=='Q'; } /** * @param vr */ public static final boolean isSignedShortVR(byte[] vr) { return vr[0]=='S' && vr[1]=='S'; } /** * @param vr */ public static final boolean isShortTextVR(byte[] vr) { return vr[0]=='S' && vr[1]=='T'; } /** * @param vr */ public static final boolean isTimeVR(byte[] vr) { return vr[0]=='T' && vr[1]=='M'; } /** * @param vr */ public static final boolean isUniqueIdentifierVR(byte[] vr) { return vr[0]=='U' && vr[1]=='I'; } /** * @param vr */ public static final boolean isUnsignedLongVR(byte[] vr) { return vr[0]=='U' && vr[1]=='L'; } /** * @param vr */ public static final boolean isUnknownVR(byte[] vr) { return vr[0]=='U' && vr[1]=='N'; } /** * @param vr */ public static final boolean isUnsignedShortVR(byte[] vr) { return vr[0]=='U' && vr[1]=='S'; } /** * @param vr */ public static final boolean isUnspecifiedShortVR(byte[] vr) { // Not a real VR ... but returned by dictionary return vr[0]=='X' && vr[1]=='S'; } /** * @param vr */ public static final boolean isUnspecifiedShortOrOtherWordVR(byte[] vr) { // Not a real VR ... but returned by dictionary return vr[0]=='X' && vr[1]=='O'; } /** * @param vr */ public static final boolean isUnlimitedTextVR(byte[] vr) { return vr[0]=='U' && vr[1]=='T'; } /** * @param vr */ public static final boolean isShortValueLengthVR(byte[] vr) { return vr[0]=='A' && ( vr[1]=='E' || vr[1]=='S' || vr[1]=='T' ) || vr[0]=='C' && vr[1]=='S' || vr[0]=='D' && ( vr[1]=='A' || vr[1]=='S' || vr[1]=='T' ) || vr[0]=='F' && ( vr[1]=='D' || vr[1]=='L' ) || vr[0]=='I' && vr[1]=='S' || vr[0]=='L' && ( vr[1]=='O' || vr[1]=='T' ) || vr[0]=='P' && vr[1]=='N' || vr[0]=='S' && ( vr[1]=='H' || vr[1]=='L' || vr[1]=='S' || vr[1]=='T' ) || vr[0]=='T' && vr[1]=='M' || vr[0]=='U' && ( vr[1]=='I' || vr[1]=='L' || vr[1]=='S' ); } /** * @param vr */ public static final boolean isAffectedBySpecificCharacterSet(byte[] vr) { return isLongStringVR(vr) || isLongTextVR(vr) || isPersonNameVR(vr) || isShortStringVR(vr) || isShortTextVR(vr) || isUnlimitedTextVR(vr); } /** * @param vr */ public static final String getAsString(byte[] vr) { return vr == null ? "" : new String(vr); } /** * <p>Get the length of the "word" corresponding to an individual value for this VR, * such as may be needed when swapping the endianness of values.</p> * * @param vr */ public static final int getWordLengthOfValueAffectedByEndianness(byte[] vr) { int length = 1; if (isSignedShortVR(vr) || isUnsignedShortVR(vr) || isUnspecifiedShortVR(vr) || isOtherWordVR(vr) || isUnspecifiedShortOrOtherWordVR(vr) ) { length=2; } if (isSignedLongVR(vr) || isUnsignedLongVR(vr) || isFloatSingleVR(vr) || isOtherFloatVR(vr) ) { length=4; } if (isFloatDoubleVR(vr) ) { length=8; } return length; } }