[prev in list] [next in list] [prev in thread] [next in thread]
List: xerces-cvs
Subject: cvs commit: xml-xerces/java/src/org/apache/xerces/impl/dv/xs XSSimpleTypeDecl.java
From: mrglavas () apache ! org
Date: 2005-06-24 3:47:28
Message-ID: 20050624034728.265.qmail () minotaur ! apache ! org
[Download RAW message or body]
mrglavas 2005/06/23 20:47:28
Modified: java/src/org/apache/xerces/impl/dv/xs XSSimpleTypeDecl.java
Log:
Bug fix: When checking enumerations, two values are comparable if they're in the \
same value space.
Revision Changes Path
1.73 +58 -19 \
xml-xerces/java/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java
Index: XSSimpleTypeDecl.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -r1.72 -r1.73
--- XSSimpleTypeDecl.java 13 Jun 2005 20:44:08 -0000 1.72
+++ XSSimpleTypeDecl.java 24 Jun 2005 03:47:28 -0000 1.73
@@ -1616,28 +1616,50 @@
}
//enumeration
- if ( ((fFacetsDefined & FACET_ENUMERATION) != 0 ) ) {
- boolean present = false;
- for (int i = 0; i < fEnumeration.size(); i++) {
- if (fEnumerationType[i] == type && fEnumeration.elementAt(i).equals(ob)) {
- if(type == XSConstants.LIST_DT || type == \
XSConstants.LISTOFUNION_DT) { + if ( ((fFacetsDefined & FACET_ENUMERATION) != \
0 ) ) { + boolean present = false;
+ final int enumSize = fEnumeration.size();
+ for (int i = 0; i < enumSize; i++) {
+ final short primitiveType1 = \
convertToPrimitiveKind(fEnumerationType[i]); + final short \
primitiveType2 = convertToPrimitiveKind(type); + if ((primitiveType1 \
== primitiveType2 || + primitiveType1 == \
XSConstants.ANYSIMPLETYPE_DT && primitiveType2 == XSConstants.STRING_DT || + \
primitiveType1 == XSConstants.STRING_DT && primitiveType2 == \
XSConstants.ANYSIMPLETYPE_DT) + && \
fEnumeration.elementAt(i).equals(ob)) { + if (primitiveType1 == \
XSConstants.LIST_DT || primitiveType1 == XSConstants.LISTOFUNION_DT) \
{
ShortList enumItemType = fEnumerationItemType[i];
- if(enumItemType.equals(itemType)) {
- present = true;
- break;
+ final int typeList1Length = itemType != null ? \
itemType.getLength() : 0; + final int typeList2Length = \
enumItemType != null ? enumItemType.getLength() : 0; + if \
(typeList1Length == typeList2Length) { + int j;
+ for (j = 0; j < typeList1Length; ++j) {
+ final short primitiveItem1 = \
convertToPrimitiveKind(itemType.item(j)); + final \
short primitiveItem2 = convertToPrimitiveKind(enumItemType.item(j)); + \
if (primitiveItem1 != primitiveItem2) { + if \
(primitiveItem1 == XSConstants.ANYSIMPLETYPE_DT && primitiveItem2 == \
XSConstants.STRING_DT || + primitiveItem1 == \
XSConstants.STRING_DT && primitiveItem2 == XSConstants.ANYSIMPLETYPE_DT) { + \
continue; + }
+ break;
+ }
+ }
+ if (j == typeList1Length) {
+ present = true;
+ break;
+ }
}
- }
+ }
else {
- present = true;
- break;
+ present = true;
+ break;
}
- }
- }
- if(!present){
- throw new InvalidDatatypeValueException("cvc-enumeration-valid",
- new Object [] {content, fEnumeration.toString()});
- }
- }
+ }
+ }
+ if(!present){
+ throw new InvalidDatatypeValueException("cvc-enumeration-valid",
+ new Object [] {content, fEnumeration.toString()});
+ }
+ }
//fractionDigits
if ((fFacetsDefined & FACET_FRACTIONDIGITS) != 0) {
@@ -3212,6 +3234,23 @@
public boolean isDerivedFrom(String typeNamespaceArg, String typeNameArg, int \
derivationMethod) {
return isDOMDerivedFrom(typeNamespaceArg, typeNameArg, derivationMethod);
}
+
+ private short convertToPrimitiveKind(short valueType) {
+ /** Primitive datatypes. */
+ if (valueType <= XSConstants.NOTATION_DT) {
+ return valueType;
+ }
+ /** Types derived from string. */
+ if (valueType <= XSConstants.ENTITY_DT) {
+ return XSConstants.STRING_DT;
+ }
+ /** Types derived from decimal. */
+ if (valueType <= XSConstants.POSITIVEINTEGER_DT) {
+ return XSConstants.DECIMAL_DT;
+ }
+ /** Other types. */
+ return valueType;
+ }
} // class XSSimpleTypeDecl
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic