/*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://jwsdp.dev.java.net/CDDLv1.0.html
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://jwsdp.dev.java.net/CDDLv1.0.html If applicable,
* add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your
* own identifying information: Portions Copyright [yyyy]
* [name of copyright owner]
*/
package com.sun.xml.xsom;
/**
* Base interface for {@link XSComplexType} and {@link XSSimpleType}.
*
* @author
* Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
*/
public interface XSType extends XSDeclaration {
/**
* Returns the base type of this type.
*
* Note that if this type represents <tt>xs:anyType</tt>, this method returns itself.
* This is awkward as an API, but it follows the schema specification.
*
* @return always non-null.
*/
XSType getBaseType();
final static int EXTENSION = 1;
final static int RESTRICTION = 2;
final static int SUBSTITUTION = 4;
int getDerivationMethod();
/** Returns true if <code>this instanceof XSSimpleType</code>. */
boolean isSimpleType();
/** Returns true if <code>this instanceof XSComplexType</code>. */
boolean isComplexType();
/**
* Lists up types that can substitute this type by using xsi:type.
* Includes this type itself.
* <p>
* This method honors the block flag.
*/
XSType[] listSubstitutables();
/**
* If this {@link XSType} is redefined by another type,
* return that component.
*
* @return null
* if this component has not been redefined.
*/
XSType getRedefinedBy();
/**
* Returns the number of complex types that redefine this component.
*
* <p>
* For example, if A is redefined by B and B is redefined by C,
* A.getRedefinedCount()==2, B.getRedefinedCount()==1, and
* C.getRedefinedCount()==0.
*/
int getRedefinedCount();
/** Casts this object to XSSimpleType if possible, otherwise returns null. */
XSSimpleType asSimpleType();
/** Casts this object to XSComplexType if possible, otherwise returns null. */
XSComplexType asComplexType();
/**
* Returns true if this type is derived from the specified type.
*
* <p>
* Note that <tt>t.isDerivedFrom(t)</tt> returns true.
*/
boolean isDerivedFrom( XSType t );
}