/**
 * <copyright> Copyright (c) 2006 by Know-Center, Graz, Austria </copyright>
 * 
 * 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: SessionInformation.java,v 1.2 2006/08/25 17:06:11 wprinz Exp $
 */
package at.gv.egiz.pdfas.web;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import at.gv.egiz.pdfas.framework.input.DataSource;
import at.gv.egiz.pdfas.web.helper.TempDirHelper;
import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.pdf.TablePos;
import at.knowcenter.wag.egov.egiz.web.ExternAppInformation;

/**
 * This class is a collection of various session parameters that are passed
 * between the servlets and jsps.
 * 
 * <p>
 * The SessionInformation class contains type safe references to the objects.
 * </p>
 * 
 * @author wprinz
 */
public class VerifySessionInformation implements HttpSessionBindingListener, Serializable
{

  /**
   * SVUID.
   */
  private static final long serialVersionUID = -7413884936584659150L;

  /**
   * The log.
   */
  private static Log log = LogFactory.getLog(VerifySessionInformation.class);

  /**
   * The connector.
   */
  public String connector = null;

  /**
   * For local requests, tells the application (sign, verify).
   */
  public String application = null;

  /**
   * Tells the operation mode (binary, textual).
   */
  public String mode = null;

  /**
   * The original, uploaded pdf.
   */
  //public FileBasedPdfDataSourceImpl pdfDataSource = null;
  public DataSource inputDataSource = null;

  /**
   * The type/profile of the signature.
   */
  public String type = null;

//  /**
//   * The user name.
//   */
//  public String user_name = null;
//
//  /**
//   * The password.
//   */
//  public String user_password = null;

  /**
   * All SignatureHolders extracted from the document.
   */
  public List signature_holders;

  /**
   * Keeps track of the currently running local operation.
   * 
   * <p>
   * Only valid during local verify.
   * </p>
   */
  public CurrentLocalOperation currentLocalOperation = null;
  
  /**
   * This is used only for MOA loc-ref web verify.
   */
  public SignatureHolder moa_holder;
  

//  /**
//   * The incremental update information that has been extracted from the given
//   * PDF document.
//   */
//  public IncrementalUpdateInformation iui;

//  public SignatorInformation si = null;
  
//  public FileBasedDataSink output = null;
  
  
//  /**
//   * Copy of signature holders. It's needed by BKU when we try to verify single by single 
//   * signature.
//   */
//  public List copy_of_signature_holders;

//  /**
//   * The suggested filename.
//   */
//  public String filename;
//
//  /**
//   * Tells, if the file download should be done inline or as attachment.
//   */
//  public boolean download_inline;

////  /**
////   * The sign result to be passed back to the user.
////   */
////  public SignResult sign_result;
//  
//  public boolean isSignFinished = false;
  
  
  
  /**
   * Object containing information about the calling webapplication.
   * @author: Thomas Zefferer
   */  
  public ExternAppInformation exappinf;
  
  /**
   * Information about the signature position
   * @author: Thomas Zefferer
   */  
  public TablePos pos ;  


  
  /**
   * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
   */
  public void valueBound(HttpSessionBindingEvent event)
  {
    log.debug("Bound SignSessionInformation to session.");
  }

  /**
   * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
   */
  public void valueUnbound(HttpSessionBindingEvent event)
  {
    log.debug("Unbound SignSessionInformation from session.");
    
    if (this.inputDataSource != null)
    {
      TempDirHelper.deleteDataSourceIfFileBased(this.inputDataSource);
    }
    if (this.signature_holders != null)
    {
      Iterator it = this.signature_holders.iterator();
      while (it.hasNext())
      {
        SignatureHolder sh = (SignatureHolder) it.next();
        TempDirHelper.deleteDataSourceIfFileBased(sh.getDataSource());
      }
    }
  }

}