Package org.apache.commons.jxpath

Examples of org.apache.commons.jxpath.JXPathContext


        SAXSource source = new SAXSource(parser, new InputSource());
        DOMResult result = new DOMResult();
        Transformer trans = TransformerFactory.newInstance().newTransformer();
        trans.transform(source, result);
        Node root = ((Document) result.getNode()).getDocumentElement();
        JXPathContext ctx = JXPathContext.newContext(root);

        assertEquals("Wrong name of root element", "database", root.getNodeName());
        assertEquals("Wrong number of children of root", 1, ctx.selectNodes(
                "/*").size());
        assertEquals("Wrong number of tables", 2, ctx.selectNodes(
                "/tables/table").size());
        assertEquals("Wrong name of first table", "users", ctx
                .getValue("/tables/table[1]/name"));
        assertEquals("Wrong number of fields in first table", 5, ctx
                .selectNodes("/tables/table[1]/fields/field").size());
        assertEquals("Wrong attribute value", "system", ctx
                .getValue("/tables/table[1]/@tableType"));
    }
View Full Code Here


     * @param <T> the type of the nodes to be handled
     * @return the newly created context
     */
    public <T> JXPathContext createContext(T root, NodeHandler<T> handler)
    {
        JXPathContext context =
                JXPathContext.newContext(ConfigurationNodePointerFactory
                        .wrapNode(root, handler));
        context.setLenient(true);
        return context;
    }
View Full Code Here

            QueryResult<T> result = createResult(root);
            return Collections.singletonList(result);
        }
        else
        {
            JXPathContext context = createContext(root, handler);
            List<?> results = context.selectNodes(key);
            if (results == null)
            {
                results = Collections.emptyList();
            }
            return convertResults(results);
View Full Code Here

        SAXSource source = new SAXSource(creader, new InputSource());
        DOMResult result = new DOMResult();
        Transformer trans = TransformerFactory.newInstance().newTransformer();
        trans.transform(source, result);
        Node root = ((Document) result.getNode()).getDocumentElement();
        JXPathContext ctx = JXPathContext.newContext(root);

        assertEquals("Wrong root name", rootName, root.getNodeName());
        assertEquals("Wrong number of children", 3, ctx.selectNodes("/*").size());

        check(ctx, "world/continents/continent", CONTINENTS);
        check(ctx, "world/greeting", new String[] { "Hello", "Salute" });
        check(ctx, "world/wish", "Peace");
        check(ctx, "application/mail/smtp", "smtp.mymail.org");
View Full Code Here

    }

        EnhancedRepeater rep = (EnhancedRepeater) repeater;
    rep.doPageSave();
    Pointer ptr = jxpc.getPointer(super.getRepeaterPath());
    JXPathContext repeaterContext = jxpc.getRelativeContext(ptr);
    RepeaterJXPathCollection collection = rep.getCollection();
        // iterate updated rows. note: we don't iterate over the whole context
        for (Iterator iter = collection.getUpdatedRows().iterator(); iter.hasNext();) {
            RepeaterItem item = (RepeaterItem) iter.next();
            getRowBinding().saveFormToModel(item.getRow(), item.getContext());
        }

        for (Iterator iter = collection.getDeletedRows().iterator(); iter.hasNext();) {
            RepeaterItem item = (RepeaterItem) iter.next();
            jxpc.removePath(item.getContext().createPath(".").asPath());
        }

        // insert rows
        int indexCount = collection.getOriginalCollectionSize() - collection.getDeletedRows().size();
        for (Iterator iter = collection.getInsertedRows().iterator(); iter.hasNext();) {
            indexCount++;
            RepeaterItem item= (RepeaterItem) iter.next();

            // Perform the insert row binding.
            if (getInsertRowBinding() != null) {
              getInsertRowBinding().saveFormToModel(item.getRow(), repeaterContext);
            }
            // -->  create the path to let the context be created
            Pointer newRowContextPointer = repeaterContext.createPath(
                    super.getInsertRowPath() + "[" + indexCount + "]");
            JXPathContext newRowContext =
                repeaterContext.getRelativeContext(newRowContextPointer);
            //    + rebind to children for update
            super.getRowBinding().saveFormToModel(item.getRow(), newRowContext);
        }
  }
View Full Code Here

        if (ptr.getNode() != null) {
            // There are some nodes to load from
            final int initialSize = repeater.getSize();

            // build a jxpath iterator for pointers
            JXPathContext repeaterContext = jxpc.getRelativeContext(ptr);
            Iterator rowPointers = repeaterContext.iteratePointers(this.rowPath);
            //iterate through it
            int currentRow = 0;
            while (rowPointers.hasNext()) {
                // create a new row, take that as the frmModelSubContext
                Repeater.RepeaterRow thisRow;
                if (currentRow < initialSize) {
                    thisRow = repeater.getRow(currentRow++);
                } else {
                    thisRow = repeater.addRow();
                }
                // make a jxpath ObjectModelSubcontext on the iterated element
                Pointer jxp = (Pointer)rowPointers.next();
                JXPathContext rowContext = repeaterContext.getRelativeContext(jxp);
                // hand it over to children
                if (this.identityBinding != null) {
                    this.identityBinding.loadFormFromModel(thisRow, rowContext);
                }
                this.rowBinding.loadFormFromModel(thisRow, rowContext);
View Full Code Here

    throws BindingException {
        // Find the repeater
        Repeater repeater = (Repeater) selectWidget(frmModel, this.repeaterId);

        // and his context, creating the path if needed
        JXPathContext repeaterContext =
            jxpc.getRelativeContext(jxpc.createPath(this.repeaterPath));

        // create set of updatedRowIds
        Set updatedRows = new HashSet();
        //create list of rows to insert at end
        List rowsToInsert = new ArrayList();

        // iterate rows in the form model...
        int formRowCount = repeater.getSize();
        for (int i = 0; i < formRowCount; i++) {
            Repeater.RepeaterRow thisRow = repeater.getRow(i);

            // Get the identity
            List identity = getIdentity(thisRow);

            if (hasNonNullElements(identity)) {
                // iterate nodes to find match
                Iterator rowPointers = repeaterContext.iteratePointers(this.rowPath);
                boolean found = false;
                while (rowPointers.hasNext()) {
                    Pointer jxp = (Pointer) rowPointers.next();
                    JXPathContext rowContext = repeaterContext.getRelativeContext(jxp);
                    List contextIdentity = getIdentity(rowContext);
                    if (ListUtils.isEqualList(identity, contextIdentity)) {
                        // match! --> bind to children
                        this.rowBinding.saveFormToModel(thisRow, rowContext);
                        //        --> store rowIdValue in list of updatedRowIds
                        updatedRows.add(identity);
                        found = true;
                        break;
                    }
                }
                if (!found) {
                    // this is a new row
                    rowsToInsert.add(thisRow);
                    // also add it to the updated row id's so that this row doesn't get deleted
                    updatedRows.add(identity);
                }
            } else {
                // if there is no value to determine the identity --> this is a new row
                rowsToInsert.add(thisRow);
            }
        }
        // Iterate again nodes for deletion
        Iterator rowPointers = repeaterContext.iteratePointers(this.rowPath);
        List rowsToDelete = new ArrayList();
        while (rowPointers.hasNext()) {
            Pointer jxp = (Pointer)rowPointers.next();
            JXPathContext rowContext = repeaterContext.getRelativeContext((Pointer)jxp.clone());
            List contextIdentity = getIdentity(rowContext);
            // check if the identity of the rowContext is in the updated rows
            //     if not --> bind for delete
            if (!isIdentityInUpdatedRows(updatedRows, contextIdentity)) {
                rowsToDelete.add(rowContext);
            }
        }
        if (rowsToDelete.size() > 0) {
            // run backwards through the list, so that we don't get into
            // trouble by shifting indexes
            for (int i = rowsToDelete.size() - 1; i >= 0; i--) {
                if (this.deleteRowBinding != null) {
                    this.deleteRowBinding.saveFormToModel(frmModel,
                        rowsToDelete.get(i));
                } else {
                    // Simply remove the corresponding path
                    ((JXPathContext)rowsToDelete.get(i)).removePath(".");
                }
            }
        }
        // count how many we have now
        int indexCount = 1;
        rowPointers = repeaterContext.iteratePointers(this.rowPathForInsert);
        while (rowPointers.hasNext()) {
            rowPointers.next();
            indexCount++;
        }
        // end with rows to insert (to make sure they don't get deleted!)
        if (rowsToInsert.size() > 0) {
                Iterator rowIterator = rowsToInsert.iterator();
                //register the factory!
                while (rowIterator.hasNext()) {
                    Repeater.RepeaterRow thisRow = (Repeater.RepeaterRow)rowIterator.next();
                    // Perform the insert row binding.
                    if (this.insertRowBinding != null) {
                        this.insertRowBinding.saveFormToModel(repeater, repeaterContext);
                    }
                    // -->  create the path to let the context be created
                    Pointer newRowContextPointer = repeaterContext.createPath(
                            this.rowPathForInsert + "[" + indexCount + "]");
                    JXPathContext newRowContext =
                        repeaterContext.getRelativeContext(newRowContextPointer);
                    if (getLogger().isDebugEnabled()) {
                        getLogger().debug("inserted row at " + newRowContextPointer.asPath());
                    }
                    //    + rebind to children for update
View Full Code Here

     * @param descriptor The plugin descriptor
     * @param path The XPath-ish search expression
     * @return The matching element or elements from the descriptor
     */
    public static Object find(PluginDescriptor descriptor, String path) {
        JXPathContext context = JXPathContext.newContext(descriptor);
        return context.getValue(path);
    }
View Full Code Here

     * @param results the results
     * @return the mock context
     */
    private JXPathContext expectSelect(Object... results)
    {
        JXPathContext ctx = EasyMock.createMock(JXPathContext.class);
        EasyMock.expect(ctx.selectNodes(TEST_KEY)).andReturn(
                Arrays.asList(results));
        EasyMock.replay(ctx);
        return ctx;
    }
View Full Code Here

     * Tests the query() method with an expression yielding a node.
     */
    @Test
    public void testQueryNodeExpression()
    {
        JXPathContext ctx = expectSelect(root);
        XPathExpressionEngine engine = setUpEngine(ctx);
        List<QueryResult<ImmutableNode>> result =
                engine.query(root, TEST_KEY, handler);
        assertEquals("Incorrect number of results", 1, result.size());
        assertSame("Wrong result node", root, result.get(0).getNode());
View Full Code Here

TOP

Related Classes of org.apache.commons.jxpath.JXPathContext

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.