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.

The newest version!
/*
 * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0, which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

package com.sun.xml.xsom.impl.scd;

/*-
 * #%L
 * XSOM
 * %%
 * Copyright (C) 2019 - 2020 Entur
 * %%
 * Licensed under the EUPL, Version 1.1 or – as soon they will be
 * approved by the European Commission - subsequent versions of the
 * EUPL (the "Licence");
 * 
 * You may not use this work except in compliance with the Licence.
 * You may obtain a copy of the Licence at:
 * 
 * http://ec.europa.eu/idabc/eupl5
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the Licence is distributed on an "AS IS" basis,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the Licence for the specific language governing permissions and
 * limitations under the Licence.
 * #L%
 */

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