001 package com.thaiopensource.relaxng.impl; 002 003 import org.relaxng.datatype.DatatypeLibrary; 004 import org.relaxng.datatype.DatatypeLibraryFactory; 005 006 import java.util.Hashtable; 007 008 import com.thaiopensource.xml.util.WellKnownNamespaces; 009 010 class BuiltinDatatypeLibraryFactory implements DatatypeLibraryFactory { 011 private final Hashtable cache = new Hashtable(); 012 private final DatatypeLibraryFactory factory; 013 private final DatatypeLibrary builtinDatatypeLibrary 014 = new BuiltinDatatypeLibrary(); 015 private DatatypeLibrary lastDatatypeLibrary = null; 016 private String lastDatatypeLibraryUri = null; 017 018 BuiltinDatatypeLibraryFactory(DatatypeLibraryFactory factory) { 019 this.factory = factory; 020 cache.put(WellKnownNamespaces.RELAX_NG_COMPATIBILITY_DATATYPES, 021 new CompatibilityDatatypeLibrary(this)); 022 } 023 024 public DatatypeLibrary createDatatypeLibrary(String uri) { 025 if (uri.equals("")) 026 return builtinDatatypeLibrary; 027 if (uri.equals(lastDatatypeLibraryUri)) 028 return lastDatatypeLibrary; 029 DatatypeLibrary library = (DatatypeLibrary)cache.get(uri); 030 if (library == null) { 031 if (factory == null) 032 return null; 033 library = factory.createDatatypeLibrary(uri); 034 if (library == null) 035 return null; 036 cache.put(uri, library); 037 } 038 lastDatatypeLibraryUri = uri; 039 return lastDatatypeLibrary = library; 040 } 041 }