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