Example usage for org.apache.commons.jxpath JXPathContext newContext

List of usage examples for org.apache.commons.jxpath JXPathContext newContext

Introduction

In this page you can find the example usage for org.apache.commons.jxpath JXPathContext newContext.

Prototype

public static JXPathContext newContext(JXPathContext parentContext, Object contextBean) 

Source Link

Document

Creates a new JXPathContext with the specified bean as the root node and the specified parent context.

Usage

From source file:jp.go.nict.langrid.bpel.deploy.BPRDeployer.java

/**
 * /*from ww  w .j  av  a 2  s .co  m*/
 * 
 */
static DeploymentResult parseResult(String aResult) throws SAXException, IOException {
    DeploymentResult result = new DeploymentResult();
    result.setSourceString(aResult);

    JXPathContext context = JXPathUtil.newXMLContext(aResult);
    context.setLenient(true);

    JXPathContext summary = JXPathContext.newContext(context,
            context.getPointer("/deploymentSummary").getNode());
    result.setSummaryErrorCount(Integer.parseInt(summary.getValue("/@numErrors").toString()));
    result.setSummaryWarningCount(Integer.parseInt(summary.getValue("/@numWarnings").toString()));
    result.setSummaryMessages(summary.getValue("/globalMessages").toString());

    summary.setLenient(true);
    Node deploymentInfoNode = (Node) summary.getPointer("/deploymentInfo").getNode();
    if (deploymentInfoNode != null) {
        JXPathContext info = JXPathContext.newContext(summary, deploymentInfoNode);
        result.setDeploymentErrorCount(Integer.parseInt(info.getValue("/@numErrors").toString()));
        result.setDeploymentWarningCount(Integer.parseInt(info.getValue("/@numWarnings").toString()));
        result.setDeployed(Boolean.parseBoolean(info.getValue("/@deployed").toString()));
        result.setPddFilename(info.getValue("/@pddName").toString());
        result.setDeploymentLog(info.getValue("/log").toString());
    }
    return result;
}

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 {//from  w  ww.jav  a 2s. co  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.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 {/* w  w  w . j  a  v a 2  s . c  om*/

        // 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.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 {/*  ww w  .  j a v a  2s .co  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  ww  w  .java  2s .co  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.eclipse.e4.emf.internal.xpath.JXPathContextImpl.java

/**
 * Create a new child context/*  www  .  jav  a  2 s . c  o  m*/
 *
 * @param parentContext
 *            the parent
 * @param contextBean
 *            the context bean (=root of the xpath expression)
 */
JXPathContextImpl(XPathContext parentContext, Object contextBean) {
    JXPathContext jContext = ((JXPathContextImpl) parentContext).getJXPathContext();
    this.context = JXPathContext.newContext(jContext, contextBean);
}

From source file:org.firesoa.common.jxpath.XMLModelTestCase.java

public void testNamespaceMapping() {
    context.registerNamespace("rate", "priceNS");
    context.registerNamespace("goods", "productNS");

    assertEquals("Context node namespace resolution", "priceNS", context.getNamespaceURI("price"));

    assertEquals("Registered namespace resolution", "priceNS", context.getNamespaceURI("rate"));

    // child:: with a namespace and wildcard
    assertXPathValue(context, "count(vendor/product/rate:*)", new Double(2));

    assertXPathValue(context, "vendor[1]/product[1]/rate:amount[1]/@rate:discount", "10%");
    assertXPathValue(context, "vendor[1]/product[1]/rate:amount[1]/@price:discount", "10%");
    assertXPathValue(context, "vendor[1]/product[1]/price:amount[1]/@rate:discount", "10%");
    assertXPathValue(context, "vendor[1]/product[1]/price:amount[1]/@price:discount", "10%");

    // Preference for externally registered namespace prefix
    assertXPathValueAndPointer(context, "//product:name", "Box of oranges",
            "/vendor[1]/product[1]/goods:name[1]");

    // Same, but with a child context        
    JXPathContext childCtx = JXPathContext.newContext(context, context.getContextBean());
    assertXPathValueAndPointer(childCtx, "//product:name", "Box of oranges",
            "/vendor[1]/product[1]/goods:name[1]");

    // Same, but with a relative context        
    JXPathContext relativeCtx = context.getRelativeContext(context.getPointer("/vendor"));
    assertXPathValueAndPointer(relativeCtx, "product/product:name", "Box of oranges",
            "/vendor[1]/product[1]/goods:name[1]");
}

From source file:org.lockss.daemon.TitleSetXpath.java

/** Filter a collection of titles by the xpath predicate
 * @param allTitles collection of {@link TitleConfig}s to be filtered
 * @return a collection of {@link TitleConfig}s
 *//*from  www .ja v  a 2s . c  o  m*/
protected Collection<TitleConfig> filterTitles(Collection<TitleConfig> allTitles) {

    JXPathContext context = JXPathContext.newContext(sharedContext, allTitles);
    return selectNodes(expr, context);
}