aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java
diff options
context:
space:
mode:
authortknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2007-01-09 12:16:27 +0000
committertknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2007-01-09 12:16:27 +0000
commit5e1afa416ca3d38d6a9f4c77de8eec03fa11756f (patch)
tree71eb368182b471c3447c7dedaef75e39cc547b25 /src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java
parent35963f5cb727db6b77962a0c58380b73c4e9d952 (diff)
downloadpdf-as-3-5e1afa416ca3d38d6a9f4c77de8eec03fa11756f.tar.gz
pdf-as-3-5e1afa416ca3d38d6a9f4c77de8eec03fa11756f.tar.bz2
pdf-as-3-5e1afa416ca3d38d6a9f4c77de8eec03fa11756f.zip
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@25 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
Diffstat (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java')
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/ldap/client/LDAPClientFactoryImpl.java82
1 files changed, 82 insertions, 0 deletions
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 <a href="mailto:thomas.knall@iaik.tugraz.at">Thomas Knall</a>
+ */
+public final class LDAPClientFactoryImpl extends LDAPClientFactory {
+
+ private final Logger log = Logger.getLogger(getClass());
+
+ private Hashtable<String, LDAPClient> ldapClients;
+
+ protected LDAPClientFactoryImpl() {
+ this.ldapClients = new Hashtable<String, LDAPClient>();
+ }
+
+ 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;
+ }
+
+}