You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by sa...@apache.org on 2002/01/04 20:52:38 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/impl/dv/xs_new MonthDV.java SchemaDVFactoryImpl.java XSSimpleTypeDecl.java
sandygao 02/01/04 11:52:38
Modified: java/src/org/apache/xerces/impl/dv XSSimpleType.java
java/src/org/apache/xerces/impl/dv/xs_new MonthDV.java
SchemaDVFactoryImpl.java XSSimpleTypeDecl.java
Log:
Implemented methods for the four fundamental facets. Thanks to Neeraj's patch.
Revision Changes Path
1.4 +35 -7 xml-xerces/java/src/org/apache/xerces/impl/dv/XSSimpleType.java
Index: XSSimpleType.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/XSSimpleType.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XSSimpleType.java 6 Dec 2001 23:11:55 -0000 1.3
+++ XSSimpleType.java 4 Jan 2002 19:52:38 -0000 1.4
@@ -69,7 +69,7 @@
*
* @author Sandy Gao, IBM
*
- * @version $Id: XSSimpleType.java,v 1.3 2001/12/06 23:11:55 sandygao Exp $
+ * @version $Id: XSSimpleType.java,v 1.4 2002/01/04 19:52:38 sandygao Exp $
*/
public interface XSSimpleType extends XSTypeDecl {
@@ -236,20 +236,48 @@
* REVISIT: this method makes ID special, which is not a good design.
* but since ID is not a primitive, there doesn't seem to be a
* clean way of doing it except to define special method like this.
+ *
+ * @return whether this simple type is or is derived from ID.
*/
public boolean isIDType();
/**
* Check whether this type is or is derived from NOTATION.
* REVISIT: this method makes NOTATION special, which is not a good design.
+ *
+ * @return whether this simple type is or is derived from NOTATION.
*/
public boolean isNOTATIONType();
- // REVISIT: the following methods are for PSVI. they are not implemented yet.
+ // REVISIT: it's not decided yet how to return the facets,
+ // as String's or as values (Object's).
//public XSFacet[] getFacets();
- // the following four are for fundamental facets
- //public short getOrderedFacet();
- //public boolean isBounded();
- //public boolean isNumeric();
- //public short getCardinalityFacet();
+
+ /**
+ * Return the value of the "ordered" fundamental facet.
+ *
+ * @return a constant corresponding to the "ordered" facet.
+ */
+ public short getOrderedFacet();
+
+ /**
+ * Return the value of the "bounded" fundamental facet.
+ *
+ * @return whether the this type is bounded.
+ */
+ public boolean isBounded();
+
+ /**
+ * Return the value of the "numeric" fundamental facet.
+ *
+ * @return whether the this type is numeric.
+ */
+ public boolean isNumeric();
+
+ /**
+ * Return the value of the "cardinality" fundamental facet.
+ *
+ * @return a constant corresponding to the "cardinality" facet.
+ */
+ public short getCardinalityFacet();
}
1.4 +7 -1 xml-xerces/java/src/org/apache/xerces/impl/dv/xs_new/MonthDV.java
Index: MonthDV.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs_new/MonthDV.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MonthDV.java 30 Nov 2001 19:29:22 -0000 1.3
+++ MonthDV.java 4 Jan 2002 19:52:38 -0000 1.4
@@ -66,7 +66,7 @@
* @author Elena Litani
* @author Gopal Sharma, SUN Microsystem Inc.
*
- * @version $Id: MonthDV.java,v 1.3 2001/11/30 19:29:22 sandygao Exp $
+ * @version $Id: MonthDV.java,v 1.4 2002/01/04 19:52:38 sandygao Exp $
*/
public class MonthDV extends AbstractDateTimeDV {
@@ -96,6 +96,7 @@
*/
protected int[] parse(String str, int[] date) throws SchemaDateTimeException{
+ //REVISIT: change --MM-- to --MM
resetBuffer(str);
//create structure to hold an object
@@ -136,6 +137,11 @@
/**
* Overwrite compare algorithm to optimize month comparison
+ *
+ * REVISIT: this one is lack of the third parameter: boolean strict, so it
+ * doesn't override the method in the base. But maybe this method
+ * is not correctly implemented, and I did encounter errors when
+ * trying to add the extra parameter. I'm leaving it as is. -SG
*
* @param date1
* @param date2
1.3 +23 -23 xml-xerces/java/src/org/apache/xerces/impl/dv/xs_new/SchemaDVFactoryImpl.java
Index: SchemaDVFactoryImpl.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs_new/SchemaDVFactoryImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SchemaDVFactoryImpl.java 28 Nov 2001 17:54:52 -0000 1.2
+++ SchemaDVFactoryImpl.java 4 Jan 2002 19:52:38 -0000 1.3
@@ -71,7 +71,7 @@
* @author Neeraj Bajaj, Sun Microsystems, inc.
* @author Sandy Gao, IBM
*
- * @version $Id: SchemaDVFactoryImpl.java,v 1.2 2001/11/28 17:54:52 sandygao Exp $
+ * @version $Id: SchemaDVFactoryImpl.java,v 1.3 2002/01/04 19:52:38 sandygao Exp $
*/
public class SchemaDVFactoryImpl extends SchemaDVFactory {
@@ -228,23 +228,23 @@
//REVISIT: passing "anyType" here.
XSSimpleTypeDecl anySimpleType = XSSimpleTypeDecl.fAnySimpleType;
fBuiltInTypes.put(ANYSIMPLETYPE, anySimpleType);
- XSSimpleTypeDecl stringDV = new XSSimpleTypeDecl(anySimpleType, STRING, XSSimpleTypeDecl.DV_STRING);
+ XSSimpleTypeDecl stringDV = new XSSimpleTypeDecl(anySimpleType, STRING, XSSimpleTypeDecl.DV_STRING, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false );
fBuiltInTypes.put(STRING, stringDV);
- fBuiltInTypes.put(BOOLEAN, new XSSimpleTypeDecl(anySimpleType, STRING, XSSimpleTypeDecl.DV_BOOLEAN));
- XSSimpleTypeDecl decimalDV = new XSSimpleTypeDecl(anySimpleType, DECIMAL, XSSimpleTypeDecl.DV_DECIMAL);
+ fBuiltInTypes.put(BOOLEAN, new XSSimpleTypeDecl(anySimpleType, STRING, XSSimpleTypeDecl.DV_BOOLEAN, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_FINITE, false));
+ XSSimpleTypeDecl decimalDV = new XSSimpleTypeDecl(anySimpleType, DECIMAL, XSSimpleTypeDecl.DV_DECIMAL, XSSimpleType.ORDERED_TOTAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, true);
fBuiltInTypes.put(DECIMAL, decimalDV);
- fBuiltInTypes.put(ANYURI, new XSSimpleTypeDecl(anySimpleType, ANYURI, XSSimpleTypeDecl.DV_ANYURI));
- fBuiltInTypes.put(BASE64BINARY, new XSSimpleTypeDecl(anySimpleType, BASE64BINARY, XSSimpleTypeDecl.DV_BASE64BINARY));
- fBuiltInTypes.put(DURATION, new XSSimpleTypeDecl(anySimpleType, DURATION, XSSimpleTypeDecl.DV_DURATION));
- fBuiltInTypes.put(DATETIME, new XSSimpleTypeDecl(anySimpleType, DATETIME, XSSimpleTypeDecl.DV_DATETIME));
- fBuiltInTypes.put(TIME, new XSSimpleTypeDecl(anySimpleType, TIME, XSSimpleTypeDecl.DV_TIME));
- fBuiltInTypes.put(DATE, new XSSimpleTypeDecl(anySimpleType, DATE, XSSimpleTypeDecl.DV_DATE));
- fBuiltInTypes.put(YEARMONTH, new XSSimpleTypeDecl(anySimpleType, YEARMONTH, XSSimpleTypeDecl.DV_GYEARMONTH));
- fBuiltInTypes.put(YEAR, new XSSimpleTypeDecl(anySimpleType, YEAR, XSSimpleTypeDecl.DV_GYEAR));
- fBuiltInTypes.put(MONTHDAY, new XSSimpleTypeDecl(anySimpleType, MONTHDAY, XSSimpleTypeDecl.DV_GMONTHDAY));
- fBuiltInTypes.put(DAY, new XSSimpleTypeDecl(anySimpleType, DAY, XSSimpleTypeDecl.DV_GDAY));
- fBuiltInTypes.put(MONTH, new XSSimpleTypeDecl(anySimpleType, MONTH, XSSimpleTypeDecl.DV_GMONTH));
+ fBuiltInTypes.put(ANYURI, new XSSimpleTypeDecl(anySimpleType, ANYURI, XSSimpleTypeDecl.DV_ANYURI, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(BASE64BINARY, new XSSimpleTypeDecl(anySimpleType, BASE64BINARY, XSSimpleTypeDecl.DV_BASE64BINARY, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(DURATION, new XSSimpleTypeDecl(anySimpleType, DURATION, XSSimpleTypeDecl.DV_DURATION, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(DATETIME, new XSSimpleTypeDecl(anySimpleType, DATETIME, XSSimpleTypeDecl.DV_DATETIME, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(TIME, new XSSimpleTypeDecl(anySimpleType, TIME, XSSimpleTypeDecl.DV_TIME, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(DATE, new XSSimpleTypeDecl(anySimpleType, DATE, XSSimpleTypeDecl.DV_DATE, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(YEARMONTH, new XSSimpleTypeDecl(anySimpleType, YEARMONTH, XSSimpleTypeDecl.DV_GYEARMONTH, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(YEAR, new XSSimpleTypeDecl(anySimpleType, YEAR, XSSimpleTypeDecl.DV_GYEAR, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(MONTHDAY, new XSSimpleTypeDecl(anySimpleType, MONTHDAY, XSSimpleTypeDecl.DV_GMONTHDAY, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(DAY, new XSSimpleTypeDecl(anySimpleType, DAY, XSSimpleTypeDecl.DV_GDAY, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(MONTH, new XSSimpleTypeDecl(anySimpleType, MONTH, XSSimpleTypeDecl.DV_GMONTH, XSSimpleType.ORDERED_PARTIAL, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
facets.fractionDigits = 0;
XSSimpleTypeDecl integerDV = new XSSimpleTypeDecl(decimalDV, INTEGER, URI_SCHEMAFORSCHEMA, (short)0);
@@ -317,10 +317,10 @@
fBuiltInTypes.put(POSITIVEINTEGER, positiveIntegerDV);
- fBuiltInTypes.put(FLOAT, new XSSimpleTypeDecl(anySimpleType, FLOAT, XSSimpleTypeDecl.DV_FLOAT));
- fBuiltInTypes.put(DOUBLE, new XSSimpleTypeDecl(anySimpleType, DOUBLE, XSSimpleTypeDecl.DV_DOUBLE));
- fBuiltInTypes.put(HEXBINARY, new XSSimpleTypeDecl(anySimpleType, HEXBINARY, XSSimpleTypeDecl.DV_HEXBINARY));
- fBuiltInTypes.put(NOTATION, new XSSimpleTypeDecl(anySimpleType, NOTATION, XSSimpleTypeDecl.DV_NOTATION));
+ fBuiltInTypes.put(FLOAT, new XSSimpleTypeDecl(anySimpleType, FLOAT, XSSimpleTypeDecl.DV_FLOAT, XSSimpleType.ORDERED_TOTAL, true, XSSimpleType.CARDINALITY_FINITE, true));
+ fBuiltInTypes.put(DOUBLE, new XSSimpleTypeDecl(anySimpleType, DOUBLE, XSSimpleTypeDecl.DV_DOUBLE, XSSimpleType.ORDERED_TOTAL, true, XSSimpleType.CARDINALITY_FINITE, true));
+ fBuiltInTypes.put(HEXBINARY, new XSSimpleTypeDecl(anySimpleType, HEXBINARY, XSSimpleTypeDecl.DV_HEXBINARY, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
+ fBuiltInTypes.put(NOTATION, new XSSimpleTypeDecl(anySimpleType, NOTATION, XSSimpleTypeDecl.DV_NOTATION, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
facets.whiteSpace = XSSimpleType.WS_REPLACE;
@@ -350,10 +350,10 @@
ncnameDV.applyFacets1(facets, XSSimpleType.FACET_WHITESPACE, (short)0, XSSimpleTypeDecl.SPECIAL_TOKEN_NCNAME);
fBuiltInTypes.put(NCNAME, ncnameDV);
- fBuiltInTypes.put(QNAME, new XSSimpleTypeDecl(anySimpleType, QNAME, XSSimpleTypeDecl.DV_QNAME));
+ fBuiltInTypes.put(QNAME, new XSSimpleTypeDecl(anySimpleType, QNAME, XSSimpleTypeDecl.DV_QNAME, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false));
- fBuiltInTypes.put(ID, new XSSimpleTypeDecl(ncnameDV, ID , XSSimpleTypeDecl.DV_ID ));
- XSSimpleTypeDecl idrefDV = new XSSimpleTypeDecl(ncnameDV, IDREF , XSSimpleTypeDecl.DV_IDREF);
+ fBuiltInTypes.put(ID, new XSSimpleTypeDecl(ncnameDV, ID, XSSimpleTypeDecl.DV_ID, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false ));
+ XSSimpleTypeDecl idrefDV = new XSSimpleTypeDecl(ncnameDV, IDREF , XSSimpleTypeDecl.DV_IDREF, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false);
fBuiltInTypes.put(IDREF, idrefDV);
facets.minLength = 1;
@@ -362,7 +362,7 @@
idrefsDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short)0);
fBuiltInTypes.put(IDREFS, idrefsDV);
- XSSimpleTypeDecl entityDV = new XSSimpleTypeDecl(ncnameDV, ENTITY , XSSimpleTypeDecl.DV_ENTITY);
+ XSSimpleTypeDecl entityDV = new XSSimpleTypeDecl(ncnameDV, ENTITY , XSSimpleTypeDecl.DV_ENTITY, XSSimpleType.ORDERED_FALSE, false, XSSimpleType.CARDINALITY_COUNTABLY_INFINITE, false);
fBuiltInTypes.put(ENTITY, entityDV);
facets.minLength = 1;
1.4 +225 -12 xml-xerces/java/src/org/apache/xerces/impl/dv/xs_new/XSSimpleTypeDecl.java
Index: XSSimpleTypeDecl.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs_new/XSSimpleTypeDecl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XSSimpleTypeDecl.java 30 Nov 2001 19:29:22 -0000 1.3
+++ XSSimpleTypeDecl.java 4 Jan 2002 19:52:38 -0000 1.4
@@ -77,7 +77,7 @@
* @author Sandy Gao, IBM
* @author Neeraj Bajaj, Sun Microsystems, inc.
*
- * @version $Id: XSSimpleTypeDecl.java,v 1.3 2001/11/30 19:29:22 sandygao Exp $
+ * @version $Id: XSSimpleTypeDecl.java,v 1.4 2002/01/04 19:52:38 sandygao Exp $
*/
class XSSimpleTypeDecl implements XSAtomicSimpleType, XSListSimpleType, XSUnionSimpleType {
@@ -148,7 +148,6 @@
"preserve", "collapse", "replace",
};
- //private short fPrimitiveDV = -1;
private XSSimpleTypeDecl fItemType;
private XSSimpleTypeDecl[] fMemberTypes;
@@ -162,13 +161,13 @@
private short fFacetsDefined = 0;
private short fFixedFacet = 0;
+ //for constraining facets
private short fWhiteSpace = 0;
private int fLength = -1;
private int fMinLength = -1;
private int fMaxLength = -1;
private int fTotalDigits = -1;
private int fFractionDigits = -1;
- private short fTokenType = SPECIAL_TOKEN_NONE;
private Vector fPattern;
private Vector fEnumeration;
private Object fMaxInclusive;
@@ -176,17 +175,24 @@
private Object fMinExclusive;
private Object fMinInclusive;
+ private short fTokenType = SPECIAL_TOKEN_NONE;
+
+ // for fundamental facets
+ private short fOrdered;
+ private short fCardinality;
+ private boolean fBounded;
+ private boolean fNumeric;
+
private ValidatedInfo fTempInfo = new ValidatedInfo();
//Create a new built-in primitive types (and id/idref/entity)
- protected XSSimpleTypeDecl(XSSimpleTypeDecl base, String name, short validateDV) {
+ protected XSSimpleTypeDecl(XSSimpleTypeDecl base, String name, short validateDV,
+ short ordered, boolean bounded,
+ short cardinality, boolean numeric) {
fBase = base;
fTypeName = name;
fTargetNamespace = SchemaDVFactoryImpl.URI_SCHEMAFORSCHEMA;
fVariety = VARIETY_ATOMIC;
- //fPrimitiveDV = validateDV;
- //if (validateDV == DV_ID || validateDV == DV_IDREF || validateDV == DV_ENTITY)
- // fPrimitiveDV = DV_STRING;
fValidationDV = validateDV;
fFacetsDefined = FACET_WHITESPACE;
if (validateDV == DV_STRING) {
@@ -208,7 +214,6 @@
fValidationDV = fBase.fValidationDV;
switch (fVariety) {
case VARIETY_ATOMIC:
- //fPrimitiveDV = fBase.fPrimitiveDV;
break;
case VARIETY_LIST:
fItemType = fBase.fItemType;
@@ -235,6 +240,9 @@
fTokenType = fBase.fTokenType;
fFixedFacet = fBase.fFixedFacet;
fFacetsDefined = fBase.fFacetsDefined;
+
+ //we also set fundamental facets information in case applyFacets is not called.
+ caclFundamentalFacets();
}
//Create a new simple type for list.
@@ -250,6 +258,9 @@
fFacetsDefined = FACET_WHITESPACE;
fFixedFacet = FACET_WHITESPACE;
fWhiteSpace = WS_COLLAPSE;
+
+ //setting fundamental facets
+ caclFundamentalFacets();
}
//Create a new simple type for union.
@@ -268,6 +279,9 @@
// if fFacetsDefined != 0
fFacetsDefined = FACET_WHITESPACE;
fWhiteSpace = WS_COLLAPSE;
+
+ //setting fundamental facets
+ caclFundamentalFacets();
}
public short getXSType () {
@@ -1009,9 +1023,10 @@
// step 5: mark fixed values
fFixedFacet |= fBase.fFixedFacet;
- //inherit baseBuiltInTypeName.
+ //step 6: setting fundamental facets
+ caclFundamentalFacets();
- } //init4Restriction()
+ } //applyFacets()
/**
* validate a value, and return the compiled form
@@ -1273,7 +1288,7 @@
regex = (RegularExpression)fPattern.elementAt(idx);
if (!regex.matches(nvalue)){
throw new InvalidDatatypeValueException("Value '"+content+
- "' does not match regular expression facet '" + fPattern + "'" );
+ "' does not match regular expression facet '" + regex + "'" );
}
}
}
@@ -1442,6 +1457,204 @@
}
}
- static final XSSimpleTypeDecl fAnySimpleType = new XSSimpleTypeDecl(null, "anySimpleType", DV_ANYSIMPLETYPE);
+ public short getOrderedFacet() {
+ return fOrdered;
+ }
+
+ public boolean isBounded(){
+ return fBounded;
+ }
+
+ public short getCardinalityFacet(){
+ return fCardinality;
+ }
+
+ public boolean isNumeric(){
+ return fNumeric;
+ }
+
+ private void caclFundamentalFacets() {
+ setOrdered();
+ setNumeric();
+ setBounded();
+ setCardinality();
+ }
+
+ private void setOrdered(){
+
+ // When {variety} is atomic, {value} is inherited from {value} of {base type definition}. For all �primitive� types {value} is as specified in the table in Fundamental Facets (C.1).
+ if(fVariety == VARIETY_ATOMIC){
+ this.fOrdered = fBase.fOrdered;
+ }
+
+ // When {variety} is list, {value} is false.
+ else if(fVariety == VARIETY_LIST){
+ this.fOrdered = ORDERED_FALSE;
+ }
+
+ // When {variety} is union, the {value} is partial unless one of the following:
+ // 1. If every member of {member type definitions} is derived from a common ancestor other than the simple ur-type, then {value} is the same as that ancestor's ordered facet.
+ // 2. If every member of {member type definitions} has a {value} of false for the ordered facet, then {value} is false.
+ else if(fVariety == VARIETY_UNION){
+ int length = fMemberTypes.length;
+ // REVISIT: is the length possible to be 0?
+ if (length == 0) {
+ this.fOrdered = ORDERED_PARTIAL;
+ return;
+ }
+ // we need to process the first member type before entering the loop
+ short ancestorId = getPrimitiveDV(fMemberTypes[0].fValidationDV);
+ boolean commonAnc = ancestorId != DV_ANYSIMPLETYPE;
+ boolean allFalse = fMemberTypes[0].fOrdered == ORDERED_FALSE;
+ // for the other member types, check whether the value is false
+ // and whether they have the same ancestor as the first one
+ for (int i = 1; i < fMemberTypes.length && (commonAnc || allFalse); i++) {
+ if (commonAnc)
+ commonAnc = ancestorId == getPrimitiveDV(fMemberTypes[i].fValidationDV);
+ if (allFalse)
+ allFalse = fMemberTypes[i].fOrdered == ORDERED_FALSE;
+ }
+ if (commonAnc) {
+ // REVISIT: all member types should have the same ordered value
+ // just use the first one. Can we assume this?
+ this.fOrdered = fMemberTypes[0].fOrdered;
+ } else if (allFalse) {
+ this.fOrdered = ORDERED_FALSE;
+ } else {
+ this.fOrdered = ORDERED_PARTIAL;
+ }
+ }
+
+ }//setOrdered
+
+ private void setNumeric(){
+ if(fVariety == VARIETY_ATOMIC){
+ this.fNumeric = fBase.fNumeric;
+ }
+ else if(fVariety == VARIETY_LIST){
+ this.fNumeric = false;
+ }
+ else if(fVariety == VARIETY_UNION){
+ XSSimpleType [] memberTypes = this.getMemberTypes();
+ for(int i = 0 ; i < memberTypes.length ; i++){
+ if( ! memberTypes[i].isNumeric() ){
+ this.fNumeric = false;
+ return;
+ }
+ }
+ this.fNumeric = true;
+ }
+
+ }//setNumeric
+
+ private void setBounded(){
+ if(fVariety == VARIETY_ATOMIC){
+ if( (((this.fFacetsDefined & FACET_MININCLUSIVE) != 0) || ((this.fFacetsDefined & FACET_MINEXCLUSIVE) != 0))
+ && (((this.fFacetsDefined & FACET_MAXINCLUSIVE) != 0) || ((this.fFacetsDefined & FACET_MAXEXCLUSIVE) != 0)) ){
+ this.fBounded = true;
+ }
+ else{
+ this.fBounded = false;
+ }
+ }
+ else if(fVariety == VARIETY_LIST){
+ if( ((this.fFacetsDefined & FACET_LENGTH) != 0 ) || ( ((this.fFacetsDefined & FACET_MINLENGTH) != 0 )
+ && ((this.fFacetsDefined & FACET_MAXLENGTH) != 0 )) ){
+ this.fBounded = true;
+ }
+ else{
+ this.fBounded = false;
+ }
+
+ }
+ else if(fVariety == VARIETY_UNION){
+
+ XSSimpleTypeDecl [] memberTypes = this.fMemberTypes;
+ short ancestorId = 0 ;
+
+ if(memberTypes.length > 0){
+ ancestorId = getPrimitiveDV(memberTypes[0].fValidationDV);
+ }
+
+ for(int i = 0 ; i < memberTypes.length ; i++){
+ if( ! memberTypes[i].isBounded() || (ancestorId != getPrimitiveDV(memberTypes[i].fValidationDV)) ){
+ this.fBounded = false;
+ return;
+ }
+ }
+ this.fBounded = true;
+ }
+
+ }//setBounded
+
+ private boolean specialCardinalityCheck(){
+ if( (fBase.fValidationDV == XSSimpleTypeDecl.DV_DATE) || (fBase.fValidationDV == XSSimpleTypeDecl.DV_GYEARMONTH)
+ || (fBase.fValidationDV == XSSimpleTypeDecl.DV_GYEAR) || (fBase.fValidationDV == XSSimpleTypeDecl.DV_GMONTHDAY)
+ || (fBase.fValidationDV == XSSimpleTypeDecl.DV_GDAY) || (fBase.fValidationDV == XSSimpleTypeDecl.DV_GMONTH) ){
+ return true;
+ }
+ return false;
+
+ } //specialCardinalityCheck()
+
+ private void setCardinality(){
+ if(fVariety == VARIETY_ATOMIC){
+ if(fBase.fCardinality == CARDINALITY_FINITE){
+ this.fCardinality = CARDINALITY_FINITE;
+ }
+ else {// (fBase.fCardinality == CARDINALITY_COUNTABLY_INFINITE)
+ if ( ((this.fFacetsDefined & FACET_LENGTH) != 0 ) || ((this.fFacetsDefined & FACET_MAXLENGTH) != 0 )
+ || ((this.fFacetsDefined & FACET_TOTALDIGITS) != 0 ) ){
+ this.fCardinality = CARDINALITY_FINITE;
+ }
+ else if( (((this.fFacetsDefined & FACET_MININCLUSIVE) != 0 ) || ((this.fFacetsDefined & FACET_MINEXCLUSIVE) != 0 ))
+ && (((this.fFacetsDefined & FACET_MAXINCLUSIVE) != 0 ) || ((this.fFacetsDefined & FACET_MAXEXCLUSIVE) != 0 )) ){
+ if( ((this.fFacetsDefined & FACET_FRACTIONDIGITS) != 0 ) || specialCardinalityCheck()){
+ this.fCardinality = CARDINALITY_FINITE;
+ }
+ else{
+ this.fCardinality = CARDINALITY_COUNTABLY_INFINITE;
+ }
+ }
+ else{
+ this.fCardinality = CARDINALITY_COUNTABLY_INFINITE;
+ }
+ }
+ }
+ else if(fVariety == VARIETY_LIST){
+ if( ((this.fFacetsDefined & FACET_LENGTH) != 0 ) || ( ((this.fFacetsDefined & FACET_MINLENGTH) != 0 )
+ && ((this.fFacetsDefined & FACET_MAXLENGTH) != 0 )) ){
+ this.fCardinality = CARDINALITY_FINITE;
+ }
+ else{
+ this.fCardinality = CARDINALITY_COUNTABLY_INFINITE;
+ }
+
+ }
+ else if(fVariety == VARIETY_UNION){
+ XSSimpleType [] memberTypes = this.getMemberTypes();
+ for(int i = 0 ; i < memberTypes.length ; i++){
+ if( ! (memberTypes[i].getCardinalityFacet() == CARDINALITY_FINITE) ){
+ this.fCardinality = CARDINALITY_COUNTABLY_INFINITE;
+ return;
+ }
+ }
+ this.fCardinality = CARDINALITY_FINITE;
+ }
+
+ }//setCardinality
+
+ private short getPrimitiveDV(short validationDV){
+
+ if (validationDV == DV_ID || validationDV == DV_IDREF || validationDV == DV_ENTITY){
+ return DV_STRING;
+ }
+ else{
+ return validationDV;
+ }
+
+ }//getPrimitiveDV()
+
+ static final XSSimpleTypeDecl fAnySimpleType = new XSSimpleTypeDecl(null, "anySimpleType", DV_ANYSIMPLETYPE, ORDERED_FALSE, false, CARDINALITY_FINITE, false);
} // class XSComplexTypeDecl
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org