package com.thaiopensource.relaxng.pattern; import com.thaiopensource.xml.util.WellKnownNamespaces; import org.relaxng.datatype.DatatypeLibrary; import org.relaxng.datatype.DatatypeLibraryFactory; import java.util.HashMap; import java.util.Map; class BuiltinDatatypeLibraryFactory implements DatatypeLibraryFactory { private final Map<String, DatatypeLibrary> cache = new HashMap<String, DatatypeLibrary>(); private final DatatypeLibraryFactory factory; private final DatatypeLibrary builtinDatatypeLibrary = new BuiltinDatatypeLibrary(); private DatatypeLibrary lastDatatypeLibrary = null; private String lastDatatypeLibraryUri = null; BuiltinDatatypeLibraryFactory(DatatypeLibraryFactory factory) { this.factory = factory; cache.put(WellKnownNamespaces.RELAX_NG_COMPATIBILITY_DATATYPES, new CompatibilityDatatypeLibrary(this)); } public DatatypeLibrary createDatatypeLibrary(String uri) { if (uri.equals("")) return builtinDatatypeLibrary; if (uri.equals(lastDatatypeLibraryUri)) return lastDatatypeLibrary; DatatypeLibrary library = cache.get(uri); if (library == null) { if (factory == null) return null; library = factory.createDatatypeLibrary(uri); if (library == null) return null; cache.put(uri, library); } lastDatatypeLibraryUri = uri; return lastDatatypeLibrary = library; } }