/** * Insert an empty child. Will shift all children having an index * greater than or equal to the child inserted to the right. * @param nameIndex position where child is inserted */ public void insert(Path.PathElement nameIndex) { // convert 1-based index value to 0-base value int index = getZeroBasedIndex(nameIndex); if (children != null) { ArrayList list = (ArrayList) children.get(nameIndex.getName()); if (list != null && list.size() > index) { for (int i = index; i < list.size(); i++) { Element element = (Element) list.get(i); if (element != null) { element.index = element.getNormalizedIndex() + 1; } } list.add(index, null); } } }
/** * Return an element matching a name and index. * @param nameIndex position where child is located * @return element matching <code>nameIndex</code> or <code>null</code> if * none exists. */ private Element getChild(Path.PathElement nameIndex) { // convert 1-based index value to 0-base value int index = getZeroBasedIndex(nameIndex); Element element = null; if (children != null) { ArrayList list = (ArrayList) children.get(nameIndex.getName()); if (list != null && list.size() > index) { element = (Element) list.get(index); } } return element; }
/** * Link a child of this node. Position is given by <code>nameIndex</code>. * @param nameIndex position where child should be located * @param element element to add */ public void put(Path.PathElement nameIndex, Element element) { // convert 1-based index value to 0-base value int index = getZeroBasedIndex(nameIndex); if (children == null) { children = new HashMap(); } ArrayList list = (ArrayList) children.get(nameIndex.getName()); if (list == null) { list = new ArrayList(); children.put(nameIndex.getName(), list); } while (list.size() < index) { list.add(null); } if (list.size() == index) { list.add(element); } else { list.set(index, element); } element.parent = this; element.name = nameIndex.getName(); element.index = nameIndex.getIndex(); childrenCount++; }
int index = getZeroBasedIndex(nameIndex); if (children == null) { return null;