[Castore-commits] SoumissionStep.java NONE 1.1 WaitingTutor.java 1.1 NONE AState.java 1.1 1.2 AbstractWorkflowStep.java NONE 1.1 WorkflowException.java 1.1 1.2 WorkflowManager.java 1.1 1.2 ValidationStep.java NONE 1.1 Workflow.java 1.1 1.2 ValidationByAdmin.java NONE 1.1 WorkflowParser.java 1.1 1.2 WorkflowStep.java 1.1 NONE messages.properties NONE 1.1

Stéphane Bouchet sbouchet at adullact1.hosting.cri74.org
Mer 19 Avr 15:50:40 CEST 2006


Update of /cvsroot/castore/castore-core/src/java/fr/emn/castor/documents/metier/docGenerique/workflow
In directory adullact1:/tmp/cvs-serv2707/src/java/fr/emn/castor/documents/metier/docGenerique/workflow

Modified Files:
	AState.java WorkflowException.java WorkflowManager.java 
	Workflow.java WorkflowParser.java 
Added Files:
	SoumissionStep.java AbstractWorkflowStep.java 
	ValidationStep.java ValidationByAdmin.java messages.properties 
Removed Files:
	WaitingTutor.java WorkflowStep.java 
Log Message:
refonte workflow

--- WorkflowStep.java DELETED ---

--- NEW FILE: messages.properties ---

workflow.error.noWorkflowForStep=Pas d'\u00E9tape correspondant au numero {0}
workflow.error.stepAlreadyDefined=L'\u00E9tape {0}  est d\u00E9ja d\u00E9finie pour ce workflow.
workflow.exception.noStepFound=Pas d'\u00E9tape au num\u00E9ro indiqu\u00E9
workflow.exception.parsingException=Le fichier de workflow est erron\u00E9 . V\u00E9rifiez la validit\u00E9 du fichier.
workflow.exception.stepNumberMustBePositive=Le num\u00E9ro d'\u00E9tape doit etre positif.
workflow.exception.unknownValidationStep=Etape de validation inconnue \!
workflow.exception.unknownValidatorElement=Personne devant valider l'\u00E9tape {0} inconnue.
workflow.exception.unknownWhoAttr=Attribut "Qui doit valider cette \u00E9tape" inconnu \!

Index: WorkflowManager.java
===================================================================
RCS file: /cvsroot/castore/castore-core/src/java/fr/emn/castor/documents/metier/docGenerique/workflow/WorkflowManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** WorkflowManager.java	22 Mar 2006 13:18:07 -0000	1.1
--- WorkflowManager.java	19 Apr 2006 13:50:38 -0000	1.2
***************
*** 50,53 ****
--- 50,54 ----
  
  import javax.jdo.PersistenceManager;
+ import javax.jdo.Query;
  import javax.jdo.Transaction;
  
***************
*** 56,67 ****
  
  import fr.emn.castor.common.Constants;
[...1822 lines suppressed...]
!     public List rechercheDocuments(
!             final String filtre, final PersistenceManager pm) {
!         Query query = pm.newQuery(ADocument.class, filtre);
!         query.setUnique(false);
!         return (List) query.execute();
      }
  
***************
*** 1557,1561 ****
           * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
           */
!         public boolean accept(File dir, String name) {
              return name.endsWith(".xml");
          }
--- 1240,1244 ----
           * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
           */
!         public final boolean accept(final File dir, final String name) {
              return name.endsWith(".xml");
          }

Index: Workflow.java
===================================================================
RCS file: /cvsroot/castore/castore-core/src/java/fr/emn/castor/documents/metier/docGenerique/workflow/Workflow.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Workflow.java	22 Mar 2006 13:37:22 -0000	1.1
--- Workflow.java	19 Apr 2006 13:50:38 -0000	1.2
***************
*** 40,51 ****
  
  import java.util.ArrayList;
- import java.util.Iterator;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  /**
   * Classe representant un worflow.
!  * 
   * @author $Author$
   * @version $Revision$
--- 40,53 ----
  
  import java.util.ArrayList;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
+ import fr.emn.castor.common.Messages;
+ import fr.emn.castor.documents.metier.docGenerique.workflow.WorkflowException.ErrorTypes;
+ 
  /**
   * Classe representant un worflow.
!  *
   * @author $Author$
   * @version $Revision$
***************
*** 53,56 ****
--- 55,64 ----
  public class Workflow {
  
+     /** Le Bundle contenant les messages. */
+     public static final String BUNDLE_NAME = "fr.emn.castor.documents.metier.docGenerique.workflow.messages"; //$NON-NLS-1$
+ 
+     /** La cle pour l'identifiant de l'etape. */
+     public static final String STEP_NUMBER = "stepNumber"; //$NON-NLS-1$
+ 
      /** Le logger. */
      private static Log log = LogFactory.getLog(Workflow.class);
***************
*** 60,77 ****
  
      /** les etapes. */
!     protected ArrayList steps;
! 
!     /** La cle pour l'identifiant de l'etape. */
!     public final static String STEP_NUMBER = "Stepnumber";
  
      /**
       * Constructeur.
!      * 
!      * @param aId
!      *            l'identifiant du workflow.
       */
!     public Workflow(final String aId) {
!         this.id = aId;
!         this.steps = new ArrayList();
      }
  
--- 68,82 ----
  
      /** les etapes. */
!     private ArrayList<AbstractWorkflowStep> steps;
  
      /**
       * Constructeur.
!      *
!      * @param anId l'identifiant du workflow.
       */
!     public Workflow(final String anId) {
!         this.id = anId;
!         // il y a toujours au moins l'etape 0 decrivant la soumission
!         this.steps = new ArrayList<AbstractWorkflowStep>(1);
      }
  
***************
*** 84,207 ****
  
      /**
       * @return Renvoie id.
       */
!     public String getId() {
          return this.id;
      }
  
      /**
!      * @param aId id à définir.
       */
