From 530ef8e236fb340c12623ff524bf9040023531d1 Mon Sep 17 00:00:00 2001
From: tknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>
Date: Wed, 13 Dec 2006 10:33:16 +0000
Subject: git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@18
 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c

---
 .../knowcenter/wag/egov/egiz/sig/DummyLDAPAPI.java |  1 +
 .../wag/egov/egiz/sig/SignatureObject.java         | 88 +++++++++-------------
 .../knowcenter/wag/egov/egiz/tools/Normalizer.java |  8 ++
 .../knowcenter/wag/exactparser/ParseDocument.java  |  2 +-
 4 files changed, 45 insertions(+), 54 deletions(-)

diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/DummyLDAPAPI.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/DummyLDAPAPI.java
index c771b06..a8bc461 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/DummyLDAPAPI.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/DummyLDAPAPI.java
@@ -28,6 +28,7 @@ import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
  * 
  * @author wprinz
  * @author modified by <a href="mailto:thomas.knall@iaik.tugraz.at">Thomas Knall</a>
+ * @deprecated Use {@link at.knowcenter.wag.egov.egiz.ldap.api.LDAPAPIFactory#createLDAPAPI()} instead.
  */
 public class DummyLDAPAPI implements LDAPAPI
 {
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
index f2e409f..b00a3cb 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
@@ -37,11 +37,12 @@ import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
 import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
 import at.knowcenter.wag.egov.egiz.exceptions.InvalidIDException;
 import at.knowcenter.wag.egov.egiz.exceptions.NormalizeException;
-import at.knowcenter.wag.egov.egiz.exceptions.SettingNotFoundException;
 import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
 import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
 import at.knowcenter.wag.egov.egiz.exceptions.SignatureTypesException;
 import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
+import at.knowcenter.wag.egov.egiz.ldap.api.LDAPAPIException;
+import at.knowcenter.wag.egov.egiz.ldap.api.LDAPAPIFactory;
 import at.knowcenter.wag.egov.egiz.table.Entry;
 import at.knowcenter.wag.egov.egiz.table.Style;
 import at.knowcenter.wag.egov.egiz.table.Table;
@@ -860,6 +861,7 @@ public class SignatureObject implements Serializable
    * @param issuer
    *          the issuer string to normalize
    * @return the normalized issuer string
+   * @author modified by tknall
    */
   private String getIssuerFileHash(String issuer)
   {
@@ -867,8 +869,8 @@ public class SignatureObject implements Serializable
     {
       if (issuer != null)
       {
-        issuer = normalizer_.normalize(issuer);
-        issuer = removeAllWhiteSpaces(issuer);
+        // use explicit method for normalization 
+        issuer = normalizeIssuer(issuer);
         // added the ("UTF-8")
         issuer = CodingHelper.encodeBase64(CodingHelper.buildDigest(issuer.getBytes("UTF-8")));
         issuer = issuer.replaceAll("/", "_");
@@ -882,6 +884,21 @@ public class SignatureObject implements Serializable
     }
   }
 
+  /**
+   * Prepares issuer for further processing (e.g. calculation of certificate store location or
+   * comparison with registered ldap mappings.)
+   * @param issuer The issuer.
+   * @return normalized issuer
+   * @author tknall
+   */
+  private String normalizeIssuer(String issuer) {
+	issuer = normalizer_.normalize(issuer);
+	issuer = removeAllWhiteSpaces(issuer);
+	// important note: if method is changed don't forget to adjust LDAPAPIImpl otherwise
+	//                 ldap mappings will not match
+	return issuer;
+  }
+
   /**
    * This method imports new certificates into the certstore path.
    */
@@ -985,9 +1002,8 @@ public class SignatureObject implements Serializable
 
         // the certificate wasn't found in the local store
         // - load it from the LDAP server.
-        String normalized_issuer = normalizer_.normalize(issuer);
 
-        byte[] cert_data = loadCertificateFromLDAP(serialNumber, normalized_issuer);
+        byte[] cert_data = loadCertificateFromLDAP(serialNumber, issuer);
         if (cert_data == null)
         {
           logger_.info("The certificate '" + issuer + "', '" + serialNumber + "' wasn't found on the LDAP server either.");
@@ -1062,54 +1078,20 @@ public class SignatureObject implements Serializable
    *         server.
  * @throws ClassNotFoundException 
    */
-  protected byte[] loadCertificateFromLDAP(String serialNumber, String issuer) 
-  {
-    String ldap_server_url = null;
-    try
-    {
-      ldap_server_url = settings_.getSetting("ldap.url");
-    }
-    catch (SettingNotFoundException e)
-    {
-      e.printStackTrace();
-      logger_.info("LDAP server url setting not found.");
-      return null;
-    }
-    logger_.debug("LDAP server url = " + ldap_server_url);
-
-    // START modification by TK
-    byte[] cert = null;
-    String implClassURI = System.getProperty(LDAPAPI.SYS_PROP_IMPLEMENTATION);
-    if (implClassURI != null && !"".equals(implClassURI)) {
-   	 LDAPAPI ldapAPIImpl = null;
-		try {
-			Class clazz = Class.forName(implClassURI);
-			Object ldapAPIImplObj = clazz.newInstance(); 
-			if (!(ldapAPIImplObj instanceof LDAPAPI)) {
-				throw new RuntimeException("Declared class does not implement \"" + LDAPAPI.class.getName() + "\".");
-			}
-			ldapAPIImpl = (LDAPAPI) ldapAPIImplObj;
-			cert = ldapAPIImpl.loadBase64CertificateFromLDAP(serialNumber, issuer);
-		} catch (InstantiationException e) {
-			throw new RuntimeException("Declared implementation of \"" + LDAPAPI.class.getName() + "\" cannot be instantiated.");
-		} catch (IllegalAccessException e) {
-			throw new RuntimeException("Declared implementation of \"" + LDAPAPI.class.getName() + "\" cannot be instantiated (illegal access).");
-		} catch (ClassNotFoundException e) {
-			throw new RuntimeException("Unable to find class \"" + implClassURI + "\" as implementation of \"" + LDAPAPI.class.getName() + "\".");
-		}
-		if (cert == null) {
-			logger_.warn("Unable to retrieve certificate (serial=\"" + serialNumber + "\", issuer=\"" + issuer + "\") via ldap server \"" + ldapAPIImpl.getURL(issuer) + "\".");
-		}
-   	 
-    } else {
-   	 // TODO[tknall]: replace dummy class with real implementing class that uses ldap-mappings from the configuration file
-   	 // TODO[tknall]: don't instantiate class each time; create singleton
-   	 logger_.warn("There was no implementation of \"" + LDAPAPI.class.getName() + "\" defined by system property \"" + LDAPAPI.SYS_PROP_IMPLEMENTATION + "\". Using fallback implementation \"" + DummyLDAPAPI.class.getName() + "\".");
-       LDAPAPI api = new DummyLDAPAPI(ldap_server_url);
-   	 cert = api.loadBase64CertificateFromLDAP(serialNumber, issuer);
-    }
-    // STOP modification by TK
-    return cert;
+  protected byte[] loadCertificateFromLDAP(String serialNumber, String issuer) {
+	  // START modification by TK
+	  String implClassURI = System.getProperty(LDAPAPI.SYS_PROP_IMPLEMENTATION);
+	  LDAPAPI ldapAPIImpl;
+	  try {
+		  // note: in case of implClassURI==null the default implementation
+		  //       at.knowcenter.wag.egov.egiz.ldap.api.LDAPAPIImpl is used
+		  ldapAPIImpl = LDAPAPIFactory.getInstance().createLDAPAPI(implClassURI);
+	  } catch (LDAPAPIException e) {
+		  throw new RuntimeException(e);
+	  }
+     String normalized_issuer = normalizeIssuer(issuer);
+	  return ldapAPIImpl.loadBase64CertificateFromLDAP(serialNumber, normalized_issuer);
+	  // STOP modification by TK
   }
 
   /**
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/tools/Normalizer.java b/src/main/java/at/knowcenter/wag/egov/egiz/tools/Normalizer.java
index ab17e4a..7420b18 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/tools/Normalizer.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/tools/Normalizer.java
@@ -161,6 +161,14 @@ public class Normalizer implements Serializable {
       throw ne;
     }
   }
+  
+  /**
+   * Returns the underlying normalizer instance.
+   * @author tknall
+   */
+  public Normalize getInstance() {
+	  return this.normalize_;
+  }
 
   /**
    * Read the class postfix from the configuration file
diff --git a/src/main/java/at/knowcenter/wag/exactparser/ParseDocument.java b/src/main/java/at/knowcenter/wag/exactparser/ParseDocument.java
index 53da11b..4abad55 100644
--- a/src/main/java/at/knowcenter/wag/exactparser/ParseDocument.java
+++ b/src/main/java/at/knowcenter/wag/exactparser/ParseDocument.java
@@ -105,7 +105,7 @@ public class ParseDocument
     //HeaderParseResult hpr = PDFUtils.parseHeader(pdf, 0);
     //System.out.println("PDF-version = " + hpr.major + "." + hpr.minor);
     
-	 // FIXME[tknall]: pdf parsing seems to fail if pdf document is really short
+	 // FIXME[tknall]: pdf parsing seems to fail sometimes
     
     List blocks = new ArrayList();
 
-- 
cgit v1.2.3