View Javadoc
1   /*
2    * reserved comment block
3    * DO NOT REMOVE OR ALTER!
4    */
5   /*
6    * Copyright 2001-2004 The Apache Software Foundation.
7    *
8    * Licensed under the Apache License, Version 2.0 (the "License");
9    * you may not use this file except in compliance with the License.
10   * You may obtain a copy of the License at
11   *
12   *      http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing, software
15   * distributed under the License is distributed on an "AS IS" BASIS,
16   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17   * See the License for the specific language governing permissions and
18   * limitations under the License.
19   */
20  
21  package com.sun.org.apache.xerces.internal.impl.xs;
22  
23  import com.sun.org.apache.xerces.internal.impl.dv.ValidatedInfo;
24  import com.sun.org.apache.xerces.internal.impl.dv.XSSimpleType;
25  import com.sun.org.apache.xerces.internal.impl.xs.util.XSObjectListImpl;
26  import com.sun.org.apache.xerces.internal.xni.QName;
27  import com.sun.org.apache.xerces.internal.xs.ShortList;
28  import com.sun.org.apache.xerces.internal.xs.XSAnnotation;
29  import com.sun.org.apache.xerces.internal.xs.XSAttributeDeclaration;
30  import com.sun.org.apache.xerces.internal.xs.XSComplexTypeDefinition;
31  import com.sun.org.apache.xerces.internal.xs.XSConstants;
32  import com.sun.org.apache.xerces.internal.xs.XSNamespaceItem;
33  import com.sun.org.apache.xerces.internal.xs.XSObjectList;
34  import com.sun.org.apache.xerces.internal.xs.XSSimpleTypeDefinition;
35  
36  /**
37   * The XML representation for an attribute declaration
38   * schema component is an <attribute> element information item
39   *
40   * @xerces.internal
41   *
42   * @author Elena Litani, IBM
43   * @author Sandy Gao, IBM
44   * @version $Id: XSAttributeDecl.java,v 1.7 2010-11-01 04:39:55 joehw Exp $
45   */
46  public class XSAttributeDecl implements XSAttributeDeclaration {
47  
48      // scopes
49      public final static short     SCOPE_ABSENT        = 0;
50      public final static short     SCOPE_GLOBAL        = 1;
51      public final static short     SCOPE_LOCAL         = 2;
52  
53      // the name of the attribute
54      String fName = null;
55      // the target namespace of the attribute
56      String fTargetNamespace = null;
57      // the simple type of the attribute
58      XSSimpleType fType = null;
59      public QName fUnresolvedTypeName = null;
60      // value constraint type: default, fixed or !specified
61      short fConstraintType = XSConstants.VC_NONE;
62      // scope
63      short fScope = XSConstants.SCOPE_ABSENT;
64      // enclosing complex type, when the scope is local
65      XSComplexTypeDecl fEnclosingCT = null;
66      // optional annotations
67      XSObjectList fAnnotations = null;
68      // value constraint value
69      ValidatedInfo fDefault = null;
70      // The namespace schema information item corresponding to the target namespace
71      // of the attribute declaration, if it is globally declared; or null otherwise.
72      private XSNamespaceItem fNamespaceItem = null;
73  
74      public void setValues(String name, String targetNamespace,
75              XSSimpleType simpleType, short constraintType, short scope,
76              ValidatedInfo valInfo, XSComplexTypeDecl enclosingCT,
77              XSObjectList annotations) {
78          fName = name;
79          fTargetNamespace = targetNamespace;
80          fType = simpleType;
81          fConstraintType = constraintType;
82          fScope = scope;
83          fDefault = valInfo;
84          fEnclosingCT = enclosingCT;
85          fAnnotations = annotations;
86      }
87  
88      public void reset(){
89          fName = null;
90          fTargetNamespace = null;
91          fType = null;
92          fUnresolvedTypeName = null;
93          fConstraintType = XSConstants.VC_NONE;
94          fScope = XSConstants.SCOPE_ABSENT;
95          fDefault = null;
96          fAnnotations = null;
97      }
98  
99      /**
100      * Get the type of the object, i.e ELEMENT_DECLARATION.
101      */
102     public short getType() {
103         return XSConstants.ATTRIBUTE_DECLARATION;
104     }
105 
106     /**
107      * The <code>name</code> of this <code>XSObject</code> depending on the
108      * <code>XSObject</code> type.
109      */
110     public String getName() {
111         return fName;
112     }
113 
114     /**
115      * The namespace URI of this node, or <code>null</code> if it is
116      * unspecified.  defines how a namespace URI is attached to schema
117      * components.
118      */
119     public String getNamespace() {
120         return fTargetNamespace;
121     }
122 
123     /**
124      * A simple type definition
125      */
126     public XSSimpleTypeDefinition getTypeDefinition() {
127         return fType;
128     }
129 
130     /**
131      * Optional. Either global or a complex type definition (
132      * <code>ctDefinition</code>). This property is absent in the case of
133      * declarations within attribute group definitions: their scope will be
134      * determined when they are used in the construction of complex type
135      * definitions.
136      */
137     public short getScope() {
138         return fScope;
139     }
140 
141     /**
142      * Locally scoped declarations are available for use only within the
143      * complex type definition identified by the <code>scope</code>
144      * property.
145      */
146     public XSComplexTypeDefinition getEnclosingCTDefinition() {
147         return fEnclosingCT;
148     }
149 
150     /**
151      * Value constraint: one of default, fixed.
152      */
153     public short getConstraintType() {
154         return fConstraintType;
155     }
156 
157     /**
158      * Value constraint: The actual value (with respect to the {type
159      * definition}) Should we return Object instead of DOMString?
160      */
161     public String getConstraintValue() {
162         // REVISIT: SCAPI: what's the proper representation
163         return getConstraintType() == XSConstants.VC_NONE ?
164                null :
165                fDefault.stringValue();
166     }
167 
168     /**
169      * Optional. Annotation.
170      */
171     public XSAnnotation getAnnotation() {
172         return (fAnnotations != null) ? (XSAnnotation) fAnnotations.item(0) : null;
173     }
174 
175     /**
176      * Optional. Annotations.
177      */
178     public XSObjectList getAnnotations() {
179         return (fAnnotations != null) ? fAnnotations : XSObjectListImpl.EMPTY_LIST;
180     }
181 
182     public ValidatedInfo getValInfo() {
183         return fDefault;
184     }
185 
186     /**
187      * @see org.apache.xerces.xs.XSObject#getNamespaceItem()
188      */
189     public XSNamespaceItem getNamespaceItem() {
190         return fNamespaceItem;
191     }
192 
193     void setNamespaceItem(XSNamespaceItem namespaceItem) {
194         fNamespaceItem = namespaceItem;
195     }
196 
197     public Object getActualVC() {
198         return getConstraintType() == XSConstants.VC_NONE ?
199                null :
200                fDefault.actualValue;
201     }
202 
203     public short getActualVCType() {
204         return getConstraintType() == XSConstants.VC_NONE ?
205                XSConstants.UNAVAILABLE_DT :
206                fDefault.actualValueType;
207     }
208 
209     public ShortList getItemValueTypes() {
210         return getConstraintType() == XSConstants.VC_NONE ?
211                null :
212                fDefault.itemValueTypes;
213     }
214 
215 } // class XSAttributeDecl