!     public void setId(String aId) {
!         this.id = aId;
      }
  
      /**
       * Methode ajoutant une etape au workflow.
!      * 
!      * @param stepNumber
!      *            le numero de l'etape.
       */
!     public void addStep(final int stepNumber) {
!         WorkflowStep step = new WorkflowStep();
          // on verifie que l'etape n'est pas deja renseignée.
!         // ie qu'il n'existe pas 2 etapes "1"..
          try {
!             if (this.steps.get(stepNumber - 1) != null) {
                  if (log.isErrorEnabled()) {
!                     log.error("L'etape " + stepNumber
!                             + " est déja définie pour ce workflow.");
                  }
                  return;
              }
          } catch (IndexOutOfBoundsException ioobe) {
!             // on est dans le cas ou l'index demandé n'existe pas dans la liste
              // donc ok, on peux rajouter une etape
          }
!         this.steps.add(stepNumber - 1, step);
      }
  
      /**
       * Renvoie l'etape correspondante au nombre passé en parametre.
!      * 
       * @param stepNumber
       * @return l'etape correspondante
       */
!     public WorkflowStep getStep(final int stepNumber) {
          try {
!             if (this.steps.get(stepNumber - 1) != null) {
!                 return (WorkflowStep) this.steps.get(stepNumber - 1);
!             }
!             if (log.isErrorEnabled()) {
!                 log.error("Pas d'étape correspondant au numero "
!                         + stepNumber);
              }
          } catch (IndexOutOfBoundsException ioobe) {
!             // sert lorsque l'on veux retrouver la prochaine etape alors
!             // que l'on est deja a la derniere.
          }
!         return null;
      }
  
-     //    public void setStep(final int stepNumber){
-     //        
-     //    }
- 
      /**
!      * Renvoie le nombre total d'etape pour ce workflow.
!      * 
       * @return le nombre d'etapes de ce workflow.
       */
!     public int getNumberOfSteps() {
          return this.steps.size();
      }
  
      /**
!      * Construit un worklow spécifique.
!      * 
!      * @param workflowBase
!      *            base pour le workflow
!      * @param docId
!      *            id du document
!      */
!     private Workflow(Workflow workflowBase) {
!         this(workflowBase.getId());
!         int numEtape = 1;
!         WorkflowStep etape = workflowBase.getStep(numEtape);
!         while (etape != null) {
!             this.addStep(etape);
!             etape = workflowBase.getStep(++numEtape);
!         }
! 
!     }
! 
!     /**
!      * Ajout et clonage d'une etape.
!      * 
!      * @param step
!      *            etape a ajouter
!      */
!     private void addStep(WorkflowStep step) {
!         //copie de l'etape
!         WorkflowStep newStep = new WorkflowStep();
!         newStep.setValidationType(step.getValidationType());
!         Iterator validateurs = step.getValidateurs().iterator();
!         while (validateurs.hasNext()) {
!             newStep.addValidateur((String) validateurs.next());
!         }
!         Iterator validateursLink = step.getValidateursLink().iterator();
!         while (validateursLink.hasNext()) {
!             newStep.addValidateurLink((String) validateursLink.next());
!         }
! 
!         this.steps.add(newStep);
!     }
! 
!     /**
!      * Clonage du workflow.
!      * @return copie du workflow.
       */
!     public Workflow cloneWorkflow() {
!         return new Workflow(this);
      }
  
--- 89,173 ----
  
      /**
+      * Renvoie l'id de cette instance.
       * @return Renvoie id.
       */
!     public final String getId() {
          return this.id;
      }
  
      /**
!      * Modifie l'id de cette instance.
!      * @param anId la nouvelle valeur de l'attribut
       */
!     public final void setId(final String anId) {
!         this.id = anId;
      }
  
      /**
       * Methode ajoutant une etape au workflow.
!      *
!      * @param stepNumber le numero de l'etape.
!      * @param step l'etape.
       */
!     public final void addStep(
!             final int stepNumber, final AbstractWorkflowStep step) {
          // on verifie que l'etape n'est pas deja renseignée.
!         // ie qu'il n'existe pas 2 etapes "X"..
          try {
!             if (this.steps.get(stepNumber) != null) {
                  if (log.isErrorEnabled()) {
!                     String message = Messages.bind(
!                         Messages
!                             .getStringFromBundle(
!                                 BUNDLE_NAME,
!                                 "workflow.error.stepAlreadyDefined"), //$NON-NLS-1$
!                         Integer.valueOf(stepNumber));
!                     log.error(message);
                  }
                  return;
              }
          } catch (IndexOutOfBoundsException ioobe) {
!             // on est dans le cas où l'index demandé n'existe pas dans la liste
              // donc ok, on peux rajouter une etape
          }
!         this.steps.add(stepNumber, step);
      }
  
      /**
       * Renvoie l'etape correspondante au nombre passé en parametre.
!      *
       * @param stepNumber
       * @return l'etape correspondante
+      * @throws WorkflowException si il n'y a pas d'etape trouvée.
       */
!     public final AbstractWorkflowStep getStep(final int stepNumber)
!             throws WorkflowException {
          try {
!             AbstractWorkflowStep step = this.steps.get(stepNumber);
!             if (step != null) {
!                 return step;
              }
          } catch (IndexOutOfBoundsException ioobe) {
!             // on demande une etape inexistante...
          }
!         throw new WorkflowException(ErrorTypes.NO_STEP_FOUND);
      }
  
      /**
!      * Renvoie le nombre total d'etapes pour ce workflow.
!      *
       * @return le nombre d'etapes de ce workflow.
       */
!     public final int getNumberOfSteps() {
          return this.steps.size();
      }
  
      /**
!      * Renvoie le nombre total d'etapes de validation pour ce workflow.
!      *
!      * @return le nombre d'etapes de validation de ce workflow.
       */
!     public final int getNumberOfValidationSteps() {
!         return this.steps.size() - 1;
      }
  

--- NEW FILE: ValidationByAdmin.java ---
/*
 * $Id$
 *
 * Plateforme CASTORE
 * CeCILL Copyright (C) 2005-2006 by EMN
 * Made by Stéphane Bouchet, Olivier Grouhan, Vanessa Bergere
 * Web site = http://www.emn.fr/castore
 * Contact = Cédric Dumas, e-mail = Cedric.Dumas at emn.fr
 *
 * Version 1.0 (1er mars 2005)
 *
 * Ce logiciel est un programme informatique servant à créer une plateforme
 * open-source de bibliothèque numérique XML pour Conserver, Valoriser et
 * Diffuser le patrimoine documentaire de votre institut.
 *
 * 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 fr.emn.castor.documents.metier.docGenerique.workflow;

import java.util.Date;

import fr.emn.castor.documents.DocumentsConstants;

/**
 * Classe representant l'etat 'Validation en cours'.
 *
 * @author $Author$
 * @version $Revision$
 */
public class ValidationByAdmin extends AState {

    /**
     * Constructeur.
     */
    public ValidationByAdmin() {
        setDateOfTraitement(new Date());
        setEtat(DocumentsConstants.VALIDATION_BY_ADMIN);
    }

}
--- WaitingTutor.java DELETED ---

Index: WorkflowException.java
===================================================================
RCS file: /cvsroot/castore/castore-core/src/java/fr/emn/castor/documents/metier/docGenerique/workflow/WorkflowException.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** WorkflowException.java	22 Mar 2006 17:28:53 -0000	1.1
--- WorkflowException.java	19 Apr 2006 13:50:38 -0000	1.2
***************
*** 40,43 ****
--- 40,45 ----
  package fr.emn.castor.documents.metier.docGenerique.workflow;
  
+ import fr.emn.castor.common.Messages;
+ 
  /**
   * Classe d'exception specifique au workflow de gestion de documents.
***************
*** 49,74 ****
  
      /**
!      * le serialversionUID.
       */
!     private static final long serialVersionUID = 812912422683336333L;
  
!     /**
!      * Erreur indiquant que l'on devrait trouver un login valide pour
!      * un validateur, mais ce n'est pas le cas.
!      */
!     public static final int BAD_LOGIN_FOR_VALIDATOR = 1;
  
      /**
!      * le type d'erreur rencontre.
       */
!     private int errorType;
  
      /**
!      * Retourne l'erreur associee a cette exception.
!      * @return int l'erreur associee
       */
!     public final int getErrorType() {
!         return this.errorType;
!     }
  
      /**
--- 51,133 ----
  
      /**
!      * Les erreurs possibles pour les exceptions.
       */
!     public static enum ErrorTypes {
  
!         /**
!          * Erreur indiquant que l'on devrait un workflow avec cet id.
!          */
!         NO_WORKFLOW_FOUND(Messages.getStringFromBundle(
!             Workflow.BUNDLE_NAME, "workflow.exception.noWorkflowFound")), //$NON-NLS-1$
!         /**
!          * Erreur indiquant que l'on devrait trouver une etape dans la liste
!          * des etapes de ce workflow.
!          */
!         NO_STEP_FOUND(Messages.getStringFromBundle(
!             Workflow.BUNDLE_NAME, "workflow.exception.noStepFound")), //$NON-NLS-1$
!         /**
!          * Erreur indiquant que le numero d'etape doit etre positif.
!          */
!         STEPNUMBER_MUST_BE_POSITIVE(Messages.getStringFromBundle(
!             Workflow.BUNDLE_NAME,
!             "workflow.exception.stepNumberMustBePositive")), //$NON-NLS-1$
! 
!         /**
!          * Erreur indiquant que l'étape de validation est inconnue.
!          */
!         UNKNOWN_VALIDATION_STEP(Messages
!             .getStringFromBundle(
!                 Workflow.BUNDLE_NAME,
!                 "workflow.exception.unknownValidationStep")), //$NON-NLS-1$
! 
!         /**
!          * Erreur indiquant que l'attribut "who" est inconnu.
!          */
!         UNKNOWN_WHO_ATTRIBUTE(Messages.getStringFromBundle(
!             Workflow.BUNDLE_NAME, "workflow.exception.unknownWhoAttr")), //$NON-NLS-1$
! 
!         /**
!          * Erreur indiquant que le parsing du fichier XML a généré des erreurs.
!          */
!         PARSING_EXCEPTION(Messages.getStringFromBundle(
!             Workflow.BUNDLE_NAME, "workflow.exception.parsingException")), //$NON-NLS-1$
! 
!         /**
!          * Erreur indiquant que les validateurs de l'etape sont inconnus.
!          */
!         UNKNOWN_VALIDATOR_ELEMENT(Messages.getStringFromBundle(
!             Workflow.BUNDLE_NAME,
!             "workflow.exception.unknownValidatorElement")); //$NON-NLS-1$
!         /**
!          * Le message de l'exception, internationalisé.
!          */
!         private String message;
! 
!         /**
!          * Crée une nouvelle instance.
!          * @param msg le message de l'exception.
!          */
!         ErrorTypes(final String msg) {
!             this.message = msg;
!         }
! 
!         /**
!          * Renvoie le message de cette enumeration.
!          * @return la valeur de l'attribut
!          */
!         public String getMessage() {
!             return this.message;
!         }
!     }
  
      /**
!      * le serialversionUID.
       */
!     private static final long serialVersionUID = 812912422683336333L;
  
      /**
!      * le type d'erreur rencontre.
       */
!     private ErrorTypes errorType;
  
      /**
***************
*** 77,81 ****
       * @param theErrorType le type d'erreur rencontre
       */
!     public WorkflowException(final String message, final int theErrorType) {
          super(message);
          this.errorType = theErrorType;
--- 136,141 ----
       * @param theErrorType le type d'erreur rencontre
       */
!     public WorkflowException(final String message,
!             final ErrorTypes theErrorType) {
          super(message);
          this.errorType = theErrorType;
***************
*** 86,93 ****
       * @param theErrorType le type d'erreur rencontre
       */
!     public WorkflowException(final int theErrorType) {
          super();
          this.errorType = theErrorType;
      }
  
  }
\ No newline at end of file
--- 146,161 ----
       * @param theErrorType le type d'erreur rencontre
       */
!     public WorkflowException(final ErrorTypes theErrorType) {
          super();
          this.errorType = theErrorType;
      }
  
+     /**
+      * Retourne l'erreur associee a cette exception.
+      * @return int l'erreur associee
+      */
+     public final ErrorTypes getErrorType() {
+         return this.errorType;
+     }
+ 
  }
\ No newline at end of file

Index: WorkflowParser.java
===================================================================
RCS file: /cvsroot/castore/castore-core/src/java/fr/emn/castor/documents/metier/docGenerique/workflow/WorkflowParser.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** WorkflowParser.java	22 Mar 2006 13:29:39 -0000	1.1
--- WorkflowParser.java	19 Apr 2006 13:50:38 -0000	1.2
***************
*** 40,59 ****
  package fr.emn.castor.documents.metier.docGenerique.workflow;
  
- import java.io.FileInputStream;
  import java.io.IOException;
- import java.io.InputStream;
  import java.util.ArrayList;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
! import org.xml.sax.Attributes;
! import org.xml.sax.InputSource;
! import org.xml.sax.SAXException;
! import org.xml.sax.XMLReader;
! import org.xml.sax.helpers.DefaultHandler;
! import org.xml.sax.helpers.XMLReaderFactory;
  
  import fr.emn.castor.common.Constants;
! import fr.emn.castor.documents.DocumentsConstants;
  
  /**
--- 40,61 ----
  package fr.emn.castor.documents.metier.docGenerique.workflow;
  
  import java.io.IOException;
  import java.util.ArrayList;
+ import java.util.List;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
! import org.jdom.DataConversionException;
! import org.jdom.Document;
! import org.jdom.Element;
! import org.jdom.JDOMException;
! import org.jdom.input.SAXBuilder;
  
  import fr.emn.castor.common.Constants;
! import fr.emn.castor.common.Messages;
! import fr.emn.castor.documents.metier.docGenerique.workflow.SoumissionStep.SoumissionTypeEnum;
! import fr.emn.castor.documents.metier.docGenerique.workflow.ValidationStep.ValidationTypeEnum;
! import fr.emn.castor.documents.metier.docGenerique.workflow.ValidationStep.WhoEnum;
! import fr.emn.castor.documents.metier.docGenerique.workflow.WorkflowException.ErrorTypes;
  
  /**
***************
*** 63,130 ****
   * @version $Revision$
   */
! public class WorkflowParser extends DefaultHandler {
! 
!     /** Les workflows. */
!     private ArrayList workflows;
! 
!     /** le workflow courant. */
!     private Workflow currentWorkflow;
! 
!     /** L'etape courante. */
!     private int stepNumber;
! 
!     /** pour savoir si on est dans l'etape validation des droits d'acces. */
!     private boolean inAcces = false;
! 
!     /** pour savoir si on est dans l'etape validation du contenu. */
!     private boolean inContent = false;
! 
!     /** pour savoir si on est dans l'etape validation des collections. */
!     private boolean inCollection = false;
! 
!     /** pour savoir si on est dans l'etape validation des metadonnées. */
!     private boolean inMetadata = false;
! 
!     /** le reader XML. */
!     private XMLReader xmlReader = null;
  
      /** Le logger. */
      private static Log log = LogFactory.getLog(WorkflowParser.class);
  
      /**
!      * Constructeur
!      * @param workflowFiles les fichiers de configuration
       */
!     public WorkflowParser(final String[] workflowFiles) {
!         this.workflows = new ArrayList();
!         try {
!             //construction du parser
!             this.xmlReader = XMLReaderFactory
!                 .createXMLReader(Constants.XML_SAX_PARSER);
!         } catch (SAXException e) {
!             if (log.isErrorEnabled()) {
!                 log.error(e.getMessage(), e);
!             }
!         }
!         this.xmlReader.setContentHandler(this);
!         this.xmlReader.setErrorHandler(this);
          for (int i = 0; i < workflowFiles.length; i++) {
              try {
!                 // recuperation du path complet du fichier de conf.
                  String path = Constants.CASTOR_WORKFLOW_PATH
                          + Constants.FILE_SEPARATOR + workflowFiles[i];
!                 InputStream in = new FileInputStream(path);
!                 // parsing du fichier de conf
!                 InputSource source = new InputSource(in);
!                 source.setSystemId(path);
!                 this.xmlReader.parse(source);
!             } catch (SAXException e) {
                  if (log.isErrorEnabled()) {
                      log.error(e.getMessage(), e);
                  }
              } catch (IOException e) {
                  if (log.isErrorEnabled()) {
                      log.error(e.getMessage(), e);
                  }
              }
          }
--- 65,114 ----
   * @version $Revision$
   */
! public class WorkflowParser {
  
      /** Le logger. */
      private static Log log = LogFactory.getLog(WorkflowParser.class);
  
+     /** Les workflows. */
+     private ArrayList<Workflow> workflows;
+ 
      /**
!      * Constructeur.
!      *
!      * @param workflowFiles les fichiers XML decrivants les workflows a parser.
!      * @throws WorkflowException si une erreur de parsing survient.
       */
!     public WorkflowParser(final String[] workflowFiles)
!             throws WorkflowException {
!         this.workflows = new ArrayList<Workflow>();
!         //construction du parser
!         SAXBuilder builder = new SAXBuilder(Constants.XML_SAX_PARSER);
!         builder.setValidation(true);
!         builder.setFeature(
!             "http://apache.org/xml/features/validation/schema", true); //$NON-NLS-1$
          for (int i = 0; i < workflowFiles.length; i++) {
              try {
!                 // recuperation du path complet du fichier de description du
!                 // workflow.
                  String path = Constants.CASTOR_WORKFLOW_PATH
                          + Constants.FILE_SEPARATOR + workflowFiles[i];
!                 Document workflowDoc = builder.build(path);
!                 Workflow workflow = parseWorkflow(workflowDoc);
!                 // on ajoute le workflow a la liste
!                 this.workflows.add(workflow);
!             } catch (JDOMException e) {
!                 // erreur de parsing
                  if (log.isErrorEnabled()) {
                      log.error(e.getMessage(), e);
                  }
+                 throw new WorkflowException(ErrorTypes.PARSING_EXCEPTION);
              } catch (IOException e) {
+                 // erreur d'acces au fichier
                  if (log.isErrorEnabled()) {
                      log.error(e.getMessage(), e);
                  }
+                 throw new WorkflowException(ErrorTypes.PARSING_EXCEPTION);
+             } catch (WorkflowException e) {
+                 throw e;
              }
          }
***************
*** 132,282 ****
  
      /**
!      * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
       */
!     public final void endElement(
!             final String uri, final String localName, final String qName)
!             throws SAXException {
!         if (qName.equals("workflow")) {
!             // on rajoute le workflow lu a la liste
!             this.workflows.add(this.currentWorkflow);
!         } else if (qName.equals("step")) {
!             // on sort de l'etape
!             this.stepNumber = 0;
!         } else if (qName.equals("acces")) {
!             // on sort de la description des droits d'acces
!             this.inAcces = false;
!         } else if (qName.equals("content")) {
!             //sortie de la description des contenus
!             this.inContent = false;
!         } else if (qName.equals("metadata")) {
!             // sortie de la description des metadonnées
!             this.inMetadata = false;
!         } else if (qName.equals("collection")) {
!             // sortie de la description des colelctions
!             this.inCollection = false;
          }
      }
  
      /**
!      * Methode renvoyant les workflows.
!      * @return les workflows.
       */
!     public final ArrayList getWorkflows() {
!         return this.workflows;
      }
  
      /**
!      * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
       */
!     public final void startElement(
!             final String uri, final String localName, final String qName,
!             final Attributes attributes) throws SAXException {
!         if (qName.equals("workflow")) {
!             // on commence un nouveau workflow.
!             this.currentWorkflow = new Workflow(attributes.getValue("id"));
!         } else if (qName.equals("step")) {
!             this.stepNumber = Integer
!                 .parseInt(attributes.getValue("number"));
!             this.currentWorkflow.addStep(this.stepNumber);
!         } else if (qName.equals("acces")) {
!             this.inAcces = true;
!             WorkflowStep step = this.currentWorkflow
!                 .getStep(this.stepNumber);
!             if (step != null) {
!                 step.setValidationType(DocumentsConstants.VALIDATION_ACCES);
!             } else {
!                 if (log.isErrorEnabled()) {
!                     log.error("Etape inconnue !");
!                 }
!             }
!         } else if (qName.equals("content")) {
!             this.inContent = true;
!             WorkflowStep step = this.currentWorkflow
!                 .getStep(this.stepNumber);
!             if (step != null) {
!                 step
!                     .setValidationType(DocumentsConstants.VALIDATION_CONTENT);
!             } else {
!                 if (log.isErrorEnabled()) {
!                     log.error("Etape inconnue !");
!                 }
!             }
!         } else if (qName.equals("metadata")) {
!             this.inMetadata = true;
!             WorkflowStep step = this.currentWorkflow
!                 .getStep(this.stepNumber);
!             if (step != null) {
!                 step
!                     .setValidationType(DocumentsConstants.VALIDATION_METADATA);
!             } else {
!                 if (log.isErrorEnabled()) {
!                     log.error("Etape inconnue !");
!                 }
!             }
!         } else if (qName.equals("collection")) {
!             this.inCollection = true;
!             WorkflowStep step = this.currentWorkflow
!                 .getStep(this.stepNumber);
!             if (step != null) {
!                 step
!                     .setValidationType(DocumentsConstants.VALIDATION_COLLECTION);
!             } else {
!                 if (log.isErrorEnabled()) {
!                     log.error("Etape inconnue !");
!                 }
!             }
!         } else if (qName.equals("group")) {
!             // c'est un groupe qui doit valider
!             WorkflowStep step = this.currentWorkflow
!                 .getStep(this.stepNumber);
!             if (step != null) {
!                 step.addValidateur(attributes.getValue("name"));
!             } else {
!                 if (log.isErrorEnabled()) {
!                     log.error("Etape inconnue !");
!                 }
!             }
!         } else if (qName.equals("people")) {
!             // c'est une personne qui doit valider
!             WorkflowStep step = this.currentWorkflow
!                 .getStep(this.stepNumber);
!             if (step != null) {
!                 step.addValidateur(attributes.getValue("name"));
!             } else {
!                 if (log.isErrorEnabled()) {
!                     log.error("Etape inconnue !");
!                 }
!             }
!         } else if (qName.equals("link")) {
!             // on fait un lien avec une metadonnée de la notice
!             // cette metadonnée est le nom d'une personne presente
!             // dans l'annuaire
!             // il faut lire la donnée une fois celle-ci remplie par
!             // l'utilisateur...
!             WorkflowStep step = this.currentWorkflow
!                 .getStep(this.stepNumber);
! 
!             if (step != null) {
!                 // il faut aussi savoir dans quel type de validation on se trouve
!                 if (this.inAcces) {
!                     step
!                         .setValidationType(DocumentsConstants.WORKFLOW_ACCES_MD_LINK);
!                 } else if (this.inContent) {
!                     step
!                         .setValidationType(DocumentsConstants.WORKFLOW_CONTENT_MD_LINK);
!                 } else if (this.inCollection) {
!                     step
!                         .setValidationType(DocumentsConstants.WORKFLOW_COLLECTION_MD_LINK);
!                 } else if (this.inMetadata) {
!                     step
!                         .setValidationType(DocumentsConstants.WORKFLOW_METADATA_MD_LINK);
!                 }
!                 step.addValidateurLink(attributes.getValue("metadatakey"));
!             } else {
!                 if (log.isErrorEnabled()) {
!                     log.error("Etape inconnue !");
!                 }
!             }
!         }
      }
  }
\ No newline at end of file
--- 116,256 ----
  
      /**
!      * Methode parsant le fichier XML decrivant le workflow.
!      *
!      * @param workflowDoc le document XML representant un workflow.
!      * @return le workflow Parsé
!      * @throws DataConversionException si une erreur de conversion survient.
       */
!     private Workflow parseWorkflow(final Document workflowDoc)
!             throws DataConversionException, WorkflowException {
!         Element workflowElem = workflowDoc.getRootElement();
!         // on commence par créer un workflow.
!         Workflow currentWorkflow = new Workflow(workflowElem
!             .getAttributeValue("id")); //$NON-NLS-1$
!         // ensuite on recupere la premiere etape
!         // ce doit etre toujours "soumissionStep"
!         SoumissionStep step = new SoumissionStep();
!         Element soumissionStepElem = workflowElem.getChild("soumissionStep"); //$NON-NLS-1$
!         // dans cette etape, on a toujours une section "license"
!         Element licenseElem = soumissionStepElem.getChild("license"); //$NON-NLS-1$
!         // on modifie le type suivant les indication du workflow
!         SoumissionTypeEnum licenseType = SoumissionTypeEnum.LICENSE;
!         licenseType.setOptional(licenseElem
!             .getAttribute("optional").getBooleanValue()); //$NON-NLS-1$
!         licenseType.setDefaultValue(licenseElem
!             .getAttribute("defaultValue").getValue()); //$NON-NLS-1$
!         step.setLicenseStep(licenseType);
!         // de meme, on a toujours une section "diffusion"
!         Element diffusionElem = soumissionStepElem.getChild("diffusion"); //$NON-NLS-1$
!         // on modifie le type suivant les indication du workflow
!         SoumissionTypeEnum diffusionType = SoumissionTypeEnum.DIFFUSION;
!         diffusionType.setOptional(diffusionElem
!             .getAttribute("optional").getBooleanValue()); //$NON-NLS-1$
!         diffusionType.setDefaultValue(diffusionElem.getAttribute(
!             "defaultValue").getValue()); //$NON-NLS-1$
!         step.setDiffusionStep(diffusionType);
!         // on ajoute la premiere etape.
!         currentWorkflow.addStep(soumissionStepElem
!             .getAttribute("number").getIntValue(), step); //$NON-NLS-1$
!         // on continue avec le reste, si disponible
!         List validationSteps = workflowElem.getChildren("validationStep"); //$NON-NLS-1$
!         for (int i = 0; i < validationSteps.size(); i++) {
!             Element validationStepElem = (Element) validationSteps.get(i);
!             //recuperation du numero d'etape.
!             int stepNumber = validationStepElem
!                 .getAttribute("number").getIntValue(); //$NON-NLS-1$
!             // le numero d'etape doit etre supérieur à 0.
!             if (stepNumber <= 0) {
!                 if (log.isErrorEnabled()) {
!                     String msg = Messages
!                         .getStringFromBundle(
!                             Workflow.BUNDLE_NAME,
!                             Messages
!                                 .getString("workflow.exception.stepNumberMustBePositive")); //$NON-NLS-1$
!                     log.error(msg);
!                 }
!                 throw new WorkflowException(
!                     ErrorTypes.STEPNUMBER_MUST_BE_POSITIVE);
!             }
!             ValidationStep vStep = createValidationStep(validationStepElem);
!             currentWorkflow.addStep(stepNumber, vStep);
          }
+         return currentWorkflow;
      }
  
      /**
!      * Methode d'ajout d'étapes de validation au workflow courant.
!      *
!      * @param validationStepElem le noeud XML contenant l'etape de validation
!      * @return une etape de validation
!      * @throws WorkflowException si une erreur de conversion survient.
       */
!     private ValidationStep createValidationStep(
!             final Element validationStepElem) throws WorkflowException {
!         // recuperation du type de validation
!         // et des infos sur cette validation (qui, quoi)
!         ValidationStep step = new ValidationStep();
!         // recuperation du "quoi"
!         String validationTypeName = validationStepElem
!             .getAttributeValue("what"); //$NON-NLS-1$
!         // recuperation du "quelle categorie"
!         WhoEnum who = null;
!         String whoAttr = validationStepElem.getAttributeValue("who"); //$NON-NLS-1$
!         if (whoAttr.equals("profile")) { //$NON-NLS-1$
!             who = WhoEnum.PROFILE;
!         } else if (whoAttr.equals("group")) { //$NON-NLS-1$
!             who = WhoEnum.GROUP;
!         } else if (whoAttr.equals("metadataLink")) { //$NON-NLS-1$
!             who = WhoEnum.METADATALINK;
!         } else if (whoAttr.equals("people")) { //$NON-NLS-1$
!             who = WhoEnum.PEOPLE;
!         } else {
!             if (log.isErrorEnabled()) {
!                 String msg = Messages
!                     .getStringFromBundle(Workflow.BUNDLE_NAME, Messages
!                         .getString("workflow.exception.unknownWhoAttribute")); //$NON-NLS-1$
!                 log.error(msg);
!             }
!             throw new WorkflowException(ErrorTypes.UNKNOWN_WHO_ATTRIBUTE);
!         }
!         // et enfin du "qui"
!         String whoId = validationStepElem.getAttributeValue("whoId"); //$NON-NLS-1$
!         ValidationTypeEnum validationType = null;
!         if (validationTypeName.equals("content")) { //$NON-NLS-1$
!             // validation du contenu
!             validationType = ValidationTypeEnum.CONTENT;
!         } else if (validationTypeName.equals("access")) { //$NON-NLS-1$
!             // validation des droits d'acces
!             validationType = ValidationTypeEnum.ACCESS;
!         } else if (validationTypeName.equals("collection")) { //$NON-NLS-1$
!             // validation des collections
!             validationType = ValidationTypeEnum.COLLECTION;
!         } else if (validationTypeName.equals("metadata")) { //$NON-NLS-1$
!             // validation des metadonnées
!             validationType = ValidationTypeEnum.METADATA;
!         } else {
!             if (log.isErrorEnabled()) {
!                 String msg = Messages
!                     .getStringFromBundle(
!                         Workflow.BUNDLE_NAME,
!                         Messages
!                             .getString("workflow.exception.unknownValidationStep")); //$NON-NLS-1$
!                 log.error(msg);
!             }
!             throw new WorkflowException(ErrorTypes.UNKNOWN_VALIDATION_STEP);
!         }
!         // ok, on ajoute l'étape de validation
!         step.setWho(who);
!         step.setWhoId(whoId);
!         step.setValidationType(validationType);
!         return step;
      }
  
      /**
!      * Methode renvoyant les workflows.
!      * @return les workflows.
       */
!     public final ArrayList<Workflow> getWorkflows() {
!         return this.workflows;
      }
  }
\ No newline at end of file

Index: AState.java
===================================================================
RCS file: /cvsroot/castore/castore-core/src/java/fr/emn/castor/documents/metier/docGenerique/workflow/AState.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** AState.java	22 Mar 2006 10:27:23 -0000	1.1
--- AState.java	19 Apr 2006 13:50:38 -0000	1.2
***************
*** 50,62 ****
  public abstract class AState {
  
!     /** La description de l'etat.     */
      private String etat;
  
!     /** La date de traitement de cet etat.      */
      private Date dateOfTraitement;
  
      /**
       * renvoie l'etat du document.
!      * @return  l'etat décrit.
       */
      public final String getEtat() {
--- 50,62 ----
  public abstract class AState {
  
!     /** La description de l'etat. */
      private String etat;
  
!     /** La date de traitement de cet etat. */
      private Date dateOfTraitement;
  
      /**
       * renvoie l'etat du document.
!      * @return l'etat décrit.
       */
      public final String getEtat() {
***************
*** 66,72 ****
      /**
       * Remplace l'etat du document.
!      * @param aEtat  l'etat du document.
       */
!     public final void setEtat(String aEtat) {
          this.etat = aEtat;
      }
--- 66,72 ----
      /**
       * Remplace l'etat du document.
!      * @param aEtat l'etat du document.
       */
!     public final void setEtat(final String aEtat) {
          this.etat = aEtat;
      }
***************
*** 74,78 ****
      /**
       * Renvoie la date de traitement de cet etat.
!      * @return  la date de traitement
       */
      public final Date getDateOfTraitement() {
--- 74,78 ----
      /**
       * Renvoie la date de traitement de cet etat.
!      * @return la date de traitement
       */
      public final Date getDateOfTraitement() {
***************
*** 82,86 ****
      /**
       * Remplace la date de traitement.
!      * @param date  la date de traitement.
       */
      public final void setDateOfTraitement(final Date date) {
--- 82,86 ----
      /**
       * Remplace la date de traitement.
!      * @param date la date de traitement.
       */
      public final void setDateOfTraitement(final Date date) {

--- NEW FILE: ValidationStep.java ---
/*
 * $Id$
 *
 * Plateforme CASTORE
 * CeCILL Copyright (C) 2005-2006 by EMN
 * Made by Stephane Bouchet
 * Web site = http://www.emn.fr/castore
 * Contact = Cédric Dumas, e-mail = Cedric.Dumas at emn.fr
 *
 * Version 1.0 (1er mars 2005)
 *
 * Ce logiciel est un programme informatique servant à créer une plateforme
 * open-source de bibliothèque numérique XML pour Conserver, Valoriser et
 * Diffuser le patrimoine documentaire de votre institut.
 *
 * 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 fr.emn.castor.documents.metier.docGenerique.workflow;

/**
 * Etape de workflow décrivant la validation.
 *
 * @author $Author$
 * @version $Revision$
 *
 */
public class ValidationStep extends AbstractWorkflowStep {

    /** Le type de validation a faire durant cette étape. */
    private ValidationTypeEnum validationType;

    /** La catégorie qui valide. */
    private WhoEnum who;

    /** L'id de la personne qui valide. */
    private String whoId;

    /** L'enumeration des categories de personnes qui valident. */
    public enum WhoEnum {
        /** Une personne. */
        PEOPLE,
        /** Un groupe. */
        GROUP,
        /** Un profil. */
        PROFILE,
        /** Un lien vers une metadonnée de la notice. */
        METADATALINK;
    }

    /**
     * L'enumeration des types de validation.
     */
    public enum ValidationTypeEnum {
        /** Validation du contenu.*/
        CONTENT("content"),
        /** Validation des metadonnées. */
        METADATA("metadata"),
        /** Validation des collections. */
        COLLECTION("collection"),
        /** Validation des droits d'accés. */
        ACCESS("access");

        /** Quoi comme validation ? */
        private String what;

        /**
         * Crée une nouvelle instance.
         * @param aWhat Quoi ?
         */
        ValidationTypeEnum(final String aWhat) {
            this.what = aWhat;
        }

        /**
         * Renvoie le what de cette instance.
         * @return la valeur de l'attribut
         */
        public String getWhat() {
            return this.what;
        }

    }

    /**
     * Renvoie le type de validation à faire.
     * (contenu, acces, metadonnee, collection)
     * @return Renvoie validationType.
     */
    public final ValidationTypeEnum getValidationType() {
        return this.validationType;
    }

    /**
     * Remplace le type de validation a faire pour cette etape.
     * @param aValidationType validationType à définir.
     */
    public final void setValidationType(
            final ValidationTypeEnum aValidationType) {
        this.validationType = aValidationType;
    }

    /**
     * Renvoie le who de cette instance.
     * @return la valeur de l'attribut
     */
    public final WhoEnum getWho() {
        return this.who;
    }

    /**
     * Modifie le who de cette instance.
     * @param aWho la nouvelle valeur de l'attribut
     */
    public final void setWho(final WhoEnum aWho) {
        this.who = aWho;
    }

    /**
     * Renvoie le whoId de cette instance.
     * @return la valeur de l'attribut
     */
    public final String getWhoId() {
        return this.whoId;
    }

    /**
     * Modifie le whoId de cette instance.
     * @param aWhoId la nouvelle valeur de l'attribut
     */
    public final void setWhoId(final String aWhoId) {
        this.whoId = aWhoId;
    }
}

--- NEW FILE: AbstractWorkflowStep.java ---
/*
 * $Id$
 *
 * Plateforme CASTORE
 * CeCILL Copyright (C) 2005-2006 by EMN
 * Made by Stéphane Bouchet, Olivier Grouhan, Vanessa Bergere
 * Web site = http://www.emn.fr/castore
 * Contact = Cédric Dumas, e-mail = Cedric.Dumas at emn.fr
 *
 * Version 1.0 (1er mars 2005)
 *
 * Ce logiciel est un programme informatique servant à créer une plateforme
 * open-source de bibliothèque numérique XML pour Conserver, Valoriser et
 * Diffuser le patrimoine documentaire de votre institut.
 *
 * 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 fr.emn.castor.documents.metier.docGenerique.workflow;

/**
 * Décrit une étape du workflow.
 *
 * @author $Author$
 * @version $Revision$
 */
public abstract class AbstractWorkflowStep {
    /*
     * voir soumissionStep et validationStep pour les etapes concrete du
     * workflow.
     */
}
--- NEW FILE: SoumissionStep.java ---
/*
 * $Id$
 *
 * Plateforme CASTORE
 * CeCILL Copyright (C) 2005-2006 by EMN
 * Made by Stephane Bouchet
 * Web site = http://www.emn.fr/castore
 * Contact = Cédric Dumas, e-mail = Cedric.Dumas at emn.fr
 *
 * Version 1.0 (1er mars 2005)
 *
 * Ce logiciel est un programme informatique servant à créer une plateforme
 * open-source de bibliothèque numérique XML pour Conserver, Valoriser et
 * Diffuser le patrimoine documentaire de votre institut.
 *
 * 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 fr.emn.castor.documents.metier.docGenerique.workflow;

import fr.emn.castor.documents.DocumentsConstants;
import fr.emn.castor.groupes.GroupesConstants;

/**
 * Etape de workflow decrivant la soumission.
 *
 * @author $Author$
 * @version $Revision$
 *
 */
public class SoumissionStep extends AbstractWorkflowStep {

    /** Gere la phase optionnelle du choix de la license. */
    private SoumissionTypeEnum licenseStep = SoumissionTypeEnum.LICENSE;

    /** Gere la phase optionnelle du choix des groupes de diffusion. */
    private SoumissionTypeEnum diffusionStep = SoumissionTypeEnum.DIFFUSION;

    /** Enumeration des differents type d'etapes de soumission. */
    public enum SoumissionTypeEnum {
        /** etape de soumission de la license. */
        LICENSE(false, DocumentsConstants.LICENCE_DIFFUSION),
        /** etape de soumission des groupes de diffusion. */
        DIFFUSION(false, GroupesConstants.GROUPES_NATIFS_ID);

        /** indique si cette etape de soumission est optionnelle. */
        private boolean optional;

        /** indique la valeur par defaut si cette etape est optionnelle. */
        private String defaultValue;

        /**
         * Creates a new instance.
         *
         * @param isOptional si cette etape est optionnelle
         * @param aDefaultValue la valeur par defaut si cette etape
         * est optionnelle.
         */
        SoumissionTypeEnum(final boolean isOptional,
                final String aDefaultValue) {
            this.optional = isOptional;
            this.defaultValue = aDefaultValue;
        }

        /**
         * Renvoie le defaultValue de cette instance.
         * @return la valeur de l'attribut
         */
        public final String getDefaultValue() {
            return this.defaultValue;
        }

        /**
         * Modifie le defaultValue de cette instance.
         * @param aDefaultValue la nouvelle valeur de l'attribut
         */
        public void setDefaultValue(final String aDefaultValue) {
            this.defaultValue = aDefaultValue;
        }

        /**
         * Renvoie le optional de cette instance.
         * @return la valeur de l'attribut
         */
        public boolean isOptional() {
            return this.optional;
        }

        /**
         * Modifie le optional de cette instance.
         * @param isOptional la nouvelle valeur de l'attribut
         */
        public void setOptional(final boolean isOptional) {
            this.optional = isOptional;
        }
    }

    /**
     * Renvoie le DiffusionStep de cette instance.
     * @return la valeur de l'attribut
     */
    public final SoumissionTypeEnum getDiffusionStep() {
        return this.diffusionStep;
    }

    /**
     * Modifie le DiffusionStep de cette instance.
     * @param aDiffusionStep la nouvelle valeur de l'attribut
     */
    public final void setDiffusionStep(
            final SoumissionTypeEnum aDiffusionStep) {
        this.diffusionStep = aDiffusionStep;
    }

    /**
     * Renvoie le LicenseStep de cette instance.
     * @return la valeur de l'attribut
     */
    public final SoumissionTypeEnum getLicenseStep() {
        return this.licenseStep;
    }

    /**
     * Modifie le LicenseStep de cette instance.
     * @param aLicenseStep la nouvelle valeur de l'attribut
     */
    public final void setLicenseStep(final SoumissionTypeEnum aLicenseStep) {
        this.licenseStep = aLicenseStep;
    }

}




Plus d'informations sur la liste de diffusion Castore-commits