package cz.abclinuxu.datoveschranky.common.interfaces;
import cz.abclinuxu.datoveschranky.common.entities.DeliveryInfo;
import cz.abclinuxu.datoveschranky.common.entities.Hash;
import cz.abclinuxu.datoveschranky.common.entities.MessageEnvelope;
import cz.abclinuxu.datoveschranky.common.entities.MessageState;
import cz.abclinuxu.datoveschranky.common.entities.MessageStateChange;
import cz.abclinuxu.datoveschranky.common.impl.DataBoxException;
import java.io.OutputStream;
import java.util.Date;
import java.util.EnumSet;
import java.util.List;
/**
*
* Získání seznamu přijatých, odeslaných zpráv, ověření haše zprávy.
*
* @author Vaclav Rosecky <xrosecky 'at' gmail 'dot' com>
*/
public interface DataBoxMessagesService {
/**
* Stáhne seznam přijatých zpráv ve formě obálky (identifikace odesílatele,
* příjemce, předmět zprávy, bez příloh) v daném časovém rozmezí.
*
* @param from čas dodání do ISDS od
* @param to čas dodání do ISDS do
* @param filter filter na stav zpráv, null nebo prázdná množina vybere
* všechny zprávy, v opačném případě se vyberou zprávy se stavem,
* který je obsažen v množině filter.
* @param offset číslo první požadavané obálky (indexuje se od jedne!!!)
* @param limit počet vrácených obálek
* @throws DataBoxException při vracení seznamu nastala chyba
*
*/
public List<MessageEnvelope> getListOfReceivedMessages(Date from,
Date to, EnumSet<MessageState> state, int offset, int limit);
/**
* Stáhne seznam odeslaných zpráv ve formě obálky (identifikace odesílatele,
* příjemce, předmět zprávy, bez příloh) v daném časovém rozmezí.
*
* @param from čas dodání do ISDS od
* @param to čas dodání do ISDS do
* @param filter filter na stav zpráv, null nebo prázdná množina vybere
* všechny zprávy, v opačném případě se vyberou zprávy se stavem,
* který je obsažen v množině filter.
* @param offset číslo první požadavané obálky (indexuje se od jedne!!!)
* @param limit počet vrácených obálek
* @throws DataBoxException při vracení seznamu nastala chyba
*
*/
public List<MessageEnvelope> getListOfSentMessages(Date from,
Date to, EnumSet<MessageState> filter, int offset, int limit);
/**
* Vrátí hodnotu haše dané zprávy, který je uložený v datové schránce. Tento
* haš lze pak použít pro porovnání s hašem zprávy, která je uložená na
* disku.
*
* @param envelope obálka zprávy u které chceme znát has
* @throws DataBoxException
*/
public Hash verifyMessage(MessageEnvelope envelope);
/**
* Vrátí doručenku pro danou obálku zprávy.
*
*/
public DeliveryInfo getDeliveryInfo(MessageEnvelope env);
/**
* Označí danou zprávu jako přečtenou.
*
*/
public void markMessageAsDownloaded(MessageEnvelope env);
/**
* Stáhne doručenku zprávy ve formátu PKCS7 a uloží ji do výstupního
* proudu. Tento formát je vhodný pro zálohování. PKCS7 je binární formát,
* žádné XML ani zfo soubor. Po odstranění podpisu je výsledek XML.
*
* @param envelope obálka zprávy, ke které má stáhnout přílohy
* @param os kam se má uložit
* @throws DataBoxException
*/
public void getSignedDeliveryInfo(MessageEnvelope envelope, OutputStream os);
/**
* Stáhne změny stavu u odeslaných zpráv.
*
* @param from od
* @param to do
* @return seznam změn
*/
public List<MessageStateChange> GetMessageStateChanges(Date from, Date to);
}