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: }