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

com.sun.xml.xsom.impl.scd.Step Maven / Gradle / Ivy

Go to download

XML Schema Object Model (XSOM) is a Java library that allows applications to easily parse XML Schema documents and inspect information in them. It is expected to be useful for applications that need to take XML Schema as an input.

There is a newer version: 20140925
Show newest version
package com.sun.xml.xsom.impl.scd;

import com.sun.xml.xsom.XSComponent;
import com.sun.xml.xsom.XSDeclaration;
import com.sun.xml.xsom.XSFacet;
import com.sun.xml.xsom.XSType;
import com.sun.xml.xsom.SCD;
import com.sun.xml.xsom.XSSchema;
import com.sun.xml.xsom.impl.UName;

import java.util.Iterator;

/**
 * Building block of {@link SCD}.
 *
 * @author Kohsuke Kawaguchi
 */
public abstract class Step {
    public final Axis axis;

    /**
     * 'Predicate' in SCD designates the index of the item. -1 if there's no predicate.
     * Predicate starts from 1.
     *
     * 

* Because of the parsing order this parameter cannot be marked * final, even though it's immutable once it's parsed. */ int predicate = -1; protected Step(Axis axis) { this.axis = axis; } /** * Perform filtering (which is different depending on the kind of step.) */ protected abstract Iterator filter( Iterator base ); /** * Evaluate this step against the current node set * and returns matched nodes. */ public final Iterator evaluate(Iterator nodeSet) { // list up the whole thing Iterator r = new Iterators.Map(nodeSet) { protected Iterator apply(XSComponent contextNode) { return filter(axis.iterator(contextNode)); } }; // avoid duplicates r = new Iterators.Unique(r); if(predicate>=0) { T item=null; for( int i=predicate; i>0; i-- ) { if(!r.hasNext()) return Iterators.empty(); item = r.next(); } return new Iterators.Singleton(item); } return r; } /** * Matches any name. */ static final class Any extends Step { public Any(Axis axis) { super(axis); } // no filtering. protected Iterator filter(Iterator base) { return base; } } private static abstract class Filtered extends Step { protected Filtered(Axis axis) { super(axis); } protected Iterator filter(Iterator base) { return new Iterators.Filter(base) { protected boolean matches(T d) { return match(d); } }; } protected abstract boolean match(T d); } /** * Matches a particular name. */ static final class Named extends Filtered { private final String nsUri; private final String localName; public Named(Axis axis, UName n) { this(axis,n.getNamespaceURI(),n.getName()); } public Named(Axis axis, String nsUri, String localName) { super(axis); this.nsUri = nsUri; this.localName = localName; } protected boolean match(XSDeclaration d) { return d.getName().equals(localName) && d.getTargetNamespace().equals(nsUri); } } /** * Matches anonymous types. */ static final class AnonymousType extends Filtered { public AnonymousType(Axis axis) { super(axis); } protected boolean match(XSType node) { return node.isLocal(); } } /** * Matches a particular kind of facets. */ static final class Facet extends Filtered { private final String name; public Facet(Axis axis, String facetName) { super(axis); this.name = facetName; } protected boolean match(XSFacet f) { return f.getName().equals(name); } } /** * Matches a schema in a particular namespace. */ static final class Schema extends Filtered { private final String uri; public Schema(Axis axis, String uri) { super(axis); this.uri = uri; } protected boolean match(XSSchema d) { return d.getTargetNamespace().equals(uri); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy