/******************************************************************************* * Copyright 2014 Federal Chancellery Austria * MOA-ID has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. ******************************************************************************/ /* * Copyright 2003 Federal Chancellery Austria * MOA-ID has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package at.gv.egovernment.moa.id.proxy; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; 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 LoginParameterResolver} implementation for * an online application, initialized from configuration data. * @author Paul Ivancsics * @version $Id$ */ public class LoginParameterResolverFactory { /** default login parameter resolver to be used for online application * where no special implementation of the LoginParameterResolver * interface is configured */ private static LoginParameterResolver defaultLoginParameterResolver; /** mapping from online application public URL prefix to an implementation * of the LoginParameterResolver interface to be used; * if no mapping is given for an online application, the * DefaultLoginParameterResolver will be used */ private static Map loginParameterResolverMap; /** * Initializes the LoginParameterResolver 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 { defaultLoginParameterResolver = new DefaultLoginParameterResolver(); loginParameterResolverMap = 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.getLoginParameterResolverImpl(); String configuration = oaParam.getLoginParameterResolverConfiguration(); if (className != null) { try { Class lprClass = Class.forName(className); LoginParameterResolver lpr = (LoginParameterResolver)Class.forName(className).newInstance(); Class[] argumentTypes = { String.class, Boolean.class }; Method confMethod = lprClass.getMethod( "configure", argumentTypes ); Object[] arguments = { new String(configuration), new Boolean(oaParam.getBusinessService()) }; confMethod.invoke( lpr, arguments ); loginParameterResolverMap.put(publicURLPrefix, lpr); } catch (InvocationTargetException lpex) { throw new ConfigurationException("config.11", new Object[] {className}, lpex); } catch (Throwable ex) { throw new ConfigurationException("config.07", new Object[] {publicURLPrefix}, ex); } } } } /** * Gets the LoginParameterResolver implementation to be used for the given * online application. * @param publicURLPrefix public URL prefix of the online application * @return LoginParameterResolver implementation */ public static LoginParameterResolver getLoginParameterResolver(String publicURLPrefix) { LoginParameterResolver lpr = (LoginParameterResolver) loginParameterResolverMap.get(publicURLPrefix); if (lpr == null) return defaultLoginParameterResolver; else return lpr; } }