/*
 * $Id: StartupServlet.java,v 1.83 2007/02/07 15:29:34 lawern Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: StartupServlet.java,v $
 * Revision 1.83  2007/02/07 15:29:34  lawern
 * *** empty log message ***
 *
 * Revision 1.82  2007/02/07 15:28:56  lawern
 * Linux-kompatiblen Base64-Decoder eingebaut.
 *
 * Revision 1.81  2006/11/20 11:34:17  lawern
 * Versionsnummer entfernt
 *
 * Revision 1.80  2005/08/25 11:25:21  marbobo
 * + Licensemechanismus aktiviert
 *
 * Revision 1.79  2005/08/25 01:51:22  marbobo
 * + Vorbereitungen für ein Licensemechanismus (die 4.)
 *
 * Revision 1.78  2005/08/24 18:42:23  marbobo
 * + Vorbereitungen für ein Licensemechanismus (die 3.)
 *
 * Revision 1.77  2005/08/24 13:42:00  marbobo
 * + Vorbereitungen für ein Licensemechanismus (die 2.)
 *
 * Revision 1.76  2005/08/23 22:29:21  marbobo
 * + Vorbereitungen für ein Licensemechanismus
 *
 * Revision 1.75  2005/01/20 15:25:49  marbobo
 * + Anpassungen an den Methoden getRootURL() und getContextName()
 *
 * Revision 1.74  2004/12/23 13:43:33  marbobo
 * + ContextPath setzen
 *
 * Revision 1.73  2004/12/22 14:26:14  jonyp
 * added display of contextpath
 *
 * Revision 1.72  2004/11/10 15:02:49  koppy
 * Projektweite Überarbeitung von Error-Logs, Stacktraces,..
 *
 * Revision 1.71  2004/05/28 11:08:58  jonyp
 * added display of vkc version during startup/shutdown
 *
 * Revision 1.70  2004/04/27 11:43:06  koppy
 * Initialisierung nach WebShare verschoben
 *
 * Revision 1.69  2004/03/12 15:44:18  bigmac
 * Methoden für (lokale) zusätzliche Attribute aus VKCDynAttributeSerializer 
 * nach VKCAddAttributeSerializer verschoben
 * 
 * Unbenutze private Methoden projektweit entsorgt
 *
 * Revision 1.68  2004/03/09 18:40:37  bigmac
 * Anpassungen an VKCSysParameterSerializer
 *
 * Revision 1.67  2004/03/05 14:53:44  teng
 * VKCDocExpireMail und VKCDocDeleteMail werden durch vkc.messenger.mail.DocExpiredNotification und DocDeleteNotification ersetzt
 *
 * Revision 1.66  2004/02/25 08:38:50  bigmac
 * Umstellung auf vkc.properties
 *
 * Revision 1.65  2004/02/20 20:20:01  teng
 * *** empty log message ***
 *
 * Revision 1.64  2004/01/27 10:47:14  bigmac
 * Initialisierung des Webapplication-Verzeichnis
 *
 * Revision 1.63  2004/01/26 22:04:36  koppy
 * Datenbnankinitialisierung geändert
 *
 * Revision 1.62  2004/01/20 12:55:58  jonyp
 * delete system.out.println stmt
 *
 * Revision 1.61  2004/01/16 14:27:48  koppy
 * Initialisierung des VKCServers
 *
 * Revision 1.60  2003/12/24 10:12:13  bigmac
 * Projektweite Import-Optimierung
 *
 * Revision 1.59  2003/12/17 10:53:07  bigmac
 * TraceLogger-Initialisierung eingefügt
 *
 * Revision 1.58  2003/12/16 15:31:20  lawern
 * WebDavServlet holt sich die rootUrl jetzt direkt aus dem Request.
 *
 * Revision 1.57  2003/12/12 07:57:43  koppy
 * Boolean.getBoolean(..) ersetzt
 *
 * Revision 1.56  2003/12/11 15:07:33  koppy
 * Starten des ConverterServer anhand eines Flags in der web.xml
 *
 * Revision 1.55  2003/12/02 17:14:41  koppy
 * Initialisierung des ConverterServers geändert
 *
 * Revision 1.54  2003/12/01 14:54:00  lawern
 * Konverterinitialisierung eingefügt.
 *
 * Revision 1.53  2003/12/01 11:32:40  koppy
 * Converter-Start eingefügt
 *
 * Revision 1.52  2003/11/30 13:54:06  koppy
 * DocConverter initialisierung zum
 * ConverterServer verlagert
 *
 * Revision 1.51  2003/11/29 22:22:19  koppy
 * Aufgeräumt
 *
 * Revision 1.50  2003/11/28 17:19:05  koppy
 * Vorläufige Einbettung des Dokumenten Konverter Servers
 *
 * Revision 1.49  2003/11/21 14:48:38  koppy
 * Auslesen der 'ARCHIVE' Systemparameter
 *
 * Revision 1.48  2003/11/11 02:33:59  koppy
 * Initialisierung des TreeViews
 *
 * Revision 1.47  2003/11/05 11:02:26  jonyp
 * different modifications for logging
 *
 * Revision 1.46  2003/10/31 12:41:57  bigmac
 * Setzen des Konverter Bin-Verzeichnis geändert
 *
 * Revision 1.45  2003/10/23 12:56:02  marbobo
 * +VKC_ROOT_PATH
 *
 * Revision 1.44  2003/10/19 18:21:28  teng
 * VKCMail und DocExpireMail aus, VKCDocPublishMail, VKCDocExpireMail, VKCDocDeleteMail ein
 *
 * Revision 1.43  2003/10/06 16:41:13  jonyp
 * change due to migration to sysParameters
 *
 * Revision 1.42  2003/10/06 10:04:09  jonyp
 * umstellung bei webdav initialization auf webshare.getSysparameterValue
 *
 * Revision 1.41  2003/10/02 09:42:54  jonyp
 * LogManager Init umgestellt
 *
 * Revision 1.40  2003/10/02 08:14:06  lawern
 * Logging-Bug korrigiert.
 *
 * Revision 1.39  2003/10/01 11:12:04  jonyp
 * logProperties beim VKCLogManager
 *
 * Revision 1.38  2003/09/29 06:29:32  lawern
 * Jetzt auch absolute Pfade möglich.
 *
 * Revision 1.37  2003/09/18 15:47:44  jonyp
 * changes from WebShare.properties to WebShare.getSysParameter
 *
 * Revision 1.36  2003/09/09 14:10:54  jonyp
 * load sysParameters at startup
 *
 * Revision 1.35  2003/09/08 12:44:34  lawern
 * WebDavServlet initialisiert
 *
 * Revision 1.34  2003/09/02 18:06:03  teng
 * *** empty log message ***
 *
 * Revision 1.33  2003/09/02 17:57:21  teng
 * starten DocExpireMail
 *
 * Revision 1.32  2003/08/21 14:18:27  jonyp
 * new startup connection message
 *
 * Revision 1.31  2003/08/02 17:00:37  bigmac
 * *** empty log message ***
 *
 * Revision 1.30  2003/07/28 11:01:49  lawern
 * Initialisierung der Office-Pakete umgestellt
 *
 * Revision 1.29  2003/07/18 14:33:00  teng
 * Der falsch geschriebene Name von destroy() ist korrigiert
 *
 * Revision 1.28  2003/07/18 14:16:21  teng
 * Methode destroy() ist implementiert, um den OpenOffice-Prozess zu beenden, wenn der Server runterfaehrt.
 *
 * Revision 1.27  2003/07/18 13:35:27  teng
 * Openoffice starten
 *
 * Revision 1.26  2003/05/26 16:05:23  koppy
 * aufgeräumt
 *
 * Revision 1.25  2003/05/22 00:03:52  koppy
 * cache removed
 *
 * Revision 1.24  2003/04/25 18:00:12  teng
 * something about VKCmail changed
 *
 * Revision 1.23  2003/04/25 13:47:58  lawern
 * + Analyser Initialisierung
 *
 * Revision 1.22  2003/04/23 14:50:57  lawern
 * Archiv wird jetzt vor Search und Classify initialisiert.
 *
 * Revision 1.21  2003/04/17 17:40:58  teng
 * *** empty log message ***
 *
 * Revision 1.20  2003/04/15 17:16:48  teng
 * Einpaar Dinge bezueglich VKCMail geaendert.
 *
 * Revision 1.19  2003/04/15 15:34:26  koppy
 * + Analyse / Klassifikation
 *
 * Revision 1.18  2003/04/09 14:17:09  lawern
 * Classify Initialisierung hinzugefügt
 *
 * Revision 1.17  2003/04/01 13:10:42  lawern
 * Search-Initialisierung eingefügt
 *
 * Revision 1.16  2003/03/31 17:15:57  teng
 * Start VKCMail ist aktiviert
 *
 * Revision 1.15  2003/03/20 16:21:20  koppy
 * *** empty log message ***
 *
 * Revision 1.14  2003/03/12 14:41:44  lawern
 * DocConverter-Initialisierung eingefügt
 *
 * Revision 1.13  2003/03/12 00:34:28  koppy
 * Möglichkeit den StoreKeeper dynamisch zu setzen
 *
 * Revision 1.12  2003/03/11 19:08:45  teng
 * *** empty log message ***
 *
 * Revision 1.11  2003/03/05 23:35:04  koppy
 * vkc.messenger.action.VKCMail --> vkc.messenger.VKCMail
 *
 * Revision 1.10  2003/03/03 14:10:10  koppy
 * Init. von VKCMail nach StartupServlet verlagert
 *
 * Revision 1.9  2003/02/23 13:26:17  koppy
 * *** empty log message ***
 *
 * Revision 1.8  2002/12/12 02:39:04  koppy
 * Acl editing feature for categories added
 *
 * Revision 1.7  2002/11/12 15:30:49  koppy
 * Dokumentupload
 *
 * Revision 1.6  2002/11/10 19:27:50  koppy
 * *** empty log message ***
 *
 * Revision 1.5  2002/11/04 10:17:44  koppy
 * ...
 *
 * Revision 1.4  2002/10/30 00:47:01  koppy
 * bugfix
 *
 * Revision 1.3  2002/10/25 12:16:22  bigmac
 * *** empty log message ***
 *
 * Revision 1.2  2002/10/22 18:01:39  koppy
 * Kleinigkeiten
 *
 * Revision 1.1  2002/10/21 14:36:23  bigmac
 * *** empty log message ***
 *
 * Revision 1.1  2002/10/15 15:36:15  koppy
 * Initiale Version
 *
 */
package vkc.servlets;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.ObjectInputStream;
import java.net.URL;
import java.util.HashMap;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.commons.codec.binary.Base64;

import vkc.exception.LicenseException;
import vkc.misc.VKCLogManager;
import vkc.util.FileUtils;
import vkc.util.ObjectCloner;
import vkc.util.StringUtils;
import vkc.view.WebShare;

/**
 * Startup Servlet für die VKC Webapplikation
 *
 * @author koppy
 */
public class StartupServlet extends HttpServlet {
	/**
	 * Methode initialisiert die VKC-Webapplikation und setzt wichtige
	 * Einstellungen
	 */
	public void init(ServletConfig config) throws ServletException {
		try {
            VKCLogManager.infoLog(this, "VKC is comming up...");
			super.init(config);
			URL obj = getServletContext().getResource("/");
			WebShare.setContextPath(parseContextPath(obj.getPath()));
			init(getServletContext().getRealPath("/"));
			WebShare.init(getServletContext().getRealPath("/"));
		} catch (LicenseException le) {
            VKCLogManager.errorLog(this, "", le.getMessage());
			throw new ServletException(le);
		} catch (Throwable t) {
			VKCLogManager.errorLog(this, "", "VKC startup failed: " + t.getMessage(), t);
			throw new ServletException(t);
		}
	}

    private String parseContextPath(String path) {
        if (!StringUtils.isEmpty(path))  {
            int index = path.indexOf("/", 1);
            
            if (index != -1) {
                String context = path.substring(index);
                
    			return context.trim().endsWith("/") ? context.trim().substring(0, context.trim().lastIndexOf("/")) : context.trim();
            }
        }
        
        return "";
    }

    private void init(String path) throws LicenseException {
		try {
//	    	byte[] b = FileUtils.getFileAsByteArray(new File(path + "/WEB-INF/license.dat"));
//			ByteArrayInputStream bin = new ByteArrayInputStream(Base64.decodeBase64(b));
//			ObjectInputStream ois = new ObjectInputStream(bin);
//			String s = (String)ois.readObject();
//			HashMap systemParameters = (HashMap)ObjectCloner.toObject(s);
			WebShare.setPermanentSystemParameters(new HashMap());
//			s = (String)ois.readObject();
//			HashMap tabViews = (HashMap)ObjectCloner.toObject(s);
			WebShare.setPermanentTabViews(new HashMap());
		} catch (Exception e) {
			throw new LicenseException("Licensefile ("+path + "/WEB-INF/license.dat) not found or corrupted");
		}
    }
    
    /**
	 * Destroys the WebApplikation
	 */
	public void destroy() {
		VKCLogManager.infoLog(this, "+++*** VKC (" + WebShare.getProperties().getProperty("vkc.version") + ") is about to shut down... ***+++");
		WebShare.shutdown();
	}
}