/** * Get the tag for a DICOM element. This method supports dcm4che names as well as hex strings, * with or without enclosing parentheses or square brackets and with or without a comma separating * the group and the element numbers. This method also supports private group names defined in the * script. This method differs from the DicomObject method of the same name in that it also * supports names for private group elements in the form 0009[ID]02, where ID is the block owner * ID. Examples of element specifications containing block owner IDs are: * * <ul> * <li>9,[blockID]02 * <li>(9,[blockID]02) * <li>[9,[blockID]02] * <li>0009[blockID]02 * </ul> * * @param name the dcm4che element name or coded hex value. * @return the tag, or zero if the name cannot be parsed as an element specification */ public int getElementTag(String name) { if (name == null) return 0; name = name.trim(); int k = name.length() - 1; if (name.startsWith("[") && name.endsWith("]")) name = name.substring(1, k).trim(); else if (name.startsWith("(") && name.endsWith(")")) name = name.substring(1, k).trim(); // Try it as a standard element specification int tag = DicomObject.getElementTag(name); if (tag != 0) return tag; // Try it as a private element name Integer tagInteger = privateElementNames.get(name); if (tagInteger != null) return tagInteger.intValue(); // Try to match it as a private group element with a block specification Matcher matcher = pgPattern.matcher(name); if (matcher.matches()) { int group = StringUtil.getHexInt(matcher.group(1)); if ((group & 1) == 1) { // It's a private group; get the block ID and the element offset String blockID = matcher.group(2).toUpperCase(); int elem = StringUtil.getHexInt(matcher.group(3)); // Now get the tag of the private group creator int creatorTag = pgIndex.getTagForID(group, blockID); if (creatorTag != 0) { return (group << 16) | ((creatorTag & 0xFF) << 8) | (elem & 0xFF); } } } // Try to match it as a private creator element with a block specification matcher = pcPattern.matcher(name); if (matcher.matches()) { int group = StringUtil.getHexInt(matcher.group(1)); if ((group & 1) == 1) { // It's a private group; get the block ID String blockID = matcher.group(2).toUpperCase(); // Now get the tag of the private group creator int creatorTag = pgIndex.getTagForID(group, blockID); if (creatorTag != 0) return creatorTag; } } return 0; }
public ScriptTable(DAScript script) { super(); Document scriptXML = script.toXML(); Element scriptRoot = scriptXML.getDocumentElement(); Node child = scriptRoot.getFirstChild(); while (child != null) { if ((child instanceof Element) && child.getNodeName().equals("e")) { Element eChild = (Element) child; if (eChild.getAttribute("en").equals("T")) { int tag = StringUtil.getHexInt(eChild.getAttribute("t")); String command = eChild.getTextContent(); Matcher processMatcher = processPattern.matcher(command); Matcher lookupMatcher = lookupPattern.matcher(command); Integer tagInteger = new Integer(tag); if (processMatcher.find() || lookupMatcher.find()) { this.put(tagInteger, command); } } } child = child.getNextSibling(); } }