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]