/**
* Copyright (C) 2010 Orbeon, Inc.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the Free Software Foundation; either version
* 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The full text of the license is available at http://www.gnu.org/copyleft/lesser.html
*/
package org.orbeon.oxf.processor;
import org.orbeon.dom.Document;
import org.orbeon.oxf.pipeline.api.PipelineContext;
import org.orbeon.oxf.xml.XPathUtils;
/**
* Datasource represents a simple datasource configuration.
*
* Used by the SQL and XML:DB processors.
*/
public class Datasource {
public static final String DRIVER_CLASS_NAME = "driver-class-name";
public static final String URI_PROPERTY = "uri";
public static final String USERNAME_PROPERTY = "username";
public static final String PASSWORD_PROPERTY = "password";
private String driverClassName;
private String uri;
private String username;
private String password;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Datasource() {
}
public Datasource(String driverClassName, String uri, String username, String password) {
this.driverClassName = driverClassName;
this.uri = uri;
this.username = username;
this.password = password;
}
private Datasource(ProcessorImpl processorImpl, Document datasourceDocument) {
// Try local configuration first
String driverClassName = XPathUtils.selectStringValueNormalize(datasourceDocument, "/*/" + DRIVER_CLASS_NAME);
String url = XPathUtils.selectStringValueNormalize(datasourceDocument, "/*/" + URI_PROPERTY);
String username = XPathUtils.selectStringValueNormalize(datasourceDocument, "/*/" + USERNAME_PROPERTY);
String password = XPathUtils.selectStringValueNormalize(datasourceDocument, "/*/" + PASSWORD_PROPERTY);
// Override with properties if needed
setDriverClassName(driverClassName != null ? driverClassName : processorImpl.getPropertySet().getString(DRIVER_CLASS_NAME));
setUri(url != null ? url : processorImpl.getPropertySet().getString(URI_PROPERTY));
setUsername(username != null ? username : processorImpl.getPropertySet().getString(USERNAME_PROPERTY));
setPassword(password != null ? password : processorImpl.getPropertySet().getString(PASSWORD_PROPERTY));
}
/**
* Read a processor input into a datasource.
*
* @param pipelineContext current pipeline context
* @param processorImpl instance of ProcessorImpl
* @param datasourceInput input referring to the datasource definition
* @return Datasource object
*/
public static Datasource getDatasource(PipelineContext pipelineContext, final ProcessorImpl processorImpl, final ProcessorInput datasourceInput) {
return processorImpl.readCacheInputAsObject(pipelineContext, datasourceInput, new CacheableInputReader<Datasource>() {
public Datasource read(PipelineContext context, ProcessorInput input) {
return new Datasource(processorImpl, processorImpl.readInputAsOrbeonDom(context, datasourceInput));
}
});
}
public String toString() {
return "[" + driverClassName + "|" + uri + "|" + username + "]";
}
}