package com.thaiopensource.datatype.xsd;
import com.thaiopensource.datatype.xsd.regex.RegexEngine;
import com.thaiopensource.util.Service;
import com.thaiopensource.xml.util.WellKnownNamespaces;
import org.relaxng.datatype.DatatypeLibrary;
import org.relaxng.datatype.DatatypeLibraryFactory;
import java.util.Iterator;
public class DatatypeLibraryFactoryImpl implements DatatypeLibraryFactory {
private DatatypeLibrary datatypeLibrary = null;
private final RegexEngine regexEngine;
private final boolean autoRegexEngine;
public DatatypeLibraryFactoryImpl() {
this.regexEngine = null;
this.autoRegexEngine = true;
}
public DatatypeLibraryFactoryImpl(RegexEngine regexEngine) {
this.regexEngine = regexEngine;
this.autoRegexEngine = false;
}
public DatatypeLibrary createDatatypeLibrary(String uri) {
if (!WellKnownNamespaces.XML_SCHEMA_DATATYPES.equals(uri))
return null;
synchronized (this) {
if (datatypeLibrary == null)
datatypeLibrary = new DatatypeLibraryImpl(autoRegexEngine ? findRegexEngine() : regexEngine);
return datatypeLibrary;
}
}
private static RegexEngine findRegexEngine() {
Iterator<RegexEngine> iter = Service.newInstance(RegexEngine.class).getProviders();
if (!iter.hasNext())
return null;
return iter.next();
}
}