package at.gv.egovernment.moa.spss.server.iaik.config;
import iaik.pki.store.revocation.archive.ArchiveConfiguration;
import iaik.pki.store.revocation.archive.ArchiveParameter;
import iaik.pki.store.revocation.archive.ArchiveTypes;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Enumeration;
import at.gv.egovernment.moa.spss.server.config.ConfigurationProvider;
/**
* An implementation of the ArchiveConfiguration
interface
* using configuration data provided by the MOA configuration file.
*
* @see iaik.pki.store.revocation.archive.ArchiveConfiguration
* @author Patrick Peck
* @version $Id$
*/
public class ArchiveConfigurationImpl
extends AbstractObservableConfiguration
implements ArchiveConfiguration {
/** The configuration parameters of the archive. */
private ArchiveParameter archiveParameters;
/**
* Create a new ArchiveConfigurationImpl
.
*
* @param config The MOA configuration from which the configuration data is being read.
*/
public ArchiveConfigurationImpl(ConfigurationProvider config)
{
String jdbcUrl = config.getRevocationArchiveJDBCURL();
this.archiveParameters = new DataBaseArchiveParameterImpl(jdbcUrl);
// Register JDBC driver class
if (jdbcUrl != null)
{
String jdbcDriverClass = config.getRevocationArchiveJDBCDriverClass();
try
{
Class.forName(jdbcDriverClass);
}
catch (ClassNotFoundException e)
{
// TODO 20030709 GK Improve exception handling
throw new RuntimeException("JDBC driver class \"" + jdbcDriverClass + " could not be found.");
}
Enumeration regDrivers = DriverManager.getDrivers();
boolean isRegistered = false;
while (regDrivers.hasMoreElements())
{
Object currentDriver = regDrivers.nextElement();
if (jdbcDriverClass.equals(currentDriver.getClass().getName())) isRegistered = true;
}
if (!isRegistered)
{
// Workaround for a driver which does not register itselve at invocation of Class.forName(drvname)
try
{
DriverManager.registerDriver((Driver)Class.forName(jdbcDriverClass).newInstance());
}
catch (Exception e)
{
// TODO 20030709 GK Improve exception handling
throw new RuntimeException("Registering JDBC driver \"" + jdbcDriverClass + " failed.");
}
}
}
}
/**
* Return the type of archive.
*
* This will always return ArchiveTypes.DATABASE
.
* @return ArchiveTypes.DATABASE
.
* @see iaik.pki.store.revocation.archive.ArchiveConfiguration#getType()
*/
public String getType() {
return ArchiveTypes.DATABASE;
}
/**
* Return the ArchiveParameters
describing this
* ArchiveConfiguration
.
*
* @return The archive parameters.
* @see iaik.pki.store.revocation.archive.ArchiveConfiguration#getArchiveParameters()
*/
public ArchiveParameter getArchiveParameters() {
return archiveParameters;
}
}