package org.basex.api.xqj; import static org.basex.api.xqj.BXQText.*; import java.io.PrintWriter; import java.sql.Connection; import java.util.Map.Entry; import java.util.Properties; import javax.xml.xquery.XQDataSource; import javax.xml.xquery.XQException; import org.basex.core.Context; import org.basex.core.MainProp; import org.basex.core.Text; import org.basex.util.Util; /** * Java XQuery API - Data Source. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class BXQDataSource implements XQDataSource { /** Static database context. */ private static Context context; /** Log output (currently ignored). */ private PrintWriter log; /** User. */ private final Properties props = new Properties(); /** Timeout. */ private int timeout; /** * Default constructor. */ public BXQDataSource() { props.setProperty(USER, Text.ADMIN); props.setProperty(PASSWORD, Text.ADMIN); props.setProperty(SERVERNAME, MainProp.HOST[1].toString()); props.setProperty(PORT, MainProp.PORT[1].toString()); } /** * Returns the static database context reference. * @return database context */ static Context context() { if(context == null) context = new Context(); return context; } @Override public BXQConnection getConnection() throws XQException { return getConnection(props.getProperty(USER), props.getProperty(PASSWORD)); } @Override public BXQConnection getConnection(final Connection c) throws XQException { throw new BXQException(SQL); } @Override public BXQConnection getConnection(final String name, final String pw) throws XQException { return new BXQConnection(name, pw); } @Override public int getLoginTimeout() { return timeout; } @Override public PrintWriter getLogWriter() { return log; } @Override public String getProperty(final String key) throws XQException { final String val = key != null ? props.getProperty(key) : null; if(val == null) throw new BXQException(PROPS); return val; } @Override public String[] getSupportedPropertyNames() { return new String[] { USER, PASSWORD }; } @Override public void setLoginTimeout(final int to) { timeout = to; } @Override public void setLogWriter(final PrintWriter out) { log = out; } @Override public void setProperties(final Properties prop) throws XQException { if(prop == null) throw new BXQException(NULL, Util.name(Properties.class)); for(final Entry<?, ?> o : prop.entrySet()) { setProperty(o.getKey().toString(), o.getValue().toString()); } } @Override public void setProperty(final String key, final String val) throws XQException { getProperty(key); props.setProperty(key, val); } }