1 /*
2 * reserved comment block
3 * DO NOT REMOVE OR ALTER!
4 */
5 /*
6 * Copyright 2002-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.dom;
22
23 import java.io.IOException;
24 import java.io.NotSerializableException;
25 import java.io.ObjectInputStream;
26 import java.io.ObjectOutputStream;
27
28 import com.sun.org.apache.xerces.internal.xs.ElementPSVI;
29 import com.sun.org.apache.xerces.internal.xs;
30
31 /**
32 * Element namespace implementation; stores PSVI element items.
33 *
34 * @xerces.internal
35 *
36 * @author Sandy Gao, IBM
37 *
38 */
39 public class PSVIElementNSImpl extends ElementNSImpl implements ElementPSVI {
40
41 /** Serialization version. */
42 static final long serialVersionUID = 6815489624636016068L;
43
44 /**
45 * Construct an element node.
46 */
47 public PSVIElementNSImpl(CoreDocumentImpl ownerDocument, String namespaceURI,
48 String qualifiedName, String localName) {
49 super(ownerDocument, namespaceURI, qualifiedName, localName);
50 }
51
52 /**
53 * Construct an element node.
54 */
55 public PSVIElementNSImpl(CoreDocumentImpl ownerDocument, String namespaceURI,
56 String qualifiedName) {
57 super(ownerDocument, namespaceURI, qualifiedName);
58 }
59
60 /** element declaration */
61 protected XSElementDeclaration fDeclaration = null;
62
63 /** type of element, could be xsi:type */
64 protected XSTypeDefinition fTypeDecl = null;
65
66 /** true if clause 3.2 of Element Locally Valid (Element) (3.3.4)
67 * is satisfied, otherwise false
68 */
69 protected boolean fNil = false;
70
71 /** false if the element value was provided by the schema; true otherwise.
72 */
73 protected boolean fSpecified = true;
74
75 /** schema normalized value property */
76 protected String fNormalizedValue = null;
77
78 /** schema actual value */
79 protected Object fActualValue = null;
80
81 /** schema actual value type */
82 protected short fActualValueType = XSConstants.UNAVAILABLE_DT;
83
84 /** actual value types if the value is a list */
85 protected ShortList fItemValueTypes = null;
86
87 /** http://www.w3.org/TR/xmlschema-1/#e-notation*/
88 protected XSNotationDeclaration fNotation = null;
89
90 /** member type definition against which element was validated */
91 protected XSSimpleTypeDefinition fMemberType = null;
92
93 /** validation attempted: none, partial, full */
94 protected short fValidationAttempted = ElementPSVI.VALIDATION_NONE;
95
96 /** validity: valid, invalid, unknown */
97 protected short fValidity = ElementPSVI.VALIDITY_NOTKNOWN;
98
99 /** error codes */
100 protected StringList fErrorCodes = null;
101
102 /** validation context: could be QName or XPath expression*/
103 protected String fValidationContext = null;
104
105 /** the schema information property */
106 protected XSModel fSchemaInformation = null;
107
108 //
109 // ElementPSVI methods
110 //
111
112 /**
113 * [schema default]
114 *
115 * @return The canonical lexical representation of the declaration's {value constraint} value.
116 * @see <a href="http://www.w3.org/TR/xmlschema-1/#e-schema_default>XML Schema Part 1: Structures [schema default]</a>
117 */
118 public String getSchemaDefault() {
119 return fDeclaration == null ? null : fDeclaration.getConstraintValue();
120 }
121
122 /**
123 * [schema normalized value]
124 *
125 *
126 * @see <a href="http://www.w3.org/TR/xmlschema-1/#e-schema_normalized_value>XML Schema Part 1: Structures [schema normalized value]</a>
127 * @return the normalized value of this item after validation
128 */
129 public String getSchemaNormalizedValue() {
130 return fNormalizedValue;
131 }
132
133 /**
134 * [schema specified]
135 * @see <a href="http://www.w3.org/TR/xmlschema-1/#e-schema_specified">XML Schema Part 1: Structures [schema specified]</a>
136 * @return false value was specified in schema, true value comes from the infoset
137 */
138 public boolean getIsSchemaSpecified() {
139 return fSpecified;
140 }
141
142 /**
143 * Determines the extent to which the document has been validated
144 *
145 * @return return the [validation attempted] property. The possible values are
146 * NO_VALIDATION, PARTIAL_VALIDATION and FULL_VALIDATION
147 */
148 public short getValidationAttempted() {
149 return fValidationAttempted;
150 }
151
152 /**
153 * Determine the validity of the node with respect
154 * to the validation being attempted
155 *
156 * @return return the [validity] property. Possible values are:
157 * UNKNOWN_VALIDITY, INVALID_VALIDITY, VALID_VALIDITY
158 */
159 public short getValidity() {
160 return fValidity;
161 }
162
163 /**
164 * A list of error codes generated from validation attempts.
165 * Need to find all the possible subclause reports that need reporting
166 *
167 * @return Array of error codes
168 */
169 public StringList getErrorCodes() {
170 return fErrorCodes;
171 }
172
173
174 // This is the only information we can provide in a pipeline.
175 public String getValidationContext() {
176 return fValidationContext;
177 }
178
179 /**
180 * [nil]
181 * @see <a href="http://www.w3.org/TR/xmlschema-1/#e-nil>XML Schema Part 1: Structures [nil]</a>
182 * @return true if clause 3.2 of Element Locally Valid (Element) (3.3.4) above is satisfied, otherwise false
183 */
184 public boolean getNil() {
185 return fNil;
186 }
187
188 /**
189 * [notation]
190 * @see <a href="http://www.w3.org/TR/xmlschema-1/#e-notation>XML Schema Part 1: Structures [notation]</a>
191 * @return The notation declaration.
192 */
193 public XSNotationDeclaration getNotation() {
194 return fNotation;
195 }
196
197 /**
198 * An item isomorphic to the type definition used to validate this element.
199 *
200 * @return a type declaration
201 */
202 public XSTypeDefinition getTypeDefinition() {
203 return fTypeDecl;
204 }
205
206 /**
207 * If and only if that type definition is a simple type definition
208 * with {variety} union, or a complex type definition whose {content type}
209 * is a simple thype definition with {variety} union, then an item isomorphic
210 * to that member of the union's {member type definitions} which actually
211 * validated the element item's normalized value.
212 *
213 * @return a simple type declaration
214 */
215 public XSSimpleTypeDefinition getMemberTypeDefinition() {
216 return fMemberType;
217 }
218
219 /**
220 * An item isomorphic to the element declaration used to validate
221 * this element.
222 *
223 * @return an element declaration
224 */
225 public XSElementDeclaration getElementDeclaration() {
226 return fDeclaration;
227 }
228
229 /**
230 * [schema information]
231 * @see <a href="http://www.w3.org/TR/xmlschema-1/#e-schema_information">XML Schema Part 1: Structures [schema information]</a>
232 * @return The schema information property if it's the validation root,
233 * null otherwise.
234 */
235 public XSModel getSchemaInformation() {
236 return fSchemaInformation;
237 }
238
239 /**
240 * Copy PSVI properties from another psvi item.
241 *
242 * @param attr the source of attribute PSVI items
243 */
244 public void setPSVI(ElementPSVI elem) {
245 this.fDeclaration = elem.getElementDeclaration();
246 this.fNotation = elem.getNotation();
247 this.fValidationContext = elem.getValidationContext();
248 this.fTypeDecl = elem.getTypeDefinition();
249 this.fSchemaInformation = elem.getSchemaInformation();
250 this.fValidity = elem.getValidity();
251 this.fValidationAttempted = elem.getValidationAttempted();
252 this.fErrorCodes = elem.getErrorCodes();
253 this.fNormalizedValue = elem.getSchemaNormalizedValue();
254 this.fActualValue = elem.getActualNormalizedValue();
255 this.fActualValueType = elem.getActualNormalizedValueType();
256 this.fItemValueTypes = elem.getItemValueTypes();
257 this.fMemberType = elem.getMemberTypeDefinition();
258 this.fSpecified = elem.getIsSchemaSpecified();
259 }
260
261 /* (non-Javadoc)
262 * @see com.sun.org.apache.xerces.internal.xs.ItemPSVI#getActualNormalizedValue()
263 */
264 public Object getActualNormalizedValue() {
265 return this.fActualValue;
266 }
267
268 /* (non-Javadoc)
269 * @see com.sun.org.apache.xerces.internal.xs.ItemPSVI#getActualNormalizedValueType()
270 */
271 public short getActualNormalizedValueType() {
272 return this.fActualValueType;
273 }
274
275 /* (non-Javadoc)
276 * @see com.sun.org.apache.xerces.internal.xs.ItemPSVI#getItemValueTypes()
277 */
278 public ShortList getItemValueTypes() {
279 return this.fItemValueTypes;
280 }
281
282 // REVISIT: Forbid serialization of PSVI DOM until
283 // we support object serialization of grammars -- mrglavas
284
285 private void writeObject(ObjectOutputStream out)
286 throws IOException {
287 throw new NotSerializableException(getClass().getName());
288 }
289
290 private void readObject(ObjectInputStream in)
291 throws IOException, ClassNotFoundException {
292 throw new NotSerializableException(getClass().getName());
293 }
294 }