/**
* Copyright 2006 by Know-Center, Graz, Austria
* PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
* joint initiative of the Federal Chancellery Austria 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.knowcenter.wag.egov.egiz.ldap.client;
import iaik.asn1.structures.Name;
import iaik.utils.RFC2253NameParser;
import iaik.utils.RFC2253NameParserException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import org.apache.log4j.Logger;
/**
* @author Thomas Knall
*/
public class LDAPMapping {
// constants
public static final String PROPERTIES_KEY_ISSUER_NAME = "issuer.name";
public static final String PROPERTIES_KEY_LDAP_URL = "ldap.url";
public static final String PROPERTIES_KEY_SERIAL_ATTR_NAME = "serialnumber.attrname";
private final Logger log = Logger.getLogger(getClass());
private static final iaik.x509.net.ldap.Handler LDAP_HANDLER;
// fields
private Name issuerName;
private URL ldapURL;
private String serialNumberAttrName;
// static initialization
static {
LDAP_HANDLER = new iaik.x509.net.ldap.Handler();
}
// constructors
protected LDAPMapping() {
this.setSerialNumberAttrName(LDAPClientImpl.DEFAULT_LDAP_ATTR_SERIAL_NUMBER);
}
public LDAPMapping(Name issuerName, URL ldapURL) {
this(issuerName, ldapURL, null);
}
public LDAPMapping(Name issuerName, URL ldapURL, String serialNumberAttrName) {
this();
this.setIssuerName(issuerName);
this.setLdapURL(ldapURL);
this.setSerialNumberAttrName(serialNumberAttrName);
}
public LDAPMapping(String issuerNameString, String ldapURLString) throws LDAPException {
this(issuerNameString, ldapURLString, null);
}
public LDAPMapping(String issuerNameString, String ldapURLString, String serialNumberAttrName) throws LDAPException {
this();
this.setIssuerName(issuerNameString);
this.setLdapURL(ldapURLString);
this.setSerialNumberAttrName(serialNumberAttrName);
}
public LDAPMapping(Properties properties) throws LDAPException {
this();
if (properties == null) {
throw new NullPointerException("Properties must not be null.");
}
String in = properties.getProperty(PROPERTIES_KEY_ISSUER_NAME);
String sn = properties.getProperty(PROPERTIES_KEY_LDAP_URL);
String snan = properties.getProperty(PROPERTIES_KEY_SERIAL_ATTR_NAME);
if (in == null || in.length() == 0) {
throw new LDAPException("Property \"" + PROPERTIES_KEY_ISSUER_NAME + "\" must not be null or empty.");
}
if (sn == null || sn.length() == 0) {
throw new LDAPException("Property \"" + PROPERTIES_KEY_LDAP_URL + "\" must not be null or empty.");
}
this.setIssuerName(in);
this.setLdapURL(sn);
this.setSerialNumberAttrName(snan);
}
// getter/setter
public Name getIssuerName() {
return this.issuerName;
}
public String getIssuerNameAsString() {
return this.issuerName.getName();
}
public void setIssuerName(Name issuerName) {
if (issuerName == null) {
throw new NullPointerException("Issuer name must not be null.");
}
this.issuerName = issuerName;
}
public void setIssuerName(String issuerNameString) throws LDAPException {
RFC2253NameParser parser = new RFC2253NameParser(issuerNameString.trim());
try {
this.setIssuerName(parser.parse());
} catch (RFC2253NameParserException e) {
throw new LDAPException(e);
}
}
public URL getLdapURL() {
return this.ldapURL;
}
public void setLdapURL(URL ldapURL) {
if (ldapURL == null) {
throw new NullPointerException("LDAP url must not be null.");
}
this.ldapURL = ldapURL;
}
public void setLdapURL(String ldapURLString) throws LDAPException {
try {
this.setLdapURL(new URL(null, ldapURLString.trim(), LDAP_HANDLER));
} catch (MalformedURLException e) {
throw new LDAPException(e);
}
}
public String getSerialNumberAttrName() {
return this.serialNumberAttrName;
}
public void setSerialNumberAttrName(String serialNumberAttrName) {
if (serialNumberAttrName != null && serialNumberAttrName.length() == 0) {
throw new IllegalArgumentException("Serial number attribute name must not be empty");
}
this.serialNumberAttrName = serialNumberAttrName != null ? serialNumberAttrName.trim() : LDAPClientImpl.DEFAULT_LDAP_ATTR_SERIAL_NUMBER;
}
// misc
public void validateData() throws LDAPException {
if (this.issuerName == null) {
throw new LDAPException("Issuer name must not be null.");
}
if (this.ldapURL == null) {
throw new LDAPException("LDAP url must not be null.");
}
if (serialNumberAttrName == null || serialNumberAttrName.length() == 0) {
throw new LDAPException("Serial number attribute name must not be null or empty");
}
}
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("issuerName = ").append(this.issuerName != null ? this.issuerName.getName() : null);
buffer.append(", ldapURL = ").append(this.ldapURL);
buffer.append(", serialNumberAttrName = ").append(this.serialNumberAttrName);
return buffer.toString();
}
}