Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1222 → Rev 1223

/hostadmiral/branches/hibernate3/src/ak/hostadmiral/core/config/Configurator.java
0,0 → 1,182
package ak.hostadmiral.core.config;
 
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
import java.io.IOException;
import java.io.InputStream;
import org.xml.sax.SAXException;
 
import org.apache.log4j.Logger;
import org.apache.commons.digester.Digester;
import org.hibernate.HibernateException;
 
import ak.hostadmiral.util.ConfigInit;
import ak.hostadmiral.util.ModelException;
import ak.hostadmiral.util.hibernate.HibernateUtil;
import ak.hostadmiral.core.model.*;
 
public class Configurator
{
public static final int CONFIG_VERSION = 1;
 
private static final Logger logger = Logger.getLogger(Configurator.class);
 
private InputStream defaultStream;
private InputStream userStream;
 
public void setDefaultStream(InputStream defaultStream)
{
this.defaultStream = defaultStream;
}
 
public void setUserStream(InputStream userStream)
{
this.userStream = userStream;
}
 
private void checkConfigVersion(String name, ConfigRoot config)
throws ModelException
{
if(config.getVersionMajor() == 0)
throw new ModelException("Cannot get version of " + name + " config");
 
if(config.getVersionMajor() != CONFIG_VERSION)
throw new ModelException("Version " + CONFIG_VERSION + " of " + name
+ " config is required but " + config.getVersionMajor() + " found");
}
 
public void configure()
throws ModelException
{
ConfigRoot config;
try {
// get config
ConfigRoot defaultConfig = readConfig(defaultStream);
logger.debug("default:\n" + defaultConfig);
checkConfigVersion("default", defaultConfig);
 
ConfigRoot userConfig = readConfig(userStream);
logger.debug("user:\n" + userConfig);
checkConfigVersion("user", userConfig);
 
config = defaultConfig.merge(userConfig);
logger.info("result config:\n" + config);
}
catch(Exception ex) {
throw new ModelException("Cannot read config: " + ex);
}
 
// init data source
ConfigDataSource cs = config.getDataSource();
try {
HibernateUtil.configure(cs.getDriver(), cs.getUserName(), cs.getPassword(),
cs.getUrl(), cs.getDialect());
}
catch(HibernateException ex) {
throw new ModelException("Cannot init data source: " + ex);
}
 
// init classes
for(Iterator i = config.getInitialization().iterator(); i.hasNext(); ) {
ConfigInitialization ci = (ConfigInitialization)i.next();
 
if(ci.getIgnore()) continue;
 
// get class
Class c = null;
try {
c = Class.forName(ci.getClassName());
}
catch(ClassCastException ex) {
logger.error("Class " + ci.getClassName() + " has wrong type", ex);
}
catch(Exception ex) {
logger.error("Cannot get class " + ci.getClassName(), ex);
}
if(c == null) continue;
 
if(ConfigInit.class.isAssignableFrom(c)) {
ConfigInit o = null;
try {
o = (ConfigInit)c.newInstance();
}
catch(Exception ex) {
logger.error("Cannot get instance of class " + c.getClass().getName(), ex);
}
if(o == null) continue;
 
Map params = new HashMap();
for(Iterator j = ci.getInitParam().iterator(); j.hasNext(); ) {
ConfigInitParam p = (ConfigInitParam)j.next();
params.put(p.getName(), (String[])p.getValues().toArray(new String[0]));
}
 
try {
o.init(params);
}
catch(ModelException ex) {
logger.error("Cannot initialize instance of class "
+ c.getClass().getName(), ex);
}
}
else {
logger.error("Class " + c.getClass().getName()
+ " does not implement ak.hostadmiral.util.ConfigInit interface");
}
}
}
 
private ConfigRoot readConfig(InputStream in)
throws IOException, SAXException
{
return (ConfigRoot)createDigester().parse(in);
}
 
private Digester createDigester()
{
Digester digester = new Digester();
digester.setValidating(false);
 
digester.addObjectCreate("hostadmiral", ConfigRoot.class);
digester.addSetProperties("hostadmiral/version", "major", "versionMajor");
digester.addSetProperties("hostadmiral/version", "minor", "versionMinor");
 
digester.addObjectCreate("hostadmiral/datasource", ConfigDataSource.class);
digester.addBeanPropertySetter("hostadmiral/datasource/type", "type");
digester.addBeanPropertySetter("hostadmiral/datasource/settings/driver", "driver");
digester.addBeanPropertySetter("hostadmiral/datasource/settings/username", "userName");
digester.addBeanPropertySetter("hostadmiral/datasource/settings/password", "password");
digester.addBeanPropertySetter("hostadmiral/datasource/settings/url", "url");
digester.addBeanPropertySetter("hostadmiral/datasource/settings/dialect", "dialect");
digester.addSetNext("hostadmiral/datasource", "setDataSource");
 
digester.addObjectCreate("hostadmiral/initializations/initialization",
ConfigInitialization.class);
digester.addBeanPropertySetter("hostadmiral/initializations/initialization/class",
"className");
digester.addBeanPropertySetter("hostadmiral/initializations/initialization/ignore",
"ignore");
digester.addSetNext("hostadmiral/initializations/initialization", "addInitialization");
 
digester.addObjectCreate("hostadmiral/initializations/initialization/init-param",
ConfigInitParam.class);
digester.addBeanPropertySetter(
"hostadmiral/initializations/initialization/init-param/param-name", "name");
digester.addBeanPropertySetter(
"hostadmiral/initializations/initialization/init-param/param-value", "value");
digester.addSetNext("hostadmiral/initializations/initialization/init-param",
"addInitParam");
 
return digester;
}
 
private static Configurator configurator;
 
public static Configurator getInstance()
{
if(configurator == null) configurator = new Configurator();
 
return configurator;
}
}
/hostadmiral/branches/hibernate3/src/ak/hostadmiral/core/config/ConfigInitParam.java
0,0 → 1,43
package ak.hostadmiral.core.config;
 
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
 
