//----------------------------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.workflow.impl.store;
import org.apache.commons.collections.FastHashMap;
import org.huihoo.workflow.store.spi.SpiCaseDatabase;
import org.huihoo.workflow.store.spi.SpiUserDatabase;
/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class DatabaseRegistry
{
//------------------------------------------------------------------
// Default database implementation
//------------------------------------------------------------------
public final static String WILLOW_DRIVER_CLASS = "org.huihoo.workflow.jdbc";
private static FastHashMap caseDBS = new FastHashMap();
private static FastHashMap userDBS = new FastHashMap();
static
{
loadOnStartup();
}
public final static SpiCaseDatabase getCaseDatabase(String vendorDriverClazz)
{
return lookupCaseDB(vendorDriverClazz);
}
public final static SpiUserDatabase getUserDatabase(String vendorDriverClazz)
{
return lookupUserDB(vendorDriverClazz);
}
public final static SpiCaseDatabase lookupCaseDB(String vendorDriverClazz)
{
SpiCaseDatabase caseDatabase= (SpiCaseDatabase) caseDBS.get(vendorDriverClazz);
if(caseDatabase==null)
{
caseDatabase= (SpiCaseDatabase) caseDBS.get(WILLOW_DRIVER_CLASS);
}
return caseDatabase;
}
public final static SpiUserDatabase lookupUserDB(String vendorDriverClazz)
{
SpiUserDatabase userDatabase=(SpiUserDatabase) userDBS.get(vendorDriverClazz);
if(userDatabase==null)
{
userDatabase=(SpiUserDatabase) userDBS.get(WILLOW_DRIVER_CLASS);
}
return userDatabase;
}
public static void deregisterCaseDB()
{
caseDBS.clear();
SpiCaseDatabase caseDatabase=new org.huihoo.workflow.impl.store.spi.SpiCaseDatabaseImpl();
caseDBS.put(WILLOW_DRIVER_CLASS, caseDatabase);
}
public static void deregisterUserDB()
{
userDBS.clear();
SpiUserDatabase userDatabase=new org.huihoo.workflow.impl.store.spi.SpiUserDatabaseImpl_RT();
userDBS.put(WILLOW_DRIVER_CLASS, userDatabase);
}
public static void deregisterCaseDB(String vendorDriverClazz)
{
caseDBS.remove(vendorDriverClazz);
}
public static void deregisterUserDB(String vendorDriverClazz)
{
userDBS.remove(vendorDriverClazz);
}
public static void registerCaseDB(String vendorDriverClazz,SpiCaseDatabase caseDatabase)
{
caseDBS.put(vendorDriverClazz, caseDatabase);
}
public static void registerUserDB(String vendorDriverClazz,SpiUserDatabase userDatabase)
{
userDBS.put(vendorDriverClazz, userDatabase);
}
private static void loadOnStartup()
{
caseDBS.setFast(false);
deregisterCaseDB();
caseDBS.setFast(true);
userDBS.setFast(false);
deregisterUserDB();
userDBS.setFast(true);
}
}