/*
*
* Copyright (c) 2006 by Know-Center, Graz, Austria
*
*
* This software is the confidential and proprietary information of Know-Center,
* Graz, Austria. You shall not disclose such Confidential Information and shall
* use it only in accordance with the terms of the license agreement you entered
* into with Know-Center.
*
* KNOW-CENTER MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
* OR NON-INFRINGEMENT. KNOW-CENTER SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*
* $Id: PDFSignatureCreation.java,v 1.6 2006/10/31 08:09:33 wprinz Exp $
*/
package at.knowcenter.wag.egov.egiz.pdf;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
import at.knowcenter.wag.egov.egiz.sig.SignatureObject;
/**
* This class provides wrapper methods to get an access to abstract PDF documents (PDFSignator).
* There exists many open source libraries and commercial libraries that can implement the abstract
* interface.
* This class is to load the corresponding implementation of an abstract PDFSignator class. Therefor
* it seams to be a factory. The factory settings are read from the configuration file calling the
* SettingsReader.
*
* @author wlackner
* @see at.knowcenter.wag.egov.egiz.cfg.SettingsReader
*/
public class PDFSignatureCreation {
/**
* The abstract signature object
*/
private SignatureObject sigObject_ = null;
/**
* The abstract pdf siganture object
*/
private PDFSignatureObject pdfSigObject_ = null;
/**
* The SettingsReader instance
*/
private SettingsReader settings_ = null;
/**
* The factory class prefix
*/
private final static String CLASS_PREFIX = ".PDFSignatureObject";
/**
* The factory class prefix of the default library
*/
protected final static String DEFAULT_LIBRARY = "IText";
/**
* The settings key defined in the settings file
*
* @see SettingsReader
*/
protected final static String SETTINGS_KEY = "pdf.signature.library";
/**
* The logger definition.
*/
private static final Logger logger_ = ConfigLogger.getLogger(PDFSignatureCreation.class);
/**
* Load the configuration settings. Load the corresponding class implementation for the abstract
* PDFSignature class. Init with a signature object.
*
* @param sigObject the native signature object
* @throws PDFDocumentException ErrorCode:101
*/
public PDFSignatureCreation(SignatureObject sigObject) throws PDFDocumentException {
try {
loadSettings();
} catch (PDFDocumentException e) {
e.setErrorCode(101);
throw e;
}
sigObject_ = sigObject;
}
/**
* Load the factory implementation. This method trys to load the configured PDF library.
*
* @throws PDFDocumentException
*/
private PDFSignatureObject createPDFSignatureObject() throws PDFDocumentException {
PDFSignatureObject pdf_sig_object = null;
String class_name = this.getClass().getPackage().getName() + getClassName();
Class pdf_sig_obj_class = null;
try {
pdf_sig_obj_class = Class.forName(class_name);
} catch (ClassNotFoundException e) {
if (logger_.isEnabledFor(Level.FATAL)) {
logger_.fatal("Class not found:" + class_name);
}
throw new PDFDocumentException(203, "Can not load pdf signator library", e);
}
try {
pdf_sig_object = (PDFSignatureObject) pdf_sig_obj_class.newInstance();
} catch (InstantiationException e) {
if (logger_.isEnabledFor(Level.FATAL)) {
logger_.fatal("Can not instantiate:" + class_name);
}
throw new PDFDocumentException(203, "Can not load pdf signator library", e);
} catch (IllegalAccessException e) {
if (logger_.isEnabledFor(Level.FATAL)) {
logger_.fatal("Can not access:" + class_name);
}
throw new PDFDocumentException(203, "Can not load pdf signator library", e);
}
return pdf_sig_object;
}
/**
* load the class settings
*
* @throws PDFDocumentException
* @see SettingsReader
*/
private void loadSettings() throws PDFDocumentException {
if (settings_ == null) {
try {
settings_ = SettingsReader.getInstance();
} catch (SettingsException e) {
String log_message = "Can not load pdf signature settings. Cause:\n" + e.getMessage();
logger_.error(log_message);
throw new PDFDocumentException(101, log_message, e);
}
}
}
/**
* Read the class postfix from the configuration file
*
* @return the full qualified class name
*/
private String getClassName() {
String extract_class = settings_.getSetting(SETTINGS_KEY, DEFAULT_LIBRARY);
return CLASS_PREFIX + extract_class;
}
/**
* Creates a new pdf signature object using the configured pdf library.
*
* @return a new pdf signature object
* @throws PDFDocumentException ErrorCode:203
*/
public PDFSignatureObject getPDFSignatureObject() throws PDFDocumentException {
if (pdfSigObject_ == null) {
try {
pdfSigObject_ = createPDFSignatureObject();
} catch (PDFDocumentException e) {
e.setErrorCode(203);
throw e;
}
pdfSigObject_.setSignatorObject(sigObject_);
}
return pdfSigObject_;
}
}