sandygao    2003/11/10 14:27:15

  Modified:    java/src/org/apache/xerces/impl/dv/xs XSSimpleTypeDecl.java
  Log:
  Fixing facet-related methods on simple type definition, to return correct values
  for pattern and fractionDigits when the type is derived from NMTOKEN,
  NAME,NCNAME, or integer.
  
  Revision  Changes    Path
  1.45      +45 -9     
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.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- XSSimpleTypeDecl.java     30 Jul 2003 14:13:18 -0000      1.44
  +++ XSSimpleTypeDecl.java     10 Nov 2003 22:27:15 -0000      1.45
  @@ -1887,18 +1887,34 @@
       }
   
       public boolean isDefinedFacet(short facetName) {
  -        return (fFacetsDefined & facetName) != 0;
  +        if ((fFacetsDefined & facetName) != 0)
  +            return true;
  +        if (fPatternType != SPECIAL_PATTERN_NONE)
  +            return facetName == FACET_PATTERN;
  +        if (fValidationDV == DV_INTEGER)
  +            return facetName == FACET_PATTERN || facetName == FACET_FRACTIONDIGITS;
  +        return false;
       }
   
       public short getDefinedFacets() {
  +        if (fPatternType != SPECIAL_PATTERN_NONE)
  +            return (short)(fFacetsDefined | FACET_PATTERN);
  +        if (fValidationDV == DV_INTEGER)
  +            return (short)(fFacetsDefined | FACET_PATTERN | FACET_FRACTIONDIGITS);
           return fFacetsDefined;
       }
   
       public boolean isFixedFacet(short facetName) {
  -        return (fFixedFacet & facetName) != 0;
  +        if ((fFixedFacet & facetName) != 0)
  +            return true;
  +        if (fValidationDV == DV_INTEGER)
  +            return facetName == FACET_FRACTIONDIGITS;
  +        return false;
       }
   
       public short getFixedFacets() {
  +        if (fValidationDV == DV_INTEGER)
  +            return (short)(fFixedFacet | FACET_FRACTIONDIGITS);
           return fFixedFacet;
       }
   
  @@ -1921,6 +1937,8 @@
           case FACET_MININCLUSIVE:
               return (fMinInclusive == null)?null:fMinInclusive.toString();
           case FACET_TOTALDIGITS:
  +            if (fValidationDV == DV_INTEGER)
  +                return "0";
               return (fTotalDigits == -1)?null:Integer.toString(fTotalDigits);
           case FACET_FRACTIONDIGITS:
               return (fFractionDigits == -1)?null:Integer.toString(fFractionDigits);
  @@ -1942,7 +1960,7 @@
       }
   
       public StringList getLexicalPattern() {
  -        if (fPatternType == SPECIAL_PATTERN_NONE && fPatternStr == null)
  +        if (fPatternType == SPECIAL_PATTERN_NONE && fValidationDV != DV_INTEGER && 
fPatternStr == null)
               return null;
           if (fLexicalPattern == null){
               int size = fPatternStr == null ? 0 : fPatternStr.size();
  @@ -1960,6 +1978,10 @@
                   strs[size] = "\\i\\c*";
                   strs[size+1] = "[\\i-[:]][\\c-[:]]*";
               }
  +            else if (fValidationDV == DV_INTEGER) {
  +                strs = new String[size+1];
  +                strs[size] = "[+\\-]?[0-9]+";
  +            }
               else {
                   strs = new String[size];
               }
  @@ -2383,7 +2405,8 @@
        * @see org.apache.xerces.impl.xs.psvi.XSSimpleTypeDefinition#getFacets()
        */
       public XSObjectList getFacets() {
  -        if (fFacets == null && fFacetsDefined != 0) {
  +        if (fFacets == null &&
  +            (fFacetsDefined != 0 || fValidationDV == DV_INTEGER)) {
   
               XSFacetImpl[] facets = new XSFacetImpl[10];
               int count = 0;
  @@ -2432,6 +2455,15 @@
                           totalDigitsAnnotation);
                   count++;
               }
  +            if (fValidationDV == DV_INTEGER) {
  +                facets[count] =
  +                    new XSFacetImpl(
  +                        FACET_FRACTIONDIGITS,
  +                        "0",
  +                        true,
  +                        null);
  +                count++;
  +            }
               if (fFractionDigits != -1) {
                   facets[count] =
                       new XSFacetImpl(
  @@ -2483,13 +2515,17 @@
       }
       
       public XSObjectList getMultiValueFacets(){
  -        if (fMultiValueFacets == null
  -            && (fFacetsDefined & FACET_ENUMERATION) != 0
  -            || (fFacetsDefined & FACET_PATTERN) != 0) {
  +        if (fMultiValueFacets == null &&
  +            ((fFacetsDefined & FACET_ENUMERATION) != 0 ||
  +             (fFacetsDefined & FACET_PATTERN) != 0 ||
  +             fPatternType != SPECIAL_PATTERN_NONE ||
  +             fValidationDV == DV_INTEGER)) {
   
               XSMVFacetImpl[] facets = new XSMVFacetImpl[2];
               int count = 0;
  -            if (fPatternStr != null) {
  +            if ((fFacetsDefined & FACET_PATTERN) != 0 ||
  +                fPatternType != SPECIAL_PATTERN_NONE ||
  +                fValidationDV == DV_INTEGER) {
                   facets[count] =
                       new XSMVFacetImpl(
                           FACET_PATTERN,
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to