public class ConfigInitParam
{
private String name;
private List values = new ArrayList();
 
public String getName()
{
return name;
}
 
public void setName(String name)
{
this.name = name;
}
 
public List getValues()
{
return values;
}
 
public void setValue(String value)
{
values.add(value);
}
 
public String toString()
{
StringBuffer valuesStr = new StringBuffer();
for(Iterator i = values.iterator(); i.hasNext(); ) {
String s = (String)i.next();
if(valuesStr.length() > 0) valuesStr.append(";\n\t\t\t\t");
valuesStr.append(s);
}
 
return "\t\t\t" + name + "=" + valuesStr + "\n";
}
}
/hostadmiral/branches/hibernate3/src/ak/hostadmiral/core/config/ConfigRoot.java
0,0 → 1,87
package ak.hostadmiral.core.config;
 
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import ak.hostadmiral.util.ModelException;
 
public class ConfigRoot
{
private int versionMajor;
private int versionMinor;
private ConfigDataSource dataSource;
private List initializations = new ArrayList(); // List(ConfigInitialization)
 
public int getVersionMajor()
{
return versionMajor;
}
 
public void setMajor(String major)
{
this.versionMajor = Integer.parseInt(major);
}
 
public int getVersionMinor()
{
return versionMinor;
}
 
public void setMinor(String minor)
{
this.versionMinor = Integer.parseInt(minor);
}
 
public ConfigDataSource getDataSource()
{
return dataSource;
}
 
public void setDataSource(ConfigDataSource dataSource)
{
this.dataSource = dataSource;
}
 
public List getInitialization()
{
return initializations;
}
 
public void addInitialization(ConfigInitialization initialization)
{
initializations.add(initialization);
}
 
public ConfigRoot merge(ConfigRoot second)
throws ModelException
{
if(second == null) return this;
 
if(this.versionMajor != second.versionMajor)
throw new ModelException("First config has version " + this.versionMajor
+ ", second - " + second.versionMajor);
 
this.dataSource = dataSource.merge(second.dataSource);
 
for(Iterator i = second.initializations.iterator(); i.hasNext(); ) {
ConfigInitialization ci = (ConfigInitialization)i.next();
 
this.initializations.remove(ci);
this.initializations.add(ci);
}
 
return this;
}
 
public String toString()
{
StringBuffer initStr = new StringBuffer();
for(Iterator i = initializations.iterator(); i.hasNext(); ) {
ConfigInitialization ci = (ConfigInitialization)i.next();
initStr.append(ci);
}
 
return "hostadmiral config v" + versionMajor + "." + versionMinor + "\n"
+ dataSource + "\n\tinitializations:\n" + initStr.toString() + "end of config";
}
}
/hostadmiral/branches/hibernate3/src/ak/hostadmiral/core/config/ConfigInitialization.java
0,0 → 1,77
package ak.hostadmiral.core.config;
 
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;
 
