package org.h3270.logicalunit;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.h3270.render.H3270Configuration;
public class LogicalUnitPoolFactory {
protected final static Log logger = LogFactory.getLog(LogicalUnitPoolFactory.class);
public static LogicalUnitPool createLogicalUnitPool(H3270Configuration configuration) {
String luBuilderClass = configuration.getLogicalUnitBuilderClass();
try {
return createLogicalUnitPool(luBuilderClass);
} catch (ConfigurationException e) {
throw (new RuntimeException(e));
}
}
public static LogicalUnitPool createLogicalUnitPool(Configuration configuration) throws ConfigurationException {
String luBuilderClass = createLogicalUnitBuilderClass(configuration);
return createLogicalUnitPool(luBuilderClass);
}
public static LogicalUnitPool createLogicalUnitPool(String luBuilderClass) throws ConfigurationException {
if (luBuilderClass != null) {
try {
LogicalUnitBuilder builder = (LogicalUnitBuilder)Class.forName(luBuilderClass).newInstance();
return new LogicalUnitPool(builder);
} catch (Exception e) {
String message = "Cannot create an instance of class '" + luBuilderClass
+ "'. See h3270 configuration of logical units.";
logger.error(message);
throw new RuntimeException(message, e);
}
}
return null;
}
public static String createLogicalUnitBuilderClass(Configuration config) throws ConfigurationException {
boolean usePool = config.getChild("logical-units").getChild("use-pool").getValueAsBoolean();
if (usePool) {
return config.getChild("lu-builder").getValue();
}
return null;
}
}