/* * @(#)$Id: RangeFacet.java,v 1.19 2002/06/24 19:57:28 kk122374 Exp $ * * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved. * * This software is the proprietary information of Sun Microsystems, Inc. * Use is subject to license terms. * */ package com.sun.msv.datatype.xsd; import org.relaxng.datatype.DatatypeException; import org.relaxng.datatype.ValidationContext; /** * Base class of "(max|min)(In|Ex)clusive" facet validator * * @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a> */ public abstract class RangeFacet extends DataTypeWithValueConstraintFacet { public final Object limitValue; protected RangeFacet( String nsUri, String typeName, XSDatatypeImpl baseType, String facetName, TypeIncubator facets ) throws DatatypeException { super(nsUri,typeName,baseType,facetName,facets); limitValue = facets.getFacet(facetName); } public final Object _createValue( String literal, ValidationContext context ) { Object o = baseType._createValue(literal,context); if(o==null) return null; int r = ((Comparator)concreteType).compare(limitValue,o); if(!rangeCheck(r)) return null; return o; } protected void diagnoseByFacet(String content, ValidationContext context) throws DatatypeException { if( _createValue(content,context)!=null ) return; throw new DatatypeException( DatatypeException.UNKNOWN, localize(ERR_OUT_OF_RANGE, facetName, limitValue) ); } protected abstract boolean rangeCheck( int compareResult ); }