I added functionality to 
org/apache/xerces/validators/datatype/StringValidator.java to let Schemas 
validate enumeration/literals and
maxLength in datatypes based on 'string'.

Example:

<datatype name='newtype'>
<basetype name='string'>
<enumeration>
<literal>AAA</literal>
<literal>BBB</literal>
</enumeration>
</datatype>

I realize that this is already obsolete syntax based on the 12/17 Schema draft 
but I needed it and thought others may.  The diff is
below.

George
************************************************************


*** StringValidatorOrig.java    Wed Jan 05 15:12:26 2000
--- StringValidator.java        Fri Jan 07 00:30:44 2000
***************
*** 58,63 ****
--- 58,65 ----
  package org.apache.xerces.validators.datatype;

  import java.util.Hashtable;
+ import java.util.Vector;
+ import java.util.Enumeration;
  import java.util.Locale;

  /**
***************
*** 71,77 ****
  public class StringValidator implements InternalDatatypeValidator {

        Locale fLocale = null;
!
        /**
       * validate that a string is a W3C string type
       *
--- 73,82 ----
  public class StringValidator implements InternalDatatypeValidator {

        Locale fLocale = null;
!       Hashtable facetData = null;
!       StringValidator fBaseValidator = null;
!       int fMaxLength = 0;
!       boolean fIsMaxLength = false;
        /**
       * validate that a string is a W3C string type
       *
***************
*** 84,103 ****
       *  not a W3C string type
       */

!       public void validate(String content) throws 
InvalidDatatypeValueException {
!         // just say yes
        }

        public void validate(int contentIndex) throws 
InvalidDatatypeValueException {
        }

        public void setFacets(Hashtable facets) throws UnknownFacetException, 
IllegalFacetException, IllegalFacetValueException {
        }

        public void setFacets(int facets[]) throws UnknownFacetException, 
IllegalFacetException, IllegalFacetValueException {
        }

        public void setBasetype(DatatypeValidator base) {
        }

      /**
--- 89,151 ----
       *  not a W3C string type
       */

!       public void validate(String content) throws 
InvalidDatatypeValueException
!       {
!
!               if (facetData == null)return;
!
!               Enumeration eee = facetData.keys();
!               while(eee.hasMoreElements())
!               {
!                       String key = (String)eee.nextElement();
!                       if (key.equals(DatatypeValidator.ENUMERATION))
!                       {
!                               Vector value = (Vector)facetData.get(key);
!                               String vvv = value.toString();
!                               if (!value.contains(content)) throw new 
InvalidDatatypeValueException("Value '"+content+"' must be one of "+vvv);
!                       }
!                       else if (key.equals(DatatypeValidator.MAXLENGTH))
!                       {
!                               if (content.length() > fMaxLength && 
fIsMaxLength)
!                                       throw new 
InvalidDatatypeValueException("Value '"+content+"' with length 
'"+content.length()+"' exceeds maximum length of
"+fMaxLength+".");
!                       }
!               }
        }

        public void validate(int contentIndex) throws 
InvalidDatatypeValueException {
        }

        public void setFacets(Hashtable facets) throws UnknownFacetException, 
IllegalFacetException, IllegalFacetValueException {
+               facetData=facets;
+
+               Enumeration eee = facetData.keys();
+               while(eee.hasMoreElements())
+               {
+                       String key = (String)eee.nextElement();
+                       if (key.equals(DatatypeValidator.MAXLENGTH))
+                       {
+                               int vvv;
+                               String value = (String)facetData.get(key);
+                               try
+                               {
+                                       vvv = Integer.parseInt(value);
+                               }
+                               catch(NumberFormatException nfe)
+                               {
+                                       throw new 
IllegalFacetValueException("maxLength value '"+value+"' is invalid.");
+                               }
+                               fMaxLength = vvv;
+                               fIsMaxLength = true;
+                       }
+               }
        }

        public void setFacets(int facets[]) throws UnknownFacetException, 
IllegalFacetException, IllegalFacetValueException {
        }

        public void setBasetype(DatatypeValidator base) {
+           fBaseValidator = (StringValidator) base;
+
        }

      /**

Reply via email to