/*
 * Version 1.1
 * CeCILL Copyright (c) 2006-2007, AtolCD, ADULLACT-projet
 * Initiated by AtolCD S.A. & ADULLACT-projet S.A.
 * Developped by AtolCD
 * 
 * contact@atolcd.com
 * contact@adullact-projet.coop
 * 
 * Ce logiciel est un programme informatique servant à faire circuler des 
 * documents au travers d'un circuit de validation, où chaque acteur vise 
 * le dossier, jusqu'à l'étape finale de signature.
 * 
 * Ce logiciel est régi par la licence CeCILL soumise au droit français et
 * respectant les principes de diffusion des logiciels libres. Vous pouvez
 * utiliser, modifier et/ou redistribuer ce programme sous les conditions
 * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA 
 * sur le site "http://www.cecill.info".
 * 
 * En contrepartie de l'accessibilité au code source et des droits de copie,
 * de modification et de redistribution accordés par cette licence, il n'est
 * offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,
 * seule une responsabilité restreinte pèse sur l'auteur du programme,  le
 * titulaire des droits patrimoniaux et les concédants successifs.
 * 
 * A cet égard  l'attention de l'utilisateur est attirée sur les risques
 * associés au chargement,  à l'utilisation,  à la modification et/ou au
 * développement et à la reproduction du logiciel par l'utilisateur étant 
 * donné sa spécificité de logiciel libre, qui peut le rendre complexe à 
 * manipuler et qui le réserve donc à des développeurs et des professionnels
 * avertis possédant  des  connaissances  informatiques approfondies.  Les
 * utilisateurs sont donc invités à charger  et  tester  l'adéquation  du
 * logiciel à leurs besoins dans des conditions permettant d'assurer la
 * sécurité de leurs systèmes et ou de leurs données et, plus généralement, 
 * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. 
 * 
 * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez 
 * pris connaissance de la licence CeCILL, et que vous en avez accepté les
 * termes.
 *  
 */

package com.atolcd.parapheur.repo;

import java.util.Date;
import java.util.List;

import org.alfresco.service.cmr.repository.NodeRef;

public interface EtapeCircuit
{
    /**
     * Renvoie le parapheur associé à l'étape.
     * 
     * @return le NodeRef du parapheur associé à l'étape.
     */
    public abstract NodeRef getParapheur();
    
    /**
     * Indique si l'étape a été approuvée ou non.
     * 
     * @return <code>true</code> si l'étape a été approuvée.
     */
    public abstract boolean isApproved();
    
    /**
     * Retourne l'annotation publique déposée à cette étape du circuit.
     * 
     * @return l'annotation publique associée à l'étape.
     */
    public abstract String getAnnotation();
    
    /**
     * Retourne l'annotation privée déposée à cette étape du circuit.
     * 
     * @return l'annotation privée associée à l'étape.
     */
    public abstract String getAnnotationPrivee();
    
    /**
     * Retourne le signataire de l'étape.
     * 
     * @return le signataire associé à l'étape.
     */
    public abstract String getSignataire();
    
    /**
     * Retourn la date à laquelle l'étape a été validée
     * 
     * @return la date de validation de l'étape
     */
    public abstract Date getDateValidation();
    
    /**
     * Retourne une indication du certificat utilisé pour la signature,
     * ou <code>null</code> si aucun certificat n'a été utilisé.
     * 
     * @return une indication du certificat utilisé
     */
    public abstract String getSignature();

    /**
     * Retourne la liste de diffusion concernant le passage de cette étape,
     * ou <code>null</code> si aucun parapheur à notifier.
     * 
     * @return une liste de parapheurs?
     */
    public abstract List<NodeRef> getListeDiffusion();

    /**
     * Retourne une suite d'emails (séparés par virgule) de notification,
     * ou <code>null</code> si pas de notification externe.
     * 
     * @return une liste CSV d'adresses email
     */
    public abstract String getNotificationsExternes();
}
