//----------------------------BEGIN LICENSE----------------------------
/*
* Willow : the Open Source WorkFlow Project
* Distributable under GNU LGPL license by gun.org
*
* Copyright (C) 2004-2010 huihoo.org
* Copyright (C) 2004-2010 ZosaTapo <dertyang@hotmail.com>
*
* ====================================================================
* Project Homepage : http://www.huihoo.org/willow
* Source Forge : http://sourceforge.net/projects/huihoo
* Mailing list : willow@lists.sourceforge.net
*/
//----------------------------END LICENSE-----------------------------
package org.huihoo.willow.store;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.commons.digester.Digester;
import org.huihoo.willow.startup.DigesterFactory;
import org.huihoo.workflow.store.spi.SpiCaseDatabase;
import org.huihoo.workflow.store.spi.SpiUserDatabase;
import org.xml.sax.InputSource;
import org.huihoo.workflow.impl.store.DatabaseRegistry;
/**
* @author reic
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class DatabaseLoader
{
public static void loadOnStartup(String databaseXml)
{
if(databaseXml==null || databaseXml.length()==0)
{
return;
}
File databaseFile = new File(databaseXml);
if (!databaseFile.isAbsolute())
{
databaseFile = new File(System.getProperty("willow.home"), databaseXml);
}
if (!databaseFile.exists() || !databaseFile.isFile())
{
String sysPropDatabase=System.getProperty(Constants.PROPS_WILLOW_DATABASE);
if(sysPropDatabase==null)
{
databaseFile=null;
}
else
{
databaseFile=new File(sysPropDatabase);
}
}
if (databaseFile==null || !databaseFile.exists() || !databaseFile.isFile())
{
return;
}
Digester dbDigester = DigesterFactory.newDigester(false, false, new DatabaseRuleSet());
ClassLoader clazzLoader = DatabaseLoader.class.getClassLoader();
dbDigester.setClassLoader(clazzLoader);
dbDigester.setUseContextClassLoader(false);
InputSource inputSource = null;
InputStream inputStream = null;
try
{
inputStream = new FileInputStream(databaseFile);
inputSource = new InputSource("file://" + databaseFile.getAbsolutePath());
}
catch (Exception e)
{
;
}
if (inputStream == null)
{
return;
}
DatabaseEntries entries = new DatabaseEntries();
try
{
inputSource.setByteStream(inputStream);
dbDigester.push(entries);
dbDigester.parse(inputSource);
inputStream.close();
}
catch (Exception e)
{
System.out.println("DatabaseLoader.loadOnStartup: " + e);
e.printStackTrace(System.out);
return;
}
Enumeration databases = entries.entries();
while (databases.hasMoreElements())
{
DatabaseEntry database =
(DatabaseEntry) entries.findDatabaseEntry((String) databases.nextElement());
registerDatabase(database);
}
}
private static void registerDatabase(DatabaseEntry databaseEntry)
{
String driver = databaseEntry.getDriver();
if (driver == null)
{
return;
}
ClassLoader clazzLoader = DatabaseLoader.class.getClassLoader();
String userdatabaseClass = databaseEntry.getUserDatabaseClass();
String casedatabaseClass = databaseEntry.getCaseDatabaseClass();
if (userdatabaseClass != null)
{
try
{
Class clazz = clazzLoader.loadClass(userdatabaseClass);
SpiUserDatabase spiUserDatabase = (SpiUserDatabase) clazz.newInstance();
DatabaseRegistry.registerUserDB(driver, spiUserDatabase);
}
catch (Throwable e)
{
;
}
}
if (casedatabaseClass != null)
{
try
{
Class clazz = clazzLoader.loadClass(casedatabaseClass);
SpiCaseDatabase spiCaseDatabase = (SpiCaseDatabase) clazz.newInstance();
DatabaseRegistry.registerCaseDB(driver, spiCaseDatabase);
}
catch (Throwable e)
{
;
}
}
}
}