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

org.jvnet.jax_ws_commons.json.SchemaWalker Maven / Gradle / Ivy

package org.jvnet.jax_ws_commons.json;

import com.sun.xml.xsom.XSAnnotation;
import com.sun.xml.xsom.XSAttGroupDecl;
import com.sun.xml.xsom.XSAttributeDecl;
import com.sun.xml.xsom.XSAttributeUse;
import com.sun.xml.xsom.XSComplexType;
import com.sun.xml.xsom.XSComponent;
import com.sun.xml.xsom.XSContentType;
import com.sun.xml.xsom.XSElementDecl;
import com.sun.xml.xsom.XSFacet;
import com.sun.xml.xsom.XSIdentityConstraint;
import com.sun.xml.xsom.XSModelGroup;
import com.sun.xml.xsom.XSModelGroupDecl;
import com.sun.xml.xsom.XSNotation;
import com.sun.xml.xsom.XSParticle;
import com.sun.xml.xsom.XSSchema;
import com.sun.xml.xsom.XSSimpleType;
import com.sun.xml.xsom.XSType;
import com.sun.xml.xsom.XSWildcard;
import com.sun.xml.xsom.XSXPath;
import com.sun.xml.xsom.visitor.XSVisitor;

import java.util.HashSet;
import java.util.Set;

/**
 * Visits the schema components.
 *
 * @author Kohsuke Kawaguchi
 */
public abstract class SchemaWalker implements XSVisitor {

    private final Set visited = new HashSet<>();

    @Override
    public void annotation(final XSAnnotation ann) {
    }

    @Override
    public void attGroupDecl(final XSAttGroupDecl decl) {
        if (!visited.add(decl)) {
            return;
        }
        for (final XSAttributeUse u : decl.getAttributeUses()) {
            attributeUse(u);
        }
    }

    @Override
    public void attributeDecl(final XSAttributeDecl decl) {
        if (!visited.add(decl)) {
            return;
        }
        simpleType(decl.getType());
    }

    @Override
    public void attributeUse(final XSAttributeUse use) {
        if (!visited.add(use)) {
            return;
        }
        attributeDecl(use.getDecl());
    }

    @Override
    public void complexType(final XSComplexType type) {
        if (!visited.add(type)) {
            return;
        }
        type.getContentType().visit(this);
        for (final XSAttributeUse u : type.getAttributeUses()) {
            attributeUse(u);
        }
    }

    @Override
    public void schema(final XSSchema schema) {
        if (!visited.add(schema)) {
            return;
        }
        for (final XSElementDecl e : schema.getElementDecls().values()) {
            elementDecl(e);
        }
        for (final XSAttributeDecl a : schema.getAttributeDecls().values()) {
            attributeDecl(a);
        }
        for (final XSAttGroupDecl a : schema.getAttGroupDecls().values()) {
            attGroupDecl(a);
        }
        for (final XSModelGroupDecl m : schema.getModelGroupDecls().values()) {
            modelGroupDecl(m);
        }
        for (final XSType t : schema.getTypes().values()) {
            t.visit(this);
        }
        for (final XSNotation n : schema.getNotations().values()) {
            notation(n);
        }
    }

    @Override
    public void facet(final XSFacet facet) {
    }

    @Override
    public void notation(final XSNotation notation) {
    }

    @Override
    public void identityConstraint(final XSIdentityConstraint decl) {
    }

    @Override
    public void xpath(final XSXPath xp) {
    }

    @Override
    public void wildcard(final XSWildcard wc) {
    }

    @Override
    public void modelGroupDecl(final XSModelGroupDecl decl) {
        if (!visited.add(decl)) {
            return;
        }
        modelGroup(decl.getModelGroup());
    }

    @Override
    public void modelGroup(final XSModelGroup group) {
        if (!visited.add(group)) {
            return;
        }
        for (final XSParticle p : group.getChildren()) {
            particle(p);
        }
    }

    @Override
    public void elementDecl(final XSElementDecl decl) {
        if (!visited.add(decl)) {
            return;
        }
        decl.getType().visit(this);
    }

    @Override
    public void simpleType(final XSSimpleType simpleType) {
        if (!visited.add(simpleType)) {
            return;
        }
        simpleType.getBaseType().visit(this);
    }

    @Override
    public void particle(final XSParticle particle) {
        if (!visited.add(particle)) {
            return;
        }
        particle.getTerm().visit(this);
    }

    @Override
    public void empty(final XSContentType empty) {
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy