001    package com.thaiopensource.relaxng.impl;
002    
003    import org.relaxng.datatype.Datatype;
004    import org.relaxng.datatype.DatatypeBuilder;
005    import org.relaxng.datatype.DatatypeException;
006    import org.relaxng.datatype.DatatypeLibrary;
007    import org.relaxng.datatype.DatatypeLibraryFactory;
008    import com.thaiopensource.xml.util.WellKnownNamespaces;
009    
010    class CompatibilityDatatypeLibrary implements DatatypeLibrary {
011      private final DatatypeLibraryFactory factory;
012      private DatatypeLibrary xsdDatatypeLibrary = null;
013    
014      CompatibilityDatatypeLibrary(DatatypeLibraryFactory factory) {
015        this.factory = factory;
016      }
017    
018      public DatatypeBuilder createDatatypeBuilder(String type)
019              throws DatatypeException {
020        if (type.equals("ID") || type.equals("IDREF") || type.equals("IDREFS")) {
021          if (xsdDatatypeLibrary == null) {
022            xsdDatatypeLibrary = factory.createDatatypeLibrary(WellKnownNamespaces.XML_SCHEMA_DATATYPES);
023            if (xsdDatatypeLibrary == null)
024              throw new DatatypeException();
025          }
026          return xsdDatatypeLibrary.createDatatypeBuilder(type);
027        }
028        throw new DatatypeException();
029      }
030    
031      public Datatype createDatatype(String type) throws DatatypeException {
032        return createDatatypeBuilder(type).createDatatype();
033      }
034    }