package com.sun.msv.datatype.xsd.ngimpl; import org.relaxng.datatype.*; import com.sun.msv.datatype.xsd.XSDatatype; import com.sun.msv.datatype.xsd.XSDatatypeImpl; import com.sun.msv.datatype.xsd.TypeIncubator; class DatatypeBuilderImpl implements DatatypeBuilder { private TypeIncubator incubator; DatatypeBuilderImpl( XSDatatype baseType ) { incubator = new TypeIncubator(baseType); } public void addParameter( String name, String value, ValidationContext context ) throws DatatypeException { if( name.equals(XSDatatype.FACET_ENUMERATION) ) // the enumeration facet is not allowed for RELAX NG. throw new DatatypeException( XSDatatypeImpl.localize(XSDatatypeImpl.ERR_NOT_APPLICABLE_FACET, name) ); incubator.addFacet( name, value, context ); if( name.equals(XSDatatype.FACET_PATTERN) ) // if the pattern facet is specified, we have to // derive a new type so that multiple pattern facets can // work as ANDing. incubator = new TypeIncubator(incubator.derive(null,null)); } public Datatype createDatatype() throws DatatypeException { return incubator.derive(null,null); } }