blob: 45b9728f2d760c30103173729b2772865302ac40 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ws.commons.schema.walker;
import org.apache.ws.commons.schema.XmlSchemaAll;
import org.apache.ws.commons.schema.XmlSchemaAny;
import org.apache.ws.commons.schema.XmlSchemaAnyAttribute;
import org.apache.ws.commons.schema.XmlSchemaChoice;
import org.apache.ws.commons.schema.XmlSchemaElement;
import org.apache.ws.commons.schema.XmlSchemaSequence;
/**
* Defines a visitor interface for notifications when walking an
* {@link org.apache.ws.commons.schema.XmlSchema} using the
* {@link XmlSchemaWalker}.
* <p>
* Use this interface in conjunction with <code>XmlSchemaWalker</code> to
* receive events as an {@link org.apache.ws.commons.schema.XmlSchema} is
* traversed.
* </p>
*/
public interface XmlSchemaVisitor {
/**
* A notification that an {@link XmlSchemaElement} has been entered. The
* element returned will be a true representation of the element at that
* point in the schema: if the schema defines a reference, the reference is
* followed and merged with its global definition.
* <p>
* The first time this element is reached, all of its attributes will be
* visited (if any). Once the attributes have been visited,
* {@link #onEndAttributes(XmlSchemaElement, XmlSchemaTypeInfo)} will be
* called. The only exception is when the element has no type information,
* at which point the next call will be to
* {@link #onExitElement(XmlSchemaElement, XmlSchemaTypeInfo, boolean)}.
* </p>
* <p>
* On all subsequent visits to this element, <code>previouslyVisited</code>
* will be set to <code>true</code> and the attributes will not be
* revisited. The next call will be to
* {@link #onExitElement(XmlSchemaElement, XmlSchemaTypeInfo, boolean)}, as
* all of the element's attributes and children have already been provided.
* </p>
*
* @param element The element the walker is currently entering.
* @param typeInfo The type information of that element.
* @param previouslyVisited Whether the element was previously visited.
*/
void onEnterElement(XmlSchemaElement element, XmlSchemaTypeInfo typeInfo, boolean previouslyVisited);
/**
* Signifies the end of the element that was previously entered. Provides
* the same information about the element as was provided in
* {@link #onEnterElement(XmlSchemaElement, XmlSchemaTypeInfo, boolean)} in
* the event it is easier to process on exit.
*
* @param element The element the walker is currently exiting.
* @param typeInfo The type information of that element.
* @param previouslyVisited Whether the element was previously visited.
*/
void onExitElement(XmlSchemaElement element, XmlSchemaTypeInfo typeInfo, boolean previouslyVisited);
/**
* This method is called for each attribute associated with the element,
* providing the {@link XmlSchemaAttrInfo} representing that attribute.
*
* @param element The element owing the attribute.
* @param attrInfo The attribute information.
*/
void onVisitAttribute(XmlSchemaElement element, XmlSchemaAttrInfo attrInfo);
/**
* This method is called when all of the attributes have been processed
* (provided the element has a type defined). This is a convenience method
* to allow the visitor to be notified when no more attributes are coming,
* and the walker will be traversing the element's children.
*
* @param element The element the walker is traversing.
* @param typeInfo Type information about the element, if it is easier to
* process here.
*/
void onEndAttributes(XmlSchemaElement element, XmlSchemaTypeInfo typeInfo);
/**
* This method is called when the walker enters a substitution group. This
* method is called providing the base type, and then
* {@link #onEnterElement(XmlSchemaElement, XmlSchemaTypeInfo, boolean)} is
* called for all types in the substitution group, starting with the base
* type.
* <p>
* The only exception is when the base type of the substitution group is
* abstract ({@link XmlSchemaElement#isAbstract()} returns <code>true</code>
* ). When this happens,
* {@link #onEnterElement(XmlSchemaElement, XmlSchemaTypeInfo, boolean)} is
* not called with the abstract type, as there is no information to provide.
* </p>
* <p>
* If the root element is the base of a substitution group, this method will
* be the first one called. Otherwise,
* {@link #onEnterElement(XmlSchemaElement, XmlSchemaTypeInfo, boolean)}
* will be called with the root element.
* </p>
*
* @param base The {@link XmlSchemaElement} representing the base of the
* substitution group.
*/
void onEnterSubstitutionGroup(XmlSchemaElement base);
/**
* Called when the end of the substitution group is reached. The base
* element of the substitution group is provided for convenience.
*
* @param base The base element of the subtitution group.
*/
void onExitSubstitutionGroup(XmlSchemaElement base);
/**
* Called when an all group is entered.
*
* @param all The {@link XmlSchemaAll} representing the all group.
*/
void onEnterAllGroup(XmlSchemaAll all);
/**
* Called when an all group is exited.
*
* @param all The {@link XmlSchemaAll} representing the all group.
*/
void onExitAllGroup(XmlSchemaAll all);
/**
* Called when a choice group is entered.
*
* @param choice The {@link XmlSchemaChoice} representing the choice group.
*/
void onEnterChoiceGroup(XmlSchemaChoice choice);
/**
* Called when a choice group is exited.
*
* @param choice The {@link XmlSchemaChoice} representing the choice group.
*/
void onExitChoiceGroup(XmlSchemaChoice choice);
/**
* Called when a sequence is entered.
*
* @param seq The {@link XmlSchemaSequence} representing the sequence.
*/
void onEnterSequenceGroup(XmlSchemaSequence seq);
/**
* Called when a sequence is exited.
*
* @param seq The {@link XmlSchemaSequence} representing the sequence.
*/
void onExitSequenceGroup(XmlSchemaSequence seq);
/**
* Called when a wildcard element is entered.
*
* @param any The {@link XmlSchemaAny} representing the wildcard element.
*/
void onVisitAny(XmlSchemaAny any);
/**
* Called when a wildcard attribute is visited. If an element has a wildcard
* element, this will be called after all other attributes have been
* visited, and before the call to
* {@link #onEndAttributes(XmlSchemaElement, XmlSchemaTypeInfo)}.
*
* @param element The owning element.
* @param anyAttr The {@link XmlSchemaAnyAttribute} representing the
* wildcard attribute.
*/
void onVisitAnyAttribute(XmlSchemaElement element, XmlSchemaAnyAttribute anyAttr);
}