001: /*
002: * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.xml.internal.xsom;
027:
028: import com.sun.xml.internal.xsom.visitor.XSSimpleTypeFunction;
029: import com.sun.xml.internal.xsom.visitor.XSSimpleTypeVisitor;
030:
031: /**
032: * Simple type.
033: *
034: * @author
035: * Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
036: */
037: public interface XSSimpleType extends XSType, XSContentType {
038: /**
039: * Gets the base type as XSSimpleType.
040: *
041: * Equivalent to
042: * <code>
043: * (XSSimpleType)getBaseType()
044: * </code>
045: * Since this is a simple type, we know that the base type
046: * is also a simple type.
047: *
048: * The only exception is xs:anySimpleType, which has xs:anyType
049: * as the base type.
050: *
051: * @return
052: * null if this is xs:anySimpleType. Otherwise non-null.
053: */
054: XSSimpleType getSimpleBaseType();
055:
056: /**
057: * Gets the variety of this simple type.
058: */
059: XSVariety getVariety();
060:
061: /**
062: * Returns true if this type definition is marked as 'final'
063: * with respect to the given {@link XSVariety}.
064: *
065: * @return
066: * true if the type is marked final.
067: */
068: boolean isFinal(XSVariety v);
069:
070: /**
071: * If this {@link XSSimpleType} is redefined by another simple type,
072: * return that component.
073: *
074: * @return null
075: * if this component has not been redefined.
076: */
077: public XSSimpleType getRedefinedBy();
078:
079: /**
080: * Gets the effective facet object of the given name.
081: *
082: * <p>
083: * For example, if a simple type "foo" is derived from
084: * xs:string by restriction with the "maxLength" facet and
085: * another simple type "bar" is derived from "foo" by
086: * restriction with another "maxLength" facet, this method
087: * will return the latter one, because that is the most
088: * restrictive, effective facet.
089: *
090: * <p>
091: * For those facets that can have multiple values
092: * (pattern facets and enumeration facets), this method
093: * will return only the first one.
094: * TODO: allow clients to access all of them by some means.
095: *
096: * @return
097: * If this datatype has a facet of the given name,
098: * return that object. If the facet is not specified
099: * anywhere in its derivation chain, null will be returned.
100: */
101: XSFacet getFacet(String name);
102:
103: void visit(XSSimpleTypeVisitor visitor);
104:
105: <T> T apply(XSSimpleTypeFunction<T> function);
106:
107: /** Returns true if <code>this instanceof XSRestrictionSimpleType</code>. */
108: boolean isRestriction();
109:
110: /** Returns true if <code>this instanceof XSListSimpleType</code>. */
111: boolean isList();
112:
113: /** Returns true if <code>this instanceof XSUnionSimpleType</code>. */
114: boolean isUnion();
115:
116: XSRestrictionSimpleType asRestriction();
117:
118: XSListSimpleType asList();
119:
120: XSUnionSimpleType asUnion();
121: }
|