public class ConfigInitialization
{
private String className;
private boolean ignore = false;
private List params = new ArrayList(); // List(ConfigInitParam)
 
public String getClassName()
{
return className;
}
 
public void setClassName(String className)
{
this.className = className;
}
 
public boolean getIgnore()
{
return ignore;
}
 
public void setIgnore(boolean ignore)
{
this.ignore = ignore;
}
 
public void setIgnore(String ignore)
{
this.ignore = Boolean.valueOf(ignore).booleanValue();
}
 
public List getInitParam()
{
return params;
}
 
public void addInitParam(ConfigInitParam param)
{
params.add(param);
}
 
public boolean equals(Object obj)
{
if(!(obj instanceof ConfigInitialization)) return false;
 
ConfigInitialization second = (ConfigInitialization)obj;
 
return (this.className != null && second.className != null
&& this.className.equals(second.className));
}
 
public int hashCode()
{
if(className == null)
return 0;
else
return className.hashCode();
}
 
public String toString()
{
StringBuffer paramsStr = new StringBuffer();
for(Iterator i = params.iterator(); i.hasNext(); ) {
ConfigInitParam p = (ConfigInitParam)i.next();
paramsStr.append(p);
}
 
return "\t\t" + className + (ignore ? " (ignore)" : "") + ":\n"
+ paramsStr.toString() + "\n";
}
}
/hostadmiral/branches/hibernate3/src/ak/hostadmiral/core/config/ConfigDataSource.java
0,0 → 1,96
package ak.hostadmiral.core.config;
 
public class ConfigDataSource
{
private String type;
private String driver;
private String userName;
private String password;
private String url;
private String dialect;
 
public String getType()
{
return type;
}
 
public void setType(String type)
{
this.type = type;
}
 
public String getDriver()
{
return driver;
}
 
public void setDriver(String driver)
{
this.driver = driver;
}
 
public String getUserName()
{
return userName;
}
 
public void setUserName(String userName)
{
this.userName = userName;
}
 
public String getPassword()
{
return password;
}
 
public void setPassword(String password)
{
this.password = password;
}
 
public String getUrl()
{
return url;
}
 
public void setUrl(String url)
{
this.url = url;
}
 
public String getDialect()
{
return dialect;
}
 
public void setDialect(String dialect)
{
this.dialect = dialect;
}
 
public ConfigDataSource merge(ConfigDataSource second)
{
if(second == null) return this;
 
if(second.type != null) this.type = second.type;
if(second.driver != null) this.driver = second.driver;
if(second.userName != null) this.userName = second.userName;
if(second.password != null) this.password = second.password;
if(second.url != null) this.url = second.url;
if(second.dialect != null) this.dialect = second.dialect;
 
return this;
}
 
public String toString()
{
return "\tdata source: " + type + "\n"
+ "\t\tdriver: " + driver + "\n"
+ "\t\tuserName: " + userName + "\n"
+ "\t\tpassword: "
+ ((password == null || password.equals("")) ? "(not set)" : "(set)") + "\n"
+ "\t\turl: " + url + "\n"
+ "\t\tdialect: " + dialect + "\n";
}
}