1 57 58 package org.enhydra.apache.xerces.validators.datatype; 59 60 import java.text.Collator ; 61 import java.util.Hashtable ; 62 import java.util.Locale ; 63 64 import org.enhydra.apache.xerces.validators.schema.SchemaSymbols; 65 66 74 public class StringDatatypeValidator extends AbstractStringValidator { 75 76 private short fWhiteSpace; 77 78 public StringDatatypeValidator () throws InvalidDatatypeFacetException{ 79 this ( null, null, false ); 81 } 82 public StringDatatypeValidator ( DatatypeValidator base, Hashtable facets, 83 boolean derivedByList ) throws InvalidDatatypeFacetException { 84 85 super (base, facets, derivedByList); 86 } 87 88 89 protected void assignAdditionalFacets(String key, Hashtable facets) throws InvalidDatatypeFacetException{ 90 fWhiteSpace = DatatypeValidator.PRESERVE; 91 if ( key.equals(SchemaSymbols.ELT_WHITESPACE) ) { 92 fFacetsDefined |= DatatypeValidator.FACET_WHITESPACE; 93 String ws = (String )facets.get(key); 94 if ( ws.equals(SchemaSymbols.ATT_PRESERVE) ) { 97 fWhiteSpace = DatatypeValidator.PRESERVE; 98 } 99 else if ( ws.equals(SchemaSymbols.ATT_REPLACE) ) { 100 fWhiteSpace = DatatypeValidator.REPLACE; 101 } 102 else if ( ws.equals(SchemaSymbols.ATT_COLLAPSE) ) { 103 fWhiteSpace = DatatypeValidator.COLLAPSE; 104 } 105 else { 106 throw new InvalidDatatypeFacetException("whiteSpace value '" + ws + 107 "' must be one of 'preserve', 'replace', 'collapse'."); 108 } 109 } 110 else { 111 throw new InvalidDatatypeFacetException( getErrorString(DatatypeMessageProvider.ILLEGAL_STRING_FACET, 112 DatatypeMessageProvider.MSG_NONE, new Object [] { key})); 113 } 114 } 115 116 117 protected void inheritAdditionalFacets() { 118 if ( (fFacetsDefined & DatatypeValidator.FACET_WHITESPACE) == 0 && 120 (((StringDatatypeValidator)fBaseValidator).fFacetsDefined & DatatypeValidator.FACET_WHITESPACE) != 0 ) { 121 fFacetsDefined |= DatatypeValidator.FACET_WHITESPACE; 122 fWhiteSpace = ((StringDatatypeValidator)fBaseValidator).fWhiteSpace; 123 } 124 } 125 126 protected void checkBaseFacetConstraints() throws InvalidDatatypeFacetException { 131 135 if ( (fFacetsDefined & DatatypeValidator.FACET_WHITESPACE) != 0 && 136 (((StringDatatypeValidator)fBaseValidator).fFacetsDefined & DatatypeValidator.FACET_WHITESPACE) != 0 ) { 137 if ( (((StringDatatypeValidator)fBaseValidator).fFlags & DatatypeValidator.FACET_WHITESPACE) != 0 && 138 fWhiteSpace != ((StringDatatypeValidator)fBaseValidator).fWhiteSpace ) { 139 throw new InvalidDatatypeFacetException( "whiteSpace value = '" + whiteSpaceValue(fWhiteSpace) + 140 "' must be equal to base.whiteSpace value = '" + 141 whiteSpaceValue(((StringDatatypeValidator)fBaseValidator).fWhiteSpace) + "' with attribute {fixed} = true" ); 142 } 143 if ( (fWhiteSpace == DatatypeValidator.PRESERVE || 144 fWhiteSpace == DatatypeValidator.REPLACE) && 145 ((StringDatatypeValidator)fBaseValidator).fWhiteSpace == DatatypeValidator.COLLAPSE ){ 146 throw new InvalidDatatypeFacetException( "It is an error if whiteSpace = 'preserve' or 'replace' and base.whiteSpace = 'collapse'."); 147 } 148 if ( fWhiteSpace == DatatypeValidator.PRESERVE && 149 ((StringDatatypeValidator)fBaseValidator).fWhiteSpace == DatatypeValidator.REPLACE ) 150 throw new InvalidDatatypeFacetException( "It is an error if whiteSpace = 'preserve' and base.whiteSpace = 'replace'."); 151 } 152 } 153 154 155 158 public short getWSFacet() { 159 return fWhiteSpace; 160 } 161 162 163 public int compare( String value1, String value2 ) { 164 Locale loc = Locale.getDefault(); 165 Collator collator = Collator.getInstance( loc ); 166 return collator.compare( value1, value2 ); 167 } 168 169 private String whiteSpaceValue (short ws){ 170 return (ws != DatatypeValidator.PRESERVE)? 171 (ws == DatatypeValidator.REPLACE)?"replace":"collapse":"preserve"; 172 } 173 176 public Object clone() throws CloneNotSupportedException { 177 StringDatatypeValidator newObj = null; 178 try { 179 newObj = new StringDatatypeValidator(); 180 181 newObj.fLocale = this.fLocale; 182 newObj.fBaseValidator = this.fBaseValidator; 183 newObj.fLength = this.fLength; 184 newObj.fMaxLength = this.fMaxLength; 185 newObj.fMinLength = this.fMinLength; 186 newObj.fPattern = this.fPattern; 187 newObj.fWhiteSpace = this.fWhiteSpace; 188 newObj.fEnumeration = this.fEnumeration; 189 newObj.fFacetsDefined = this.fFacetsDefined; 190 } 191 catch ( InvalidDatatypeFacetException ex ) { 192 ex.printStackTrace(); 193 } 194 return newObj; 195 } 196 197 } 198 199 | Popular Tags |