/*
 * $Id: DataStore.java,v 1.8 2005/03/24 12:57:04 lawern Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: DataStore.java,v $
 * Revision 1.8  2005/03/24 12:57:04  lawern
 * Umstellung des TDF-Formats auf Version 1.1 in UTF-8-Kodierung.
 *
 * Revision 1.7  2004/11/10 15:02:48  koppy
 * Projektweite Überarbeitung von Error-Logs, Stacktraces,..
 *
 * Revision 1.6  2003/12/24 10:12:03  bigmac
 * Projektweite Import-Optimierung
 *
 * Revision 1.5  2003/11/21 14:47:36  koppy
 * Um die Möglichkeit, "Archivleichen" zu entfernen, erweitert
 *
 * Revision 1.4  2003/05/26 15:50:01  koppy
 * SS um getFile( id:string ) erweitert
 *
 * Revision 1.3  2003/04/22 12:33:02  koppy
 * + getReader( String id )
 *
 * Revision 1.2  2002/11/12 15:33:02  koppy
 * Behandlung von Streams hinzugefügt
 *
 * Revision 1.1  2002/10/21 14:36:13  bigmac
 * *** empty log message ***
 *
 * Revision 1.2  2002/04/29 14:49:46  koppy
 * create() jetzt implizit in open() realisiert
 *
 * Revision 1.1  2002/04/05 15:35:19  koppy
 * initial revision
 *
 */

package vkc.server.archive;


import java.io.File;
import java.io.InputStream;
import java.io.Reader;
import java.util.Iterator;

public interface DataStore {

    /**
     * Öffnet ein bestehendes "Datenlager"
     *
     * @exception   DataStoreException
     */
    public abstract void open()
        throws DataStoreException;

    /**
     * Schließt ein geöffnetes "Datenlager"
     *
     * @exception   DataStoreException
     */
    public abstract void close()
        throws DataStoreException;

    /**
     * Setzt die Url für das "Datenlager"
     *
     * @param   storageUrl - unter dieser Url verbirgt sich das "Datenlager"
     * @exception   DataStoreException
     */
    public abstract void setStorageUrl( String storageUrl )
        throws DataStoreException;

    public abstract String getStorageUrl();

    /**
     * Speichert ein Byte-Array unter gegebener ID
     *
     * @param   data - ein Byte-Array
     * @param   id
     * @exception   DataStoreException
     */
    public abstract void store( byte[] data, String id )
        throws DataStoreException;

    /**
     * Speichert ein Byte-Array und gibt eine ID zurueck
     *
     * @param   data ein Byte-Array
     * @return id auto-generierte ID
     * @exception   DataStoreException
     */
    public abstract String store( byte[] data )
        throws DataStoreException;

    /**
     * Speichert einen InputStream und gibt eine ID zurueck
     *
     * @param   inputStream  ein InputStream
     * @param id auto-generierte ID
     * @exception   DataStoreException
     * @author koppy
     */
    public abstract void store( InputStream inputStream, String id )
        throws DataStoreException;

    /**
     * Speichert einen InputStream und gibt eine ID zurueck
     *
     * @param   inputStream  ein InputStream
     * @return id - auto-generierte ID
     * @exception   DataStoreException
     */
    public abstract String store( InputStream inputStream )
        throws DataStoreException;

    /**
     * Fuegt ein Byte-Array einem vorhandenen hinzu
     *
     * @param   data - ein Byte-Array
     * @param   id
     * @exception   DataStoreException
     */
    public abstract void append( byte[] data, String id )
        throws DataStoreException;

    /**
     * Lädt das Byte-Array einer gegebenen ID
     *
     * @param   id
     * @return ein Byte-Array
     * @exception   DataStoreException
     * @author koppy
     */
    public abstract byte[] load( String id )
        throws DataStoreException;


    /**
     * Lädt das unter ID gespeicherte Datum und gibt es als
     * InputStream zurück
     *
     * @param   id
     * @return den InputStream
     * @exception  DataStoreException
     */
    public abstract InputStream getInputStream( String id )
        throws DataStoreException;

    /**
     * Lädt das unter ID gespeicherte Datum und gibt es
     * als File - Objekt zurück
     *
     * @param   id
     * @return das File-Objekt
     * @exception  DataStoreException
     */
    public abstract File getFile( String id )
        throws DataStoreException;


	/**
	 * Lädt das unter ID gespeicherte Datum und gibt es als
	 * Reader zurück
	 *
	 * @param   id
	 * @return den Reader
	 * @exception  DataStoreException
	 * @deprecated getInputStream benutzen
	 */
	public abstract Reader getReader( String id )
		throws DataStoreException;


    /**
     * Löscht die unter id gespeicherten Daten
     *
     * @param   id
     * @exception   DataStoreException
     */
    public abstract void delete( String id )
        throws DataStoreException;
	
	/**
	 * Returns an iterator of contained IDs (type: string)
	 */
	public abstract Iterator iterator();

	/**
	 * Indicates whether it is backuptime or not
	 * @return
	 */
	public boolean isBackupTime();
	
	/**
	 * Gibt den Endzeitpunkt der Backupzeit.
	 * Sollte zwischen 0 und 23 liegen.
	 * @return backupEndHour 0-23
	 */
	public int getBackupEnd();
	
	/**
	 * Gibt den Startzeitpunkt der Backupzeit.
	 * Sollte zwischen 0 und 23 liegen.
	 * @return backupStartHour 0-23
	 */
	public int getBackupStart();
}







