/*
 * 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.model;

import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;

public interface ParapheurModel {
    //
    // Définitions de modèle pour le parapheur
    //

    static final String PARAPHEUR_MODEL_URI = "http://www.atolcd.com/alfresco/model/parapheur/1.0";
    static final String PARAPHEUR_MODEL_PREFIX = "ph";

    static final QName TYPE_PERSON = QName.createQName(PARAPHEUR_MODEL_URI, "person");
    static final QName TYPE_PARAPHEUR = QName.createQName(PARAPHEUR_MODEL_URI, "parapheur");
    static final QName TYPE_PARAPHEURS = QName.createQName(PARAPHEUR_MODEL_URI, "parapheurs");
    static final QName TYPE_CORBEILLE = QName.createQName(PARAPHEUR_MODEL_URI, "corbeille");
    static final QName TYPE_CORBEILLE_VIRTUELLE = QName.createQName(PARAPHEUR_MODEL_URI, "corbeilleVirtuelle");
    static final QName TYPE_DOSSIER = QName.createQName(PARAPHEUR_MODEL_URI, "dossier");
    static final QName TYPE_DOCUMENT = QName.createQName(PARAPHEUR_MODEL_URI, "document");
    static final QName TYPE_ETAPE_CIRCUIT = QName.createQName(PARAPHEUR_MODEL_URI, "etape-circuit");
    
    static final QName TYPE_ARCHIVE = QName.createQName(PARAPHEUR_MODEL_URI, "archive");

    /**
     * Type corresponding to saved workflows.
     *
     * @since 3.2
     */
    static final QName TYPE_SAVED_WORKFLOW = QName.createQName(PARAPHEUR_MODEL_URI, "saved_workflow");

    static final QName PROP_ID_CERTIFICAT = QName.createQName(PARAPHEUR_MODEL_URI, "idCertificat");
    static final QName PROP_CERTIFICAT = QName.createQName(PARAPHEUR_MODEL_URI, "certificat");
    static final QName PROP_DATE_LIMITE = QName.createQName(PARAPHEUR_MODEL_URI, "dateLimite");
    static final QName PROP_EFFECTUEE = QName.createQName(PARAPHEUR_MODEL_URI, "effectuee");
    static final QName PROP_TERMINE = QName.createQName(PARAPHEUR_MODEL_URI, "termine");
    static final QName PROP_CONFIDENTIEL = QName.createQName(PARAPHEUR_MODEL_URI, "confidentiel");
    static final QName PROP_PUBLIC = QName.createQName(PARAPHEUR_MODEL_URI, "public");
    static final QName PROP_SIGNATURE_PAPIER = QName.createQName(PARAPHEUR_MODEL_URI, "signature-papier");
    static final QName PROP_SIGNATURE_ELECTRONIQUE = QName.createQName(PARAPHEUR_MODEL_URI, "signature-electronique"); // deprecated: porté par dossier
    static final QName PROP_SIGNATURE_ETAPE = QName.createQName(PARAPHEUR_MODEL_URI, "signature-etape"); // porté par étape de circuit
    static final QName PROP_ANNOTATION = QName.createQName(PARAPHEUR_MODEL_URI, "annotation");
    static final QName PROP_PASSE_PAR = QName.createQName(PARAPHEUR_MODEL_URI, "passe-par");
    static final QName PROP_ACTION_DEMANDEE = QName.createQName(PARAPHEUR_MODEL_URI, "action-demandee");
    static final QName PROP_LISTE_DIFFUSION = QName.createQName(PARAPHEUR_MODEL_URI, "liste-diffusion"); // deprecated: porté par dossier
    static final QName PROP_LISTE_NOTIFICATION = QName.createQName(PARAPHEUR_MODEL_URI, "liste-notification"); // porté par étape de circuit
    static final QName PROP_WS_EMETTEUR = QName.createQName(PARAPHEUR_MODEL_URI, "ws-emetteur");
    static final QName PROP_PROPRIETAIRE_PARAPHEUR = QName.createQName(PARAPHEUR_MODEL_URI, "proprietaire");
    static final QName PROP_RECUPERABLE = QName.createQName(PARAPHEUR_MODEL_URI, "recuperable");
    static final QName PROP_STATUS_METIER = QName.createQName(PARAPHEUR_MODEL_URI, "status-metier");
    static final QName PROP_ANNOTATION_PRIVEE = QName.createQName(PARAPHEUR_MODEL_URI, "annotation-privee");
    static final QName PROP_SECRETAIRES = QName.createQName(PARAPHEUR_MODEL_URI, "secretaires");
    static final QName PROP_SIGNATAIRE = QName.createQName(PARAPHEUR_MODEL_URI, "signataire");
    static final QName PROP_DATE_VALIDATION = QName.createQName(PARAPHEUR_MODEL_URI, "dateValidation");
    static final QName PROP_DELEGATEUR = QName.createQName(PARAPHEUR_MODEL_URI, "delegateur");
    static final QName PROP_SIGNATURE = QName.createQName(PARAPHEUR_MODEL_URI, "signature");
    static final QName PROP_TRANSACTION_ID = QName.createQName(PARAPHEUR_MODEL_URI, "transactionId");
    static final QName PROP_ARACTE_XML = QName.createQName(PARAPHEUR_MODEL_URI, "ARActeXml");
    static final QName PROP_NACKHELIOS_XML = QName.createQName(PARAPHEUR_MODEL_URI, "nackHeliosXml");
    static final QName PROP_STATUS = QName.createQName(PARAPHEUR_MODEL_URI, "status");
    static final QName PROP_ORIGINAL = QName.createQName(PARAPHEUR_MODEL_URI, "original");
    static final QName PROP_ORIGINAL_NAME = QName.createQName(PARAPHEUR_MODEL_URI, "originalName");
    static final QName PROP_SIG = QName.createQName(PARAPHEUR_MODEL_URI, "sig");
    static final QName PROP_VISUEL_PDF = QName.createQName(PARAPHEUR_MODEL_URI, "visuel-pdf");
    static final QName PROP_TYPE_METIER = QName.createQName(PARAPHEUR_MODEL_URI, "typeMetier");
    static final QName PROP_SOUSTYPE_METIER = QName.createQName(PARAPHEUR_MODEL_URI, "soustypeMetier");

    /**
     *
     * @deprecated since 3.2. See {@linkplain ParapheurModel#PROP_SIGNATURE_FORMAT} for replacement.
     * @see ParapheurModel#PROP_SIGNATURE_FORMAT
     */
    @Deprecated
    static final QName PROP_TYPE_SIGNATURE = QName.createQName(PARAPHEUR_MODEL_URI, "typeSignature");

    static final QName PROP_SIGNATURE_FORMAT = QName.createQName(PARAPHEUR_MODEL_URI, "sigFormat");

    static final QName PROP_XPATH_SIGNATURE = QName.createQName(PARAPHEUR_MODEL_URI, "xpathSignature");
    static final QName PROP_TDT_NOM = QName.createQName(PARAPHEUR_MODEL_URI, "tdtNom");
    static final QName PROP_TDT_PROTOCOLE = QName.createQName(PARAPHEUR_MODEL_URI, "tdtProtocole");
    static final QName PROP_TDT_FICHIER_CONFIG = QName.createQName(PARAPHEUR_MODEL_URI, "tdtFichierConfig");
    static final QName PROP_TDT_ACTES_NATURE = QName.createQName(PARAPHEUR_MODEL_URI, "tdtActesNature");
    static final QName PROP_TDT_ACTES_CLASSIFICATION = QName.createQName(PARAPHEUR_MODEL_URI, "tdtActesClassification");
    static final QName PROP_TDT_ACTES_DATE = QName.createQName(PARAPHEUR_MODEL_URI, "tdtActesDate");
    static final QName PROP_TDT_ACTES_OBJET = QName.createQName(PARAPHEUR_MODEL_URI, "tdtActesObjet");
    static final QName PROP_EMAIL_ENABLED = QName.createQName(PARAPHEUR_MODEL_URI, "listenToEmailAspectEnabled");
    static final QName PROP_EMAILPROTOCOL = QName.createQName(PARAPHEUR_MODEL_URI, "emailProtocol");
    static final QName PROP_EMAILSERVER = QName.createQName(PARAPHEUR_MODEL_URI, "emailServer");
    static final QName PROP_EMAILPORT = QName.createQName(PARAPHEUR_MODEL_URI, "emailPort");
    static final QName PROP_EMAILFOLDER = QName.createQName(PARAPHEUR_MODEL_URI, "emailInbox");
    static final QName PROP_EMAILUSERNAME = QName.createQName(PARAPHEUR_MODEL_URI, "emailUsername");
    static final QName PROP_EMAILPASSWORD = QName.createQName(PARAPHEUR_MODEL_URI, "emailPassword");
    static final QName PROP_CIRCUIT_ACL_PARAPHEURS = QName.createQName(PARAPHEUR_MODEL_URI, "circuit-acl-parapheurs");
    static final QName PROP_CIRCUIT_ACL_GROUPES = QName.createQName(PARAPHEUR_MODEL_URI, "circuit-acl-groupes");
    static final QName PROP_WORKFLOW = QName.createQName(PARAPHEUR_MODEL_URI, "workflow");
    static final QName PROP_READING_MANDATORY = QName.createQName(PARAPHEUR_MODEL_URI, "reading-mandatory");

    /**
     * Properties containing a list of parapheurs allowed to access this workflow.
     *
     * This property is part of the private workflow aspect.
     *
     * @since 3.2
     * @see ParapheurModel#ASPECT_PRIVATE_WORKFLOW
     */
    static final QName PROP_PRIVATE_WORKFLOW_ACL_PARAPHEURS = QName.createQName(PARAPHEUR_MODEL_URI, "acl_parapheurs");

    /**
     * Properties containing a list of groups allowed to access this workflow.
     *
     * This property is part of the private workflow aspect.
     *
     * @since 3.2
     * @see ParapheurModel#ASPECT_PRIVATE_WORKFLOW
     */
    static final QName PROP_PRIVATE_WORKFLOW_ACL_GROUPS = QName.createQName(PARAPHEUR_MODEL_URI, "acl_groups");

    static final QName CHILD_ASSOC_PREMIERE_ETAPE = QName.createQName(PARAPHEUR_MODEL_URI,"premiere-etape");
    static final QName CHILD_ASSOC_PROCHAINE_ETAPE = QName.createQName(PARAPHEUR_MODEL_URI, "prochaine-etape");

    static final QName CHILD_ASSOC_OLD_PREMIERE_ETAPE = QName.createQName(PARAPHEUR_MODEL_URI,"old-premiere-etape");

    static final QName ASSOC_HIERARCHIE = QName.createQName(PARAPHEUR_MODEL_URI, "hierarchie");
    static final QName ASSOC_DOSSIER_ETAPE = QName.createQName(PARAPHEUR_MODEL_URI, "Association_dossier_etape");
    static final QName ASSOC_DELEGATION = QName.createQName(PARAPHEUR_MODEL_URI, "delegation");
    static final QName ASSOC_OLD_DELEGATION = QName.createQName(PARAPHEUR_MODEL_URI, "old-delegation");

    static final QName ASPECT_SECRETARIAT = QName.createQName(PARAPHEUR_MODEL_URI,"secretariat");
    static final QName ASPECT_LU = QName.createQName(PARAPHEUR_MODEL_URI,"lu");
    static final QName ASPECT_S2LOW = QName.createQName(PARAPHEUR_MODEL_URI, "s2low");
    static final QName ASPECT_SIGNED = QName.createQName(PARAPHEUR_MODEL_URI, "signed");
    static final QName ASPECT_TYPAGE_METIER = QName.createQName(PARAPHEUR_MODEL_URI, "typageMetier");
    static final QName ASPECT_CIRCUIT_ACCESS_LISTE = QName.createQName(PARAPHEUR_MODEL_URI, "circuit-access-liste");
    static final QName ASPECT_ETAPE_DELEGATION = QName.createQName(PARAPHEUR_MODEL_URI, "etape-delegation");
    static final QName ASPECT_EMAIL_LISTENER = QName.createQName(PARAPHEUR_MODEL_URI, "emailListener");

    /**
     * This aspect represents a saved workflow which has to be private.
     *
     * This aspect contains 2 properties:
     * <ul>
     *     <li>acl_parapheurs: a list of parapheurs allowed to access this workflow</li>
     *     <li>acl_groups: a list of groups allowed to access this workflow</li>
     * </ul>
     *
     * @since 3.2
     * @see ParapheurModel#PROP_PRIVATE_WORKFLOW_ACL_PARAPHEURS
     * @see ParapheurModel#PROP_PRIVATE_WORKFLOW_ACL_GROUPS
     */
    static final QName ASPECT_PRIVATE_WORKFLOW = QName.createQName(PARAPHEUR_MODEL_URI, "private_workflow");

    static final QName NAME_A_TRAITER = QName.createQName(PARAPHEUR_MODEL_URI, "a-traiter");
    static final QName NAME_A_ARCHIVER = QName.createQName(PARAPHEUR_MODEL_URI, "a-archiver");
    static final QName NAME_RETOURNES = QName.createQName(PARAPHEUR_MODEL_URI, "retournes");
    static final QName NAME_EN_PREPARATION = QName.createQName(PARAPHEUR_MODEL_URI, "en-preparation");
    static final QName NAME_EN_COURS = QName.createQName(PARAPHEUR_MODEL_URI, "en-cours");
    static final QName NAME_RECUPERABLES = QName.createQName(PARAPHEUR_MODEL_URI, "recuperables");
    static final QName NAME_SECRETARIAT = QName.createQName(PARAPHEUR_MODEL_URI, "secretariat");

    static final QName NAME_A_VENIR = QName.createQName(PARAPHEUR_MODEL_URI, "a-venir");

    // FIXME : propriété de Folder mais non présente dans ContModel.java; éventuellement à supprimer si ca change dans les prochaines versions d'alfresco
    static final QName PROP_ORDERED_CHILDREN = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"orderedchildren");

}