From 5e1afa416ca3d38d6a9f4c77de8eec03fa11756f Mon Sep 17 00:00:00 2001 From: tknall Date: Tue, 9 Jan 2007 12:16:27 +0000 Subject: git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@25 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../egiz/ldap/client/LDAPClientFactoryImpl.java | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java') diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java b/src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java new file mode 100644 index 0000000..eb18802 --- /dev/null +++ b/src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java @@ -0,0 +1,82 @@ +package at.knowcenter.wag.egov.egiz.ldap.client; + +import iaik.asn1.ObjectID; +import iaik.asn1.structures.Name; +import iaik.utils.RFC2253NameParser; +import iaik.utils.RFC2253NameParserException; + +import java.util.Hashtable; + +import org.apache.log4j.Logger; + +/** + * @author Thomas Knall + */ +public final class LDAPClientFactoryImpl extends LDAPClientFactory { + + private final Logger log = Logger.getLogger(getClass()); + + private Hashtable ldapClients; + + protected LDAPClientFactoryImpl() { + this.ldapClients = new Hashtable(); + } + + public static String rfc2253Name2Domain(Name name) { + Object[] values = name.getRDNValues(ObjectID.domainComponent); + if (values == null) { + return null; + } + StringBuffer buffer = new StringBuffer(); + for (int i = values.length - 1; i >= 0; i--) { + buffer.append(values[i]); + if (i > 0) { + buffer.append("."); + } + } + return buffer.toString(); + } + + public static String rfc2253Name2Domain(String nameString) throws RFC2253NameParserException { + RFC2253NameParser nameParser = new RFC2253NameParser(nameString); + return rfc2253Name2Domain(nameParser.parse()); + } + + private LDAPClient instantiateLDAPClient(String issuerName) throws LDAPException { + if (!super.hasBeenConfigured()) { + log.warn(super.getClass().getSimpleName() + " has not been configured yet."); + } + LDAPClient client = null; + LDAPMapping mapping = super.getMapping(issuerName); + if (mapping == null) { + try { + String alternativeURLString = rfc2253Name2Domain(issuerName); + if (alternativeURLString == null || alternativeURLString.length() == 0) { + throw new LDAPException("Neither issuer name \"" + issuerName + "\" has been registered nor domain components were provided."); + } + alternativeURLString = "ldap://" + alternativeURLString; + log.warn("Issuer name \"" + issuerName + "\" has not been registered; trying to instantiate client for url \"" + alternativeURLString + "\"..."); + client = new LDAPClientImpl(alternativeURLString); + } catch (RFC2253NameParserException e) { + throw new LDAPException(e); + } + } else { + log.debug("Instantiating LDAP client for " + mapping + "."); + client = new LDAPClientImpl(mapping); + } + return client; + } + + public synchronized LDAPClient createClient(String issuerName) throws LDAPException { + if (issuerName == null || issuerName.length() == 0) { + throw new NullPointerException("Issuer name must not be null or empty."); + } + LDAPClient ldapClient = ldapClients.get(issuerName); + if (ldapClient == null) { + ldapClient = instantiateLDAPClient(issuerName); + ldapClients.put(issuerName, ldapClient); + } + return ldapClient; + } + +} -- cgit v1.2.3