// Copyright (c) 2002 Dustin Sallings <dustin@spy.net> package net.spy.db; import net.spy.SpyObject; import net.spy.log.Logger; import net.spy.log.LoggerFactory; /** * Factory for finding a QuerySelector instance. * * If the system propery <code>net.spy.db.QuerySelector</code> is set, it * will point to the QuerySelector implementation to use, otherwise * {@link net.spy.db.DatabaseMetaDataQuerySelector} is used. */ public class QuerySelectorFactory extends SpyObject { private static QuerySelector qs=null; private static final String PROPERTY_NAME= "net.spy.db.QuerySelector"; private static final String DEFAULT_SELECTOR= "net.spy.db.DatabaseMetaDataQuerySelector"; /** * Get the QuerySelector instance. */ public static QuerySelector getQuerySelector() { initQuerySelector(); return (qs); } private static synchronized void initQuerySelector() { if(qs == null) { String selectorClassName=System.getProperty( PROPERTY_NAME, DEFAULT_SELECTOR); try { @SuppressWarnings("unchecked") Class<? extends QuerySelector> c =(Class<? extends QuerySelector>) Class.forName( selectorClassName); qs=c.newInstance(); } catch(Exception e) { Logger l=LoggerFactory.getLogger(QuerySelectorFactory.class); l.warn("Couldn't make a %s, using %s", selectorClassName, DEFAULT_SELECTOR, e); qs=new DatabaseMetaDataQuerySelector(); } } } }