public static Node findNode(NodeCollection nodeCollection, String hierarchicalName) { String[] nameParts = hierarchicalName.split("/"); if (nameParts.length == 1) { String nodeName = nameParts[0]; return nodeName.length() > 0 ? nodeCollection.getNode(nodeName) : null; } GraphElement currentElement = (GraphElement) nodeCollection; int startIndex = 0; if (nameParts[0].length() == 0) { // hierarchical name started with a '/' currentElement = currentElement.getProcessDefinition(); startIndex = 1; } for (int i = startIndex; i < nameParts.length; i++) { String namePart = nameParts[i]; if ("..".equals(namePart)) { // namePart calls for parent, but current element is absent if (currentElement == null) return null; currentElement = currentElement.getParent(); } else { // namePart calls for child, but current element is not a collection if (!(currentElement instanceof NodeCollection)) return null; NodeCollection currentCollection = (NodeCollection) currentElement; currentElement = currentCollection.getNode(namePart); } } // current element could be the process definition or might be absent return currentElement instanceof Node ? (Node) currentElement : null; }
public static Node findNode(NodeCollection nodeCollection, String hierarchicalName) { String[] nameParts = hierarchicalName.split("/"); if (nameParts.length == 1) { String nodeName = nameParts[0]; return nodeName.length() > 0 ? nodeCollection.getNode(nodeName) : null; } GraphElement currentElement = (GraphElement) nodeCollection; int startIndex = 0; if (nameParts[0].length() == 0) { // hierarchical name started with a '/' currentElement = currentElement.getProcessDefinition(); startIndex = 1; } for (int i = startIndex; i < nameParts.length; i++) { String namePart = nameParts[i]; if ("..".equals(namePart)) { // namePart calls for parent, but current element is absent if (currentElement == null) return null; currentElement = currentElement.getParent(); } else { // namePart calls for child, but current element is not a collection if (!(currentElement instanceof NodeCollection)) return null; NodeCollection currentCollection = (NodeCollection) currentElement; currentElement = currentCollection.getNode(namePart); } } // current element could be the process definition or might be absent return currentElement instanceof Node ? (Node) currentElement : null; }