package at.knowcenter.wag.egov.egiz.ldap.api; import java.util.Hashtable; import org.apache.log4j.Logger; import at.knowcenter.wag.egov.egiz.sig.LDAPAPI; /** * @author Thomas Knall */ public class LDAPAPIFactoryImpl extends LDAPAPIFactory { private static final Logger log = Logger.getLogger(LDAPAPIFactoryImpl.class); private Hashtable ldapImpls; protected LDAPAPIFactoryImpl() { ldapImpls = new Hashtable(); } private static LDAPAPI instantiatelAPIImpl(String implClassURI) throws LDAPAPIException { if (implClassURI == null) { throw new NullPointerException("URI of implementing class must not be null."); } if (implClassURI.length() == 0) { throw new IllegalArgumentException("URI of implementing class must not be empty."); } log.info("Trying to instantiate \"" + LDAPAPI.class.getName() + "\" implementation \"" + implClassURI + "\"..."); LDAPAPI ldapAPIImpl = null; try { Class clazz = Class.forName(implClassURI); Object ldapAPIImplObj = clazz.newInstance(); if (!(ldapAPIImplObj instanceof LDAPAPI)) { throw new LDAPAPIException("Declared class does not implement \"" + LDAPAPI.class.getName() + "\"."); } ldapAPIImpl = (LDAPAPI) ldapAPIImplObj; log.info("LDAPAPI implementation successfully instantiated."); } catch (InstantiationException e) { throw new LDAPAPIException("Declared implementation of \"" + LDAPAPI.class.getName() + "\" cannot be instantiated."); } catch (IllegalAccessException e) { throw new LDAPAPIException("Declared implementation of \"" + LDAPAPI.class.getName() + "\" cannot be instantiated (illegal access)."); } catch (ClassNotFoundException e) { throw new LDAPAPIException("Unable to find class \"" + implClassURI + "\" as implementation of \"" + LDAPAPI.class.getName() + "\"."); } return ldapAPIImpl; } public synchronized LDAPAPI createLDAPAPI(String implClassURI) throws LDAPAPIException { if (implClassURI == null || implClassURI.length() == 0) { // use internal implementation implClassURI = LDAPAPIImpl.class.getName(); } LDAPAPI impl = ldapImpls.get(implClassURI); if (impl == null) { impl = instantiatelAPIImpl(implClassURI); ldapImpls.put(implClassURI, impl); } return impl; } }