All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.saxon.expr.ContextMappingIterator Maven / Gradle / Ivy

Go to download

Provides a basic XSLT 2.0 and XQuery 1.0 processor (W3C Recommendations, January 2007). Command line interfaces and implementations of several Java APIs (DOM, XPath, s9api) are also included.

The newest version!
package net.sf.saxon.expr;
import net.sf.saxon.om.Item;
import net.sf.saxon.om.SequenceIterator;
import net.sf.saxon.trans.XPathException;

/**
* ContextMappingIterator merges a sequence of sequences into a single flat
* sequence. It takes as inputs an iteration, and a mapping function to be
* applied to each Item returned by that iteration. The mapping function itself
* returns another iteration. The result is an iteration of the concatenation of all
* the iterations returned by the mapping function.

* * This is a specialization of the MappingIterator class: it differs in that it * sets each item being processed as the context item */ public final class ContextMappingIterator implements SequenceIterator { private SequenceIterator base; private ContextMappingFunction action; private XPathContext context; private SequenceIterator stepIterator = null; private Item current = null; private int position = 0; /** * Construct a ContextMappingIterator that will apply a specified ContextMappingFunction to * each Item returned by the base iterator. * @param action the mapping function to be applied * @param context the processing context. The mapping function is applied to each item returned * by context.getCurrentIterator() in turn. */ public ContextMappingIterator(ContextMappingFunction action, XPathContext context) { base = context.getCurrentIterator(); this.action = action; this.context = context; } public Item next() throws XPathException { Item nextItem; while (true) { if (stepIterator != null) { nextItem = stepIterator.next(); if (nextItem != null) { break; } else { stepIterator = null; } } if (base.next() != null) { // Call the supplied mapping function stepIterator = action.map(context); nextItem = stepIterator.next(); if (nextItem == null) { stepIterator = null; } else { break; } } else { stepIterator = null; current = null; position = -1; return null; } } current = nextItem; position++; return nextItem; } public Item current() { return current; } public int position() { return position; } public SequenceIterator getAnother() throws XPathException { SequenceIterator newBase = base.getAnother(); XPathContext c2 = context; if (c2!=null) { c2 = c2.newMinorContext(); c2.setCurrentIterator(newBase); c2.setOrigin(context.getOrigin()); } return new ContextMappingIterator(action, c2); } /** * Get properties of this iterator, as a bit-significant integer. * * @return the properties of this iterator. This will be some combination of * properties such as {@link net.sf.saxon.om.SequenceIterator#GROUNDED}, {@link net.sf.saxon.om.SequenceIterator#LAST_POSITION_FINDER}, * and {@link net.sf.saxon.om.SequenceIterator#LOOKAHEAD}. It is always * acceptable to return the value zero, indicating that there are no known special properties. * It is acceptable for the properties of the iterator to change depending on its state. */ public int getProperties() { return 0; } /** * Indicate that any nodes returned in the sequence will be atomized. This * means that if it wishes to do so, the implementation can return the typed * values of the nodes rather than the nodes themselves. The implementation * is free to ignore this hint. * @param atomizing true if the caller of this iterator will atomize any * nodes that are returned, and is therefore willing to accept the typed * value of the nodes instead of the nodes themselves. */ // public void setIsAtomizing(boolean atomizing) { // this.atomizing = atomizing; // } } // // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); // you may not use this file except in compliance with the License. You may obtain a copy of the // License at http://www.mozilla.org/MPL/ // // Software distributed under the License is distributed on an "AS IS" basis, // WITHOUT WARRANTY OF ANY KIND, either express or implied. // See the License for the specific language governing rights and limitations under the License. // // The Original Code is: all this file. // // The Initial Developer of the Original Code is Michael H. Kay // // Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved. // // Contributor(s): none. //





© 2015 - 2025 Weber Informatics LLC | Privacy Policy