package at.gv.egovernment.moa.id.proxy; import java.util.HashMap; import java.util.Map; import at.gv.egovernment.moa.id.config.ConfigurationException; import at.gv.egovernment.moa.id.config.proxy.OAProxyParameter; import at.gv.egovernment.moa.id.config.proxy.ProxyConfigurationProvider; /** * Factory delivering a {@link ConnectionBuilder} implementation for * an online application, initialized from configuration data. * @author Paul Ivancsics * @version $Id$ */ public class ConnectionBuilderFactory { /** default connection builder to be used for online application * where no special implementation of the ConnectionBuilder * interface is configured */ private static ConnectionBuilder defaultConnectionBuilder; /** mapping from online application public URL prefix to an implementation * of the ConnectionBuilder interface to be used; * if no mapping is given for an online application, the * DefaultConnectionBuilder will be used */ private static Map connectionBuilderMap; /** * Initializes the ConnectionBuilder map from the configuration data. * @throws ConfigurationException when the configuration cannot be read, * or when a class name configured cannot be instantiated */ public static void initialize() throws ConfigurationException { defaultConnectionBuilder = new DefaultConnectionBuilder(); connectionBuilderMap = new HashMap(); ProxyConfigurationProvider proxyConf = ProxyConfigurationProvider.getInstance(); for (int i = 0; i < proxyConf.getOnlineApplicationParameters().length; i++) { OAProxyParameter oaParam = proxyConf.getOnlineApplicationParameters()[i]; String publicURLPrefix = oaParam.getPublicURLPrefix(); String className = oaParam.getConnectionBuilderImpl(); if (className != null) { try { ConnectionBuilder cb = (ConnectionBuilder)Class.forName(className).newInstance(); connectionBuilderMap.put(publicURLPrefix, cb); } catch (Throwable ex) { throw new ConfigurationException("config.07", new Object[] {publicURLPrefix}, ex); } } } } /** * Gets the ConnectionBuilder implementation to be used for the given * online application. * @param publicURLPrefix public URL prefix of the online application * @return ConnectionBuilder implementation */ public static ConnectionBuilder getConnectionBuilder(String publicURLPrefix) { ConnectionBuilder cb = (ConnectionBuilder) connectionBuilderMap.get(publicURLPrefix); if (cb == null) return defaultConnectionBuilder; else return cb; } }