1: package ste.pendu.wordeditor;

  3: import java.awt.event.ActionListener;

  5: /**
  6:  * Construction des contrôleurs.
  7:  * 
  8:  * <p>Pour faciliter la construction des contrôleurs, cette classe va
  9:  * construire les contrôleurs. Il s'agira d'une <b>fabrique</b>, c'est à
 10:  * dire qu'elle construit des objets à la demande en fonction de
 11:  * certains paramètres.</p>
 12:  * 
 13:  * 
 14:  */
 15: public class ControlFactory
 16: {
 17:   
 18:   public static final String CONTROL_OUVRIR = "ste.pendu.wordeditor.ControlOuvrir";

 20:   public static final String CONTROL_SAUVER = "ste.pendu.wordeditor.ControlSauver";

 22:   public static final String CONTROL_SAUVER_COMME = "ste.pendu.wordeditor.ControlSauverComme";

 24:   public static final String CONTROL_AJOUTER = "ste.pendu.wordeditor.ControlAjouter";

 26:   public static final String CONTROL_EFFACER = "ste.pendu.wordeditor.ControlEffacer";

 28:   public static final String CONTROL_SUPPRIMER = "ste.pendu.wordeditor.ControlSupprimer";

 30:   public static final String CONTROL_QUITTER = "ste.pendu.wordeditor.ControlQuitter";

 32:   /**
 33:    * Le modèle.
 34:    */
 35:   protected WordListModel model = null;

 37:   /**
 38:    * La vue.
 39:    */
 40:   protected View view = null;

 42:   /**
 43:    * Construction de la fabrique.
 44:    */
 45:   public ControlFactory()
 46:   {}

 48:   /**
 49:    * Construction de la fabrique en passant le modèle et la vue.
 50:    */
 51:   public ControlFactory(WordListModel model, View view)
 52:   {
 53:     this();
 54:     this.model = model;
 55:     this.view = view;
 56:   }
 57:   
 58:   /**
 59:    * Mise à jour du modèle.
 60:    * 
 61:    * @param model le modèle
 62:    */
 63:   public void setWordListModel(WordListModel model)
 64:   {
 65:     this.model = model;
 66:   }

 68:   /**
 69:    * Retourne le modèle.
 70:    * 
 71:    * @return le modèle
 72:    */
 73:   public WordListModel getWordListModel()
 74:   {
 75:     return this.model;
 76:   }

 78:   /**
 79:    * Mise à jour de la vue.
 80:    * 
 81:    * @param view la vue
 82:    */
 83:   public void setView(View view)
 84:   {
 85:     this.view = view;
 86:   }

 88:   /**
 89:    * Retourne la vue.
 90:    * 
 91:    * @return la vue
 92:    */
 93:   public View getView()
 94:   {
 95:     return this.view;
 96:   }

 98:   /**
 99:    * Retourne un contrôleur en fonction du nom de la classe contrôleur.
100:    * 
101:    * <p>Attention, il s'agit, à chaque appel de méthode, d'une nouvelle
102:    * instance du contrôleur! Même si ce sont les mêmes paramètres qui
103:    * sont passés.</p>
104:    * 
105:    * @param controlClassName le nom complet de la classe qui implémente
106:    * Control et qui va répondre à l'événement que l'on désire. Par
107:    * exemple, si vous écrivez une classe qui s'appelle
108:    * ste.pendu.wordeditor.ControlOuvrir, il faudra passer cette chaîne
109:    * de caractère à la méthode pour obtenir le contrôleur qui permettra
110:    * d'ouvrir le fichier
111:    * @return une instance du contrôleur demandé
112:    * @exception ControlFactoryException si on n'a pas pu créer le
113:    * Control
114:    */
115:   public Control getControl(String controlClassName)
116:     throws ControlFactoryException
117:   {
118:     Control control = null;
119:     if (this.model == null)
120:       throw new ControlFactoryException ("Pas de modèle connu.");

122:     if (this.view == null)
123:       throw new ControlFactoryException ("Pas de vue connue.");

125:     if (controlClassName == null)
126:       throw new ControlFactoryException ("Control null!");

128:     try
129:       {
130:         Object o = Class.forName(controlClassName).newInstance();
131:         control = (Control)o;
132:         control.setWordListModel(this.model);
133:         control.setView(this.view);
134:       }
135:     catch(ClassNotFoundException cnfe)
136:       {
137:         throw new ControlFactoryException (cnfe.getMessage());
138:       }
139:     catch(IllegalAccessException iae)
140:       {
141:         throw new ControlFactoryException (iae.getMessage());
142:       }
143:     catch(InstantiationException ie)
144:       {
145:         throw new ControlFactoryException (ie.getMessage());
146:       }
147:     return control;
148:   }

150: }