/*
* @(#)$Id: UnsignedShortType.java,v 1.14 2001/08/14 22:17:59 Bear 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.ValidationContext;
/**
* "unsignedShort" type.
*
* type of the value object is <code>java.lang.Integer</code>.
* See http://www.w3.org/TR/xmlschema-2/#unsignedShort for the spec
*
* We don't have language support for unsigned datatypes, so things are not so easy.
* UnsignedShortType uses a IntType as a base implementation, for the convenience and
* faster performance.
*
* @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a>
*/
public class UnsignedShortType extends IntType {
public static final UnsignedShortType theInstance = new UnsignedShortType();
private UnsignedShortType() { super("unsignedShort"); }
public XSDatatype getBaseType() {
return UnsignedIntType.theInstance;
}
/** upper bound value. this is the maximum possible valid value as an unsigned int */
private static final int upperBound = 65535;
public Object _createValue( String lexicalValue, ValidationContext context ) {
// Implementation of JDK1.2.2/JDK1.3 is suitable enough
try {
Integer v = (Integer)super._createValue(lexicalValue,context);
if(v==null) return null;
if( v.intValue()<0 ) return null;
if( v.intValue()>upperBound ) return null;
return v;
} catch( NumberFormatException e ) {
return null;
}
}
}