List of usage examples for org.w3c.dom Node appendChild
public Node appendChild(Node newChild) throws DOMException;
newChild
to the end of the list of children of this node. From source file:org.apache.any23.extractor.html.HCardExtractor.java
private void fixIncludes(HTMLDocument document, Node node, IssueReport report) { NamedNodeMap attributes = node.getAttributes(); // header case test 32 if ("TD".equals(node.getNodeName()) && (null != attributes.getNamedItem("headers"))) { String id = attributes.getNamedItem("headers").getNodeValue(); Node header = document.findNodeById(id); if (null != header) { node.appendChild(header.cloneNode(true)); attributes.removeNamedItem("headers"); }/*from w w w.j a v a 2 s . c om*/ } // include pattern, test 31 for (Node current : DomUtils.findAllByAttributeName(document.getDocument(), "class")) { if (!DomUtils.hasClassName(current, "include")) continue; // we have to remove the field soon to avoid infinite loops // no null check, we know it's there or we won't be in the loop current.getAttributes().removeNamedItem("class"); ArrayList<TextField> res = new ArrayList<TextField>(); HTMLDocument.readUrlField(res, current); TextField id = res.get(0); if (null == id) continue; TextField refId = new TextField(StringUtils.substringAfter(id.value(), "#"), id.source()); Node included = document.findNodeById(refId.value()); if (null == included) continue; if (DomUtils.isAncestorOf(included, current)) { final int[] nodeLocation = DomUtils.getNodeLocation(current); report.notifyIssue(IssueReport.IssueLevel.Warning, "Current node tries to include an ancestor node.", nodeLocation[0], nodeLocation[1]); continue; } current.appendChild(included.cloneNode(true)); } }
From source file:org.apache.cayenne.xml.XMLUtil.java
/** * Moves all children of the oldParent to the newParent *//*from www. j av a2s . c o m*/ static List<Element> replaceParent(Node oldParent, Node newParent) { List<Element> children = XMLUtil.getChildren(oldParent); for (Node child : children) { oldParent.removeChild(child); newParent.appendChild(child); } return children; }
From source file:org.apache.cocoon.forms.binding.InsertNodeJXPathBinding.java
/** * Registers a JXPath Factory on the JXPath Context. * <p>// w w w . j a va 2 s . c om * The factory will inserts a clone of the 'template' DocumentFragment * inside this object into the target objectmodel. */ public void doSave(Widget frmModel, JXPathContext jxpc) { Node parentNode = (Node) jxpc.getContextBean(); Document targetDoc = parentNode.getOwnerDocument(); Node toInsert = targetDoc.importNode(this.template, true); parentNode.appendChild(toInsert); if (getLogger().isDebugEnabled()) getLogger().debug("InsertNode executed."); // jxpc.setFactory(new AbstractFactory() { // public boolean createObject(JXPathContext context, Pointer pointer, // Object parent, String name, int index) { // // Node parentNode = (Node) parent; // Document targetDoc = parentNode.getOwnerDocument(); // Node toInsert = targetDoc.importNode(InsertNodeJXPathBinding.this.template, true); // parentNode.appendChild(toInsert); // // if (getLogger().isDebugEnabled()) // getLogger().debug("InsertNode jxpath factory executed for index." + index); // return true; // } // }); // // if (getLogger().isDebugEnabled()) // getLogger().debug("done registered factory for inserting node -- " + toString()); }
From source file:org.apache.cocoon.forms.binding.TempRepeaterJXPathBinding.java
public void doLoad(Widget frmModel, JXPathContext jctx) throws BindingException { // (There should be a general widget type checker for all the bindings to use, // coupled with a general informative exception class to throw if the widget is // of the wrong type or null.) Repeater repeater = (Repeater) selectWidget(frmModel, this.repeaterId); if (repeater == null) { String fullId = frmModel.getRequestParameterName(); if (fullId == null || fullId.length() == 0) { fullId = ""; } else {//www . j ava2 s . com fullId = fullId + "."; } throw new RuntimeException("TempRepeaterJXPathBinding: Repeater \"" + fullId + this.repeaterId + "\" does not exist (" + frmModel.getLocation() + ")"); } // Start by clearing the repeater, if necessary. if (this.clearOnLoad) { repeater.clear(); } // Find the location of the repeater data. Pointer repeaterPointer = jctx.getPointer(this.repeaterPath); // Check if there is data present. // // (Otherwise, should we check the leniency config option // to decide whether to be silent or throw an exception?) if (repeaterPointer != null) { // Narrow to repeater context. JXPathContext repeaterContext = jctx.getRelativeContext(repeaterPointer); // Build a jxpath iterator for the repeater row pointers. Iterator rowPointers = repeaterContext.iteratePointers(this.rowPath); // Iterate through the rows of data. int rowNum = 0; while (rowPointers.hasNext()) { // Get or create a row widget. Repeater.RepeaterRow thisRow; if (repeater.getSize() > rowNum) { thisRow = repeater.getRow(rowNum); } else { thisRow = repeater.addRow(); } rowNum++; // Narrow to the row context. Pointer rowPointer = (Pointer) rowPointers.next(); JXPathContext rowContext = repeaterContext.getRelativeContext(rowPointer); // If virtual rows are requested, place a deep clone of the row data // into a temporary node, and narrow the context to this virtual row. // // (A clone of the data is used to prevent modifying the source document. // Otherwise, the appendChild method would remove the data from the source // document. Is this protection worth the penalty of a deep clone?) // // (This implementation of virtual rows currently only supports DOM // bindings, but could easily be extended to support other bindings.) if (virtualRows == true) { Node repeaterNode = (Node) repeaterPointer.getNode(); Node virtualNode = repeaterNode.getOwnerDocument().createElementNS(null, "virtual"); Node node = (Node) rowPointer.getNode(); Node clone = node.cloneNode(true); Node fakeDocElement = node.getOwnerDocument().getDocumentElement().cloneNode(false); virtualNode.appendChild(clone); fakeDocElement.appendChild(virtualNode); rowContext = JXPathContext.newContext(repeaterContext, fakeDocElement); rowContext = rowContext.getRelativeContext(rowContext.getPointer("virtual")); } // Finally, perform the load row binding. this.rowBinding.loadFormFromModel(thisRow, rowContext); } } if (getLogger().isDebugEnabled()) getLogger().debug("done loading rows " + toString()); }
From source file:org.apache.cocoon.forms.binding.TempRepeaterJXPathBinding.java
public void doSave(Widget frmModel, JXPathContext jctx) throws BindingException { // (See comment in doLoad about type checking and throwing a meaningful exception.) Repeater repeater = (Repeater) selectWidget(frmModel, this.repeaterId); // Perform shortcut binding if the repeater is empty // and the deleteIfEmpty config option is selected. if (repeater.getSize() == 0 && this.deleteIfEmpty) { // Delete all of the old data for this repeater. jctx.removeAll(this.repeaterPath); // Otherwise perform the normal save binding. } else {/*from w w w . j ava 2s. com*/ // Narrow to the repeater context, creating the path if it did not exist. JXPathContext repeaterContext = jctx.getRelativeContext(jctx.createPath(this.repeaterPath)); // Start by deleting all of the old row data. repeaterContext.removeAll(this.rowPath); // Verify that repeater is not empty and has an insert row binding. if (repeater.getSize() > 0) { if (this.insertRowBinding != null) { //register the factory! //this.insertRowBinding.saveFormToModel(repeater, repeaterContext); // Iterate through the repeater rows. for (int i = 0; i < repeater.getSize(); i++) { // Narrow to the repeater row context. Pointer rowPointer = repeaterContext.getPointer(this.rowPathInsert); JXPathContext rowContext = repeaterContext.getRelativeContext(rowPointer); // Variables used for virtual rows. // They are initialized here just to keep the compiler happy. Node rowNode = null; Node virtualNode = null; // If virtual rows are requested, create a temporary node and // narrow the context to this initially empty new virtual row. if (virtualRows == true) { rowNode = (Node) rowContext.getContextBean(); Document document = rowNode.getOwnerDocument(); virtualNode = document.createElementNS(null, "virtual"); Node fakeDocElement = document.getDocumentElement().cloneNode(false); fakeDocElement.appendChild(virtualNode); rowContext = JXPathContext.newContext(repeaterContext, fakeDocElement); rowContext = rowContext.getRelativeContext(rowContext.getPointer("virtual")); } // Perform the insert row binding this.insertRowBinding.saveFormToModel(repeater, rowContext); // Perform the save row binding. this.rowBinding.saveFormToModel(repeater.getRow(i), rowContext); // If virtual rows are requested, finish by appending the // children of the virtual row to the real context node. if (virtualRows == true) { NodeList list = virtualNode.getChildNodes(); int count = list.getLength(); for (int j = 0; j < count; j++) { // The list shrinks when a child is appended to the context // node, so we always reference the first child in the list. rowNode.appendChild(list.item(0)); } } getLogger().debug("bound new row"); } } else { getLogger().warn("TempRepeaterBinding has detected rows to insert, " + "but misses the <on-insert-row> binding to do it."); } } } }
From source file:org.apache.cocoon.util.jxpath.DOMFactory.java
private void addDOMElement(Node parent, int index, String tag) { int pos = tag.indexOf(':'); String prefix = null;/*from w w w . ja v a 2s . c o m*/ if (pos != -1) { prefix = tag.substring(0, pos); } String uri = null; Node child = parent.getFirstChild(); int count = 0; while (child != null) { if (child.getNodeName().equals(tag)) { count++; } child = child.getNextSibling(); } Document doc = parent.getOwnerDocument(); if (doc != null) { uri = getNamespaceURI((Element) parent, prefix); } else { if (parent instanceof Document) { doc = (Document) parent; if (prefix != null) { throw new RuntimeException("Cannot map non-null prefix " + "when creating a document element"); } } else { // Shouldn't happen (must be a DocumentType object) throw new RuntimeException("Node of class " + parent.getClass().getName() + " has null owner document " + "but is not a Document"); } } // Keep inserting new elements until we have index + 1 of them while (count <= index) { Node newElement = doc.createElementNS(uri, tag); parent.appendChild(newElement); count++; } }
From source file:org.apache.cocoon.woody.binding.TempRepeaterJXPathBinding.java
public void doLoad(Widget frmModel, JXPathContext jctx) throws BindingException { // (There should be a general widget type checker for all the bindings to use, // coupled with a general informative exception class to throw if the widget is // of the wrong type or null.) Repeater repeater = (Repeater) frmModel.getWidget(this.repeaterId); if (repeater == null) { String fullId = frmModel.getFullyQualifiedId(); if (fullId == null || fullId.length() == 0) { fullId = ""; } else {/* w w w. j av a 2 s . c o m*/ fullId = fullId + "."; } throw new RuntimeException("TempRepeaterJXPathBinding: Repeater \"" + fullId + this.repeaterId + "\" does not exist (" + frmModel.getLocation() + ")"); } // Start by clearing the repeater, if necessary. if (this.clearOnLoad) { repeater.removeRows(); } // Find the location of the repeater data. Pointer repeaterPointer = jctx.getPointer(this.repeaterPath); // Check if there is data present. // // (Otherwise, should we check the leniency config option // to decide whether to be silent or throw an exception?) if (repeaterPointer != null) { // Narrow to repeater context. JXPathContext repeaterContext = jctx.getRelativeContext(repeaterPointer); // Build a jxpath iterator for the repeater row pointers. Iterator rowPointers = repeaterContext.iteratePointers(this.rowPath); // Iterate through the rows of data. int rowNum = 0; while (rowPointers.hasNext()) { // Get or create a row widget. Repeater.RepeaterRow thisRow; if (repeater.getSize() > rowNum) { thisRow = repeater.getRow(rowNum); } else { thisRow = repeater.addRow(); } rowNum++; // Narrow to the row context. Pointer rowPointer = (Pointer) rowPointers.next(); JXPathContext rowContext = repeaterContext.getRelativeContext(rowPointer); // If virtual rows are requested, place a deep clone of the row data // into a temporary node, and narrow the context to this virtual row. // // (A clone of the data is used to prevent modifying the source document. // Otherwise, the appendChild method would remove the data from the source // document. Is this protection worth the penalty of a deep clone?) // // (This implementation of virtual rows currently only supports DOM // bindings, but could easily be extended to support other bindings.) if (virtualRows == true) { Node repeaterNode = (Node) repeaterPointer.getNode(); Node virtualNode = repeaterNode.getOwnerDocument().createElementNS(null, "virtual"); Node clone = ((Node) rowPointer.getNode()).cloneNode(true); virtualNode.appendChild(clone); rowContext = JXPathContext.newContext(repeaterContext, virtualNode); } // Finally, perform the load row binding. this.rowBinding.loadFormFromModel(thisRow, rowContext); } } if (getLogger().isDebugEnabled()) getLogger().debug("done loading rows " + toString()); }
From source file:org.apache.cocoon.woody.binding.TempRepeaterJXPathBinding.java
public void doSave(Widget frmModel, JXPathContext jctx) throws BindingException { // (See comment in doLoad about type checking and throwing a meaningful exception.) Repeater repeater = (Repeater) frmModel.getWidget(this.repeaterId); // Perform shortcut binding if the repeater is empty // and the deleteIfEmpty config option is selected. if (repeater.getSize() == 0 && this.deleteIfEmpty) { // Delete all of the old data for this repeater. jctx.removeAll(this.repeaterPath); // Otherwise perform the normal save binding. } else {/*from w w w. j a va2s.c o m*/ // Narrow to the repeater context, creating the path if it did not exist. JXPathContext repeaterContext = jctx.getRelativeContext(jctx.createPath(this.repeaterPath)); // Start by deleting all of the old row data. repeaterContext.removeAll(this.rowPath); // Verify that repeater is not empty and has an insert row binding. if (repeater.getSize() > 0) { if (this.insertRowBinding != null) { //register the factory! //this.insertRowBinding.saveFormToModel(repeater, repeaterContext); // Iterate through the repeater rows. for (int i = 0; i < repeater.getSize(); i++) { // Narrow to the repeater row context. Pointer rowPointer = repeaterContext.getPointer(this.rowPathInsert); JXPathContext rowContext = repeaterContext.getRelativeContext(rowPointer); // Variables used for virtual rows. // They are initialized here just to keep the compiler happy. Node rowNode = null; Node virtualNode = null; // If virtual rows are requested, create a temporary node and // narrow the context to this initially empty new virtual row. if (virtualRows == true) { rowNode = (Node) rowContext.getContextBean(); virtualNode = rowNode.getOwnerDocument().createElementNS(null, "virtual"); rowContext = JXPathContext.newContext(repeaterContext, virtualNode); } // Perform the insert row binding this.insertRowBinding.saveFormToModel(repeater, rowContext); // Perform the save row binding. this.rowBinding.saveFormToModel(repeater.getRow(i), rowContext); // If virtual rows are requested, finish by appending the // children of the virtual row to the real context node. if (virtualRows == true) { NodeList list = virtualNode.getChildNodes(); int count = list.getLength(); for (int j = 0; j < count; j++) { // The list shrinks when a child is appended to the context // node, so we always reference the first child in the list. rowNode.appendChild(list.item(0)); } } getLogger().debug("bound new row"); } } else { getLogger().warn("TempRepeaterBinding has detected rows to insert, " + "but misses the <on-insert-row> binding to do it."); } } } }
From source file:org.apache.cocoon.xml.dom.DOMUtil.java
/** * Set the value of the DOM node./* w ww .j av a 2 s.c o m*/ * All current children of the node are removed and a new text node * with the value is appended. */ public static void setValueOfNode(Node node, String value) { if (node.getNodeType() == Node.ATTRIBUTE_NODE) { node.setNodeValue(value); } else { while (node.hasChildNodes() == true) { node.removeChild(node.getFirstChild()); } node.appendChild(node.getOwnerDocument().createTextNode(value)); } }
From source file:org.apache.cocoon.xml.dom.DOMUtil.java
/** * Implementation for <code>String</code> : * outputs characters representing the value. * * @param parent The node getting the value * @param text the value/*from w w w.j a va 2s . c om*/ */ public static void valueOf(Node parent, String text) throws ProcessingException { if (text != null) { parent.appendChild(parent.getOwnerDocument().createTextNode(text)); } }