1/*
2 * reserved comment block
3 * DO NOT REMOVE OR ALTER!
4 */
5/*
6 * Licensed to the Apache Software Foundation (ASF) under one or more
7 * contributor license agreements.  See the NOTICE file distributed with
8 * this work for additional information regarding copyright ownership.
9 * The ASF licenses this file to You under the Apache License, Version 2.0
10 * (the "License"); you may not use this file except in compliance with
11 * the License.  You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 */
21
22package com.sun.org.apache.xerces.internal.xs;
23
24/**
25 * This interface represents the Simple Type Definition schema component. This
26 * interface provides several query operations for facet components. Users
27 * can either retrieve the defined facets as XML Schema components, using
28 * the <code>facets</code> and the <code>multiValueFacets</code> attributes;
29 * or users can separately query a facet's properties using methods such as
30 * <code>getLexicalFacetValue</code>, <code>isFixedFacet</code>, etc.
31 */
32public interface XSSimpleTypeDefinition extends XSTypeDefinition {
33    // Variety definitions
34    /**
35     * The variety is absent for the anySimpleType definition.
36     */
37    public static final short VARIETY_ABSENT            = 0;
38    /**
39     * <code>Atomic</code> type.
40     */
41    public static final short VARIETY_ATOMIC            = 1;
42    /**
43     * <code>List</code> type.
44     */
45    public static final short VARIETY_LIST              = 2;
46    /**
47     * <code>Union</code> type.
48     */
49    public static final short VARIETY_UNION             = 3;
50
51    // Facets
52    /**
53     * No facets defined.
54     */
55    public static final short FACET_NONE                = 0;
56    /**
57     * 4.3.1 Length
58     */
59    public static final short FACET_LENGTH              = 1;
60    /**
61     * 4.3.2 minLength.
62     */
63    public static final short FACET_MINLENGTH           = 2;
64    /**
65     * 4.3.3 maxLength.
66     */
67    public static final short FACET_MAXLENGTH           = 4;
68    /**
69     * 4.3.4 pattern.
70     */
71    public static final short FACET_PATTERN             = 8;
72    /**
73     * 4.3.5 whitespace.
74     */
75    public static final short FACET_WHITESPACE          = 16;
76    /**
77     * 4.3.7 maxInclusive.
78     */
79    public static final short FACET_MAXINCLUSIVE        = 32;
80    /**
81     * 4.3.9 maxExclusive.
82     */
83    public static final short FACET_MAXEXCLUSIVE        = 64;
84    /**
85     * 4.3.9 minExclusive.
86     */
87    public static final short FACET_MINEXCLUSIVE        = 128;
88    /**
89     * 4.3.10 minInclusive.
90     */
91    public static final short FACET_MININCLUSIVE        = 256;
92    /**
93     * 4.3.11 totalDigits .
94     */
95    public static final short FACET_TOTALDIGITS         = 512;
96    /**
97     * 4.3.12 fractionDigits.
98     */
99    public static final short FACET_FRACTIONDIGITS      = 1024;
100    /**
101     * 4.3.5 enumeration.
102     */
103    public static final short FACET_ENUMERATION         = 2048;
104
105    /**
106     * A constant defined for the 'ordered' fundamental facet: not ordered.
107     */
108    public static final short ORDERED_FALSE             = 0;
109    /**
110     * A constant defined for the 'ordered' fundamental facet: partially
111     * ordered.
112     */
113    public static final short ORDERED_PARTIAL           = 1;
114    /**
115     * A constant defined for the 'ordered' fundamental facet: total ordered.
116     */
117    public static final short ORDERED_TOTAL             = 2;
118    /**
119     * [variety]: one of {atomic, list, union} or absent.
120     */
121    public short getVariety();
122
123    /**
124     * If variety is <code>atomic</code> the primitive type definition (a
125     * built-in primitive datatype definition or the simple ur-type
126     * definition) is available, otherwise <code>null</code>.
127     */
128    public XSSimpleTypeDefinition getPrimitiveType();
129
130    /**
131     * Returns the closest built-in type category this type represents or
132     * derived from. For example, if this simple type is a built-in derived
133     * type integer the <code>INTEGER_DV</code> is returned.
134     */
135    public short getBuiltInKind();
136
137    /**
138     * If variety is <code>list</code> the item type definition (an atomic or
139     * union simple type definition) is available, otherwise
140     * <code>null</code>.
141     */
142    public XSSimpleTypeDefinition getItemType();
143
144    /**
145     * If variety is <code>union</code> the list of member type definitions (a
146     * non-empty sequence of simple type definitions) is available,
147     * otherwise an empty <code>XSObjectList</code>.
148     */
149    public XSObjectList getMemberTypes();
150
151    /**
152     * [facets]: all facets defined on this type. The value is a bit
153     * combination of FACET_XXX constants of all defined facets.
154     */
155    public short getDefinedFacets();
156
157    /**
158     * Convenience method. [Facets]: check whether a facet is defined on this
159     * type.
160     * @param facetName  The name of the facet.
161     * @return  True if the facet is defined, false otherwise.
162     */
163    public boolean isDefinedFacet(short facetName);
164
165    /**
166     * [facets]: all defined facets for this type which are fixed.
167     */
168    public short getFixedFacets();
169
170    /**
171     * Convenience method. [Facets]: check whether a facet is defined and
172     * fixed on this type.
173     * @param facetName  The name of the facet.
174     * @return  True if the facet is fixed, false otherwise.
175     */
176    public boolean isFixedFacet(short facetName);
177
178    /**
179     * Convenience method. Returns a value of a single constraining facet for
180     * this simple type definition. This method must not be used to retrieve
181     * values for <code>enumeration</code> and <code>pattern</code> facets.
182     * @param facetName The name of the facet, i.e.
183     *   <code>FACET_LENGTH, FACET_TOTALDIGITS</code>.
184     *   To retrieve the value for a pattern or
185     *   an enumeration, see <code>enumeration</code> and
186     *   <code>pattern</code>.
187     * @return A value of the facet specified in <code>facetName</code> for
188     *   this simple type definition or <code>null</code>.
189     */
190    public String getLexicalFacetValue(short facetName);
191
192    /**
193     * A list of enumeration values if it exists, otherwise an empty
194     * <code>StringList</code>.
195     */
196    public StringList getLexicalEnumeration();
197
198    /**
199     * A list of pattern values if it exists, otherwise an empty
200     * <code>StringList</code>.
201     */
202    public StringList getLexicalPattern();
203
204    /**
205     *  Fundamental Facet: ordered.
206     */
207    public short getOrdered();
208
209    /**
210     * Fundamental Facet: cardinality.
211     */
212    public boolean getFinite();
213
214    /**
215     * Fundamental Facet: bounded.
216     */
217    public boolean getBounded();
218
219    /**
220     * Fundamental Facet: numeric.
221     */
222    public boolean getNumeric();
223
224    /**
225     *  A list of constraining facets if it exists, otherwise an empty
226     * <code>XSObjectList</code>. Note: This method must not be used to
227     * retrieve values for <code>enumeration</code> and <code>pattern</code>
228     * facets.
229     */
230    public XSObjectList getFacets();
231
232    /**
233     *  A list of enumeration and pattern constraining facets if it exists,
234     * otherwise an empty <code>XSObjectList</code>.
235     */
236    public XSObjectList getMultiValueFacets();
237
238    /**
239     * A constraining facet object. An instance of XSFacet or XSMultiValueFacet.
240     */
241    public XSObject getFacet(int facetType);
242
243    /**
244     * A sequence of [annotations] or an empty <code>XSObjectList</code>.
245     */
246    public XSObjectList getAnnotations();
247
248}
249