/**
 * 
 */
package at.gv.egiz.pdfas;
import java.io.File;
import at.gv.egiz.pdfas.api.PdfAs;
import at.gv.egiz.pdfas.api.exceptions.PdfAsException;
import at.gv.egiz.pdfas.impl.api.PdfAsObject;
import at.knowcenter.wag.egov.egiz.PdfAS;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
/**
 * Main factory for creating a PDF-AS API Instance (PdfAs Interface).
 * 
 * @see PdfAs
 * 
 * @author wprinz
 */
public class PdfAsFactory
{
   /**
    * Creates a PDF-AS API instance for the given work directory.
    * 
    * @param workDirectory
    *          The work directory. If null the configuration is assumed to be located
    *          within the user's home directory. Note: IAIK JCE and IAIK ECC security provders are
    *          automatically registered.
    * 
    * @return Returns an instance of the PDF-AS API.
    * @throws IllegalArgumentException
    *           Thrown, if the workDirectory doesn't exist.
    * @throws PdfAsException
    *           Thrown, if the work directory does not meet its requirements, or
    *           if the config file is invalid.
    * @see PdfAS#USERHOME_CONFIG_FOLDER          
    */
   public static PdfAs createPdfAs(File workDirectory) throws PdfAsException
   {
      return createPdfAs(workDirectory, SettingsReader.REGISTER_IAIK_PROVIDERS_ON_DEFAULT);
   }
   
   /**
    * Creates a PDF-AS API instance for the given work directory.
    * 
    * @param workDirectory
    *          The work directory. If null the configuration is assumed to be located
    *          within the user's home directory.
    * 
   * @param registerProvider true: automatically registers IAIK JCE and ECC Provider;
   * false: providers will NOT be automatically registered, providers
   * needed have to be registered by the API user 
    * @return Returns an instance of the PDF-AS API.
    * @throws IllegalArgumentException
    *           Thrown, if the workDirectory doesn't exist.
    * @throws PdfAsException
    *           Thrown, if the work directory does not meet its requirements, or
    *           if the config file is invalid.
    * @see PdfAS#USERHOME_CONFIG_FOLDER          
    */
   public static PdfAs createPdfAs(File workDirectory, boolean registerProvider) throws PdfAsException
   {
     return new PdfAsObject(workDirectory, registerProvider);
   }
   
   /**
    * Creates a PDF-AS API instance assuming that the configuration is located within the user's
    * home directory. Note: IAIK JCE and IAIK ECC security providers are automatically registered.
    * 
    * @return Returns an instance of the PDF-AS API.
    * @throws IllegalArgumentException
    *           Thrown, if the work directory doesn't exist within the user's home directory.
    * @throws PdfAsException
    *           Thrown, if the work directory does not meet its requirements, or
    *           if the config file is invalid.
    * @see PdfAS#USERHOME_CONFIG_FOLDER          
    */
   public static PdfAs createPdfAs() throws PdfAsException
   {
      return createPdfAs(null);
   }
   
   /**
    * Creates a PDF-AS API instance assuming that the configuration is located within the user's
    * home directory.
    * 
    * @return Returns an instance of the PDF-AS API.
    * @param registerProvider true: automatically registers IAIK JCE and ECC Provider;
    * false: providers will NOT be automatically registered, providers
    * needed have to be registered by the API user 
    * @throws IllegalArgumentException
    *           Thrown, if the work directory doesn't exist within the user's home directory.
    * @throws PdfAsException
    *           Thrown, if the work directory does not meet its requirements, or
    *           if the config file is invalid.
    * @see PdfAS#USERHOME_CONFIG_FOLDER          
    */
   public static PdfAs createPdfAs(boolean registerProvider) throws PdfAsException
   {
     return createPdfAs(null, registerProvider);
   }
}