package org.marketcetera.module;
import org.marketcetera.util.log.I18NMessage0P;
import org.marketcetera.util.misc.ClassVersion;
import java.util.concurrent.locks.Lock;
/* $License$ */
/**
* Factory for {@link ConcurrentTestModule}.
*
* @author anshul@marketcetera.com
* @version $Id: ConcurrentTestFactory.java 16841 2014-02-20 19:59:04Z colin $
* @since 1.1.0
*/
@ClassVersion("$Id: ConcurrentTestFactory.java 16841 2014-02-20 19:59:04Z colin $")
public class ConcurrentTestFactory extends ModuleFactory {
public ConcurrentTestFactory() {
super(PROVIDER_URN, new I18NMessage0P(Messages.LOGGER, "provider"),
!sSingleton, sAutoCreate, ModuleURN.class);
}
public Module create(Object... inParameters) throws ModuleCreationException {
if(sNextCreateLock != null) {
sNextCreateLock.lock();
}
return new ConcurrentTestModule((ModuleURN)inParameters[0], sAutoCreate);
}
/**
* Configures the factory to be a singleton.
*
* @param inSingleton if the factory should be a singleton.
*/
public static void setSingleton(boolean inSingleton) {
sSingleton = inSingleton;
}
/**
* Configures the factory to auto-create module instances.
*
* @param inAutoCreate if the modules should be auto created.
*/
public static void setAutoCreate(boolean inAutoCreate) {
sAutoCreate = inAutoCreate;
}
/**
* Sets the lock that should be acquired before creating the next module
* instance.
*
* @param inNextCreateLock the lock instance to use. Can be null, if
* no lock needs to be acquired.
*/
public static void setNextCreateLock(Lock inNextCreateLock) {
sNextCreateLock = inNextCreateLock;
}
/**
* Clears up all the state for the factory.
*/
public static void clear() {
setSingleton(false);
setAutoCreate(false);
setNextCreateLock(null);
}
static final ModuleURN PROVIDER_URN = new ModuleURN("metc:test:concurrent");
public static final ModuleURN INSTANCE_URN = new ModuleURN(PROVIDER_URN, "default");
private static boolean sSingleton = false;
private static boolean sAutoCreate = false;
private static Lock sNextCreateLock = null;
}