content: /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package mf.org.apache.xerces.impl.dv;
  
  import mf.org.apache.xerces.xs.XSSimpleTypeDefinition;
  
  /**
   * This interface <code>XSSimpleType</code> represents the simple type
   * definition of schema component and defines methods to query the information
   * contained.
   * Any simple type (atomic, list or union) will implement this interface.
   * It inherits from <code>XSTypeDecl</code>.
   *
   * @author Sandy Gao, IBM
   * @version $Id: XSSimpleType.java 446751 2006-09-15 21:54:06Z mrglavas $
   * @xerces.internal
   */
  public interface XSSimpleType extends XSSimpleTypeDefinition {
  
      /**
       * constants defined for the values of 'whitespace' facet.
       * see <a href='http://www.w3.org/TR/xmlschema-2/#dt-whiteSpace'> XML Schema
       * Part 2: Datatypes </a>
       */
      /**
       * preserve the white spaces
       */
      short WS_PRESERVE = 0;
      /**
       * replace the white spaces
       */
      short WS_REPLACE = 1;
      /**
       * collapse the white spaces
       */
      short WS_COLLAPSE = 2;
  
      /**
       * Constant defined for the primitive built-in simple tpyes.
       * see <a href='http://www.w3.org/TR/xmlschema-2/#built-in-primitive-datatypes'>
       * XML Schema Part 2: Datatypes </a>
       */
      /**
       * "string" type
       */
      short PRIMITIVE_STRING = 1;
      /**
       * "boolean" type
       */
      short PRIMITIVE_BOOLEAN = 2;
      /**
       * "decimal" type
       */
      short PRIMITIVE_DECIMAL = 3;
      /**
       * "float" type
       */
      short PRIMITIVE_FLOAT = 4;
      /**
       * "double" type
       */
      short PRIMITIVE_DOUBLE = 5;
      /**
       * "duration" type
       */
      short PRIMITIVE_DURATION = 6;
      /**
       * "dataTime" type
       */
      short PRIMITIVE_DATETIME = 7;
      /**
       * "time" type
       */
      short PRIMITIVE_TIME = 8;
      /**
       * "date" type
       */
      short PRIMITIVE_DATE = 9;
      /**
       * "gYearMonth" type
       */
      short PRIMITIVE_GYEARMONTH = 10;
      /**
       * "gYear" type
       */
      short PRIMITIVE_GYEAR = 11;
      /**
       * "gMonthDay" type
       */
      short PRIMITIVE_GMONTHDAY = 12;
      /**
       * "gDay" type
       */
      short PRIMITIVE_GDAY = 13;
      /**
       * "gMonth" type
       */
      short PRIMITIVE_GMONTH = 14;
      /**
       * "hexBinary" type
       */
      short PRIMITIVE_HEXBINARY = 15;
      /**
       * "base64Binary" type
       */
      short PRIMITIVE_BASE64BINARY = 16;
      /**
       * "anyURI" type
       */
      short PRIMITIVE_ANYURI = 17;
      /**
       * "QName" type
       */
      short PRIMITIVE_QNAME = 18;
      /**
       * "precisionDecimal" type
       */
      short PRIMITIVE_PRECISIONDECIMAL = 19;
      /**
       * "NOTATION" type
       */
      short PRIMITIVE_NOTATION = 20;
  
      /**
       * return an ID representing the built-in primitive base type.
       * REVISIT: This method is (currently) for internal use only.
       * the constants returned from this method are not finalized yet.
       * the names and values might change in the further.
       *
       * @return an ID representing the built-in primitive base type
       */
      short getPrimitiveKind();
  
      /**
       * validate a given string against this simple type.
       *
       * @param content       the string value that needs to be validated
       * @param context       the validation context
       * @param validatedInfo used to store validation result
       * @return the actual value (QName, Boolean) of the string value
       */
      Object validate(String content, ValidationContext context, ValidatedInfo validatedInfo)
              throws InvalidDatatypeValueException;
  
      /**
       * validate a given string value, represented by content.toString().
       * note that if content is a StringBuffer, for performance reasons,
       * it's possible that the content of the string buffer is modified.
       *
       * @param content       the string value that needs to be validated
       * @param context       the validation context
       * @param validatedInfo used to store validation result
       * @return the actual value (QName, Boolean) of the string value
       */
      Object validate(Object content, ValidationContext context, ValidatedInfo validatedInfo)
              throws InvalidDatatypeValueException;
  
      /**
       * Validate an actual value against this simple type.
       *
       * @param context       the validation context
       * @param validatedInfo used to provide the actual value and member types
       * @throws InvalidDatatypeValueException exception for invalid values.
       */
      void validate(ValidationContext context, ValidatedInfo validatedInfo)
              throws InvalidDatatypeValueException;
  
      /**
       * If this type is created from restriction, then some facets can be applied
       * to the simple type. <code>XSFacets</code> is used to pass the value of
       * different facets.
       *
       * @param facets       the value of all the facets
       * @param presentFacet bit combination value of the costraining facet
       *                     constants which are present.
       * @param fixedFacet   bit combination value of the costraining facet
       *                     constants which are fixed.
       * @param context      the validation context
       * @throws InvalidDatatypeFacetException exception for invalid facet values.
       */
      void applyFacets(XSFacets facets, short presentFacet, short fixedFacet, ValidationContext context)
              throws InvalidDatatypeFacetException;
  
      /**
       * Check whether two actual values are equal.
       *
       * @param value1 the first value
       * @param value2 the second value
       * @return true if the two value are equal
       */
      boolean isEqual(Object value1, Object value2);
  
      /**
       * Check the order of the two actual values. (May not be supported by all
       * simple types.
       * REVISIT: Andy believes that a compare() method is necessary.
       *          I don't see the necessity for schema (the only place where we
       *          need to compare two values is to check min/maxIn/Exclusive
       *          facets, but we only need a private method for this case.)
       *          But Andy thinks XPATH potentially needs this compare() method.
       *
       * @param value1  the first value
       * @prarm value2  the second value
       * @return        > 0 if value1 > value2
       *                = 0 if value1 == value2
       *                < = if value1 < value2
       */
      //public short compare(Object value1, Object value2);
  
      /**
       * Check whether this type is or is derived from ID.
       * 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.
       */
      boolean isIDType();
  
      /**
       * Return the whitespace corresponding to this datatype.
       *
       * @return valid values are WS_PRESERVE, WS_REPLACE, WS_COLLAPSE.
       * @throws DatatypeException union datatypes don't have whitespace facet associated with them
       */
      short getWhitespace() throws DatatypeException;
  }
  