package railo.runtime.db;
import java.util.TimeZone;
import railo.commons.lang.ClassException;
import railo.runtime.config.ConfigWebFactory;
import railo.runtime.exp.ApplicationException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.type.Struct;
public class ApplicationDataSource extends DataSourceSupport {
private String connStr;
private ApplicationDataSource(String name, String className, String connStr, String username, String password,
boolean blob, boolean clob, int connectionLimit, int connectionTimeout, long metaCacheTimeout, TimeZone timezone, int allow, boolean storage, boolean readOnly) throws ClassException {
this(name, toClass(className), connStr, username, password,
blob, clob, connectionLimit, connectionTimeout, metaCacheTimeout, timezone, allow, storage, readOnly);
}
private ApplicationDataSource(String name, Class clazz, String connStr, String username, String password,
boolean blob, boolean clob, int connectionLimit, int connectionTimeout, long metaCacheTimeout, TimeZone timezone, int allow, boolean storage, boolean readOnly) {
super(name, clazz,username,ConfigWebFactory.decrypt(password),
blob,clob,connectionLimit, connectionTimeout, metaCacheTimeout, timezone, allow<0?ALLOW_ALL:allow, storage, readOnly);
this.connStr = connStr;
}
public static DataSource getInstance(String name, String className, String connStr, String username, String password,
boolean blob, boolean clob, int connectionLimit, int connectionTimeout, long metaCacheTimeout, TimeZone timezone, int allow, boolean storage, boolean readOnly) throws ClassException {
return new ApplicationDataSource(name, className, connStr, username, password, blob, clob, connectionLimit, connectionTimeout, metaCacheTimeout, timezone, allow, storage, readOnly);
}
@Override
public String getDsnOriginal() {
throw exp();
}
@Override
public String getConnectionString() {
throw exp();
}
@Override
public String getDsnTranslated() {
return getConnectionStringTranslated();
}
@Override
public String getConnectionStringTranslated() {
return connStr;
}
@Override
public String getDatabase() {
throw new PageRuntimeException(new ApplicationException("Datasource defined in the Application.cfc has no name."));
}
@Override
public int getPort() {
throw exp();
}
@Override
public String getHost() {
throw exp();
}
@Override
public DataSource cloneReadOnly() {
return new ApplicationDataSource(getName(), getClazz(), connStr, getUsername(), getPassword(),
isBlob(), isClob(), getConnectionLimit(), getConnectionTimeout(), getMetaCacheTimeout(), getTimeZone(), allow, isStorage(), isReadOnly());
}
@Override
public String getCustomValue(String key) {
throw exp();
}
@Override
public String[] getCustomNames() {
throw exp();
}
@Override
public Struct getCustoms() {
throw exp();
}
@Override
public boolean validate() {
throw exp();
}
private PageRuntimeException exp() {
//return new MethodNotSupportedException();
throw new PageRuntimeException(new ApplicationException("method not supported"));
}
}