1 package paolomind.multitalk.plugin;
2
3 import java.awt.event.KeyEvent;
4 import java.awt.event.MouseEvent;
5 import java.util.Iterator;
6 import java.util.Properties;
7
8 import paolomind.commons.NamedObject;
9 import paolomind.multitalk.netmessage.IMessage;
10 import paolomind.multitalk.netmessage.MessageException;
11 import paolomind.multitalk.netmessage.Sender;
12
13 /**
14 * classe per gestire un insieme di tool.
15 *
16 * @author paolo
17 */
18 public class ToolManager implements paolomind.multitalk.plugin.ToolInterface,
19 paolomind.commons.ObjectContainer, paolomind.multitalk.netmessage.Sender {
20
21 /** */
22 private String name;
23 /** */
24 private ToolInterface current;
25 /** */
26 private java.util.Map toolmap;
27
28 /** */
29 private Sender psender;
30
31 /**
32 * costruttore che inizializza l'id del manager.
33 *
34 * @param pname
35 * id del manager
36 */
37 public ToolManager(final String pname) {
38 this(pname, null, new java.util.HashMap());
39 }
40
41 /**
42 * costruttore che inizializza l'id del manager ed il sender.
43 *
44 * @param pname
45 * id del manager
46 * @param s
47 * il sender
48 */
49 public ToolManager(final String pname, final Sender s) {
50 this(pname, s, new java.util.HashMap());
51 }
52
53 /**
54 * costruttore che inizializza il sender.
55 *
56 * @param s
57 * il sender.
58 */
59 public ToolManager(final Sender s) {
60 this(null, s);
61 }
62
63 /**
64 * costruttore che inizializza l'id del manager, il sender e la mappa di tool.
65 *
66 * @param pname
67 * id del manager
68 * @param s
69 * il sender
70 * @param m
71 * mappa dei tool
72 */
73 public ToolManager(final String pname, final Sender s, final java.util.Map m) {
74 toolmap = m;
75 psender = s;
76 this.name = pname;
77 }
78
79 /**
80 * rimanda l'azione al tool corrente selezionato.
81 *
82 * @see paolomind.multitalk.plugin.ToolInterface#select()
83 */
84 public final void select() {
85 if (current != null) {
86 current.select();
87 }
88 }
89
90 /**
91 * restituisce il proprio id.
92 * @return il proprio id
93 * @see paolomind.commons.NamedObject#getSelfId()
94 */
95 public final String getSelfId() {
96 return name;
97 }
98
99 /**
100 * rimanda l'azione al tool corrente selezionato.
101 *
102 * @param e
103 * evento
104 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
105 */
106 public final void mouseClicked(final MouseEvent e) {
107 if (current != null) {
108 current.mouseClicked(e);
109 }
110 }
111
112 /**
113 * rimanda l'azione al tool corrente selezionato.
114 *
115 * @param e
116 * evento
117 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
118 */
119 public final void mouseEntered(final MouseEvent e) {
120 if (current != null) {
121 current.mouseEntered(e);
122 }
123 }
124
125 /**
126 * rimanda l'azione al tool corrente selezionato.
127 *
128 * @param e
129 * evento
130 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
131 */
132 public final void mouseExited(final MouseEvent e) {
133 if (current != null) {
134 current.mouseExited(e);
135 }
136 }
137
138 /**
139 * rimanda l'azione al tool corrente selezionato.
140 *
141 * @param e
142 * evento
143 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
144 */
145 public final void mousePressed(final MouseEvent e) {
146 if (current != null) {
147 current.mousePressed(e);
148 }
149 }
150
151 /**
152 * rimanda l'azione al tool corrente selezionato.
153 *
154 * @param e
155 * evento
156 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
157 */
158 public final void mouseReleased(final MouseEvent e) {
159 if (current != null) {
160 current.mouseReleased(e);
161 }
162 }
163
164 /**
165 * rimanda l'azione al tool corrente selezionato.
166 *
167 * @param e
168 * evento
169 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
170 */
171 public final void mouseDragged(final MouseEvent e) {
172 if (current != null) {
173 current.mouseDragged(e);
174 }
175 }
176
177 /**
178 * rimanda l'azione al tool corrente selezionato.
179 *
180 * @param e
181 * evento
182 * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
183 */
184 public final void mouseMoved(final MouseEvent e) {
185 if (current != null) {
186 current.mouseMoved(e);
187 }
188 }
189
190 /**
191 * rimanda l'azione al tool corrente selezionato.
192 *
193 * @param e
194 * evento
195 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
196 */
197 public final void keyPressed(final KeyEvent e) {
198 if (current != null) {
199 current.keyPressed(e);
200 }
201 }
202
203 /**
204 * rimanda l'azione al tool corrente selezionato.
205 *
206 * @param e
207 * evento
208 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
209 */
210 public final void keyReleased(final KeyEvent e) {
211 if (current != null) {
212 current.keyReleased(e);
213 }
214 }
215
216 /**
217 * rimanda l'azione al tool corrente selezionato.
218 *
219 * @param e
220 * evento
221 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
222 */
223 public final void keyTyped(final KeyEvent e) {
224 if (current != null) {
225 current.keyTyped(e);
226 }
227 }
228
229 /**
230 * rinvia il messagio al tool specificato nel messaggio o al tool corrente.
231 *
232 * @param m
233 * messaggio ricevuto
234 * @throws MessageException
235 * rilancia l'eccezzione se il messaggio non è riconosciuto
236 * @see paolomind.multitalk.netmessage.Receiver#receive(paolomind.multitalk.netmessage.IMessage)
237 */
238 public final void receive(final IMessage m) throws MessageException {
239 Object info = m.getInfo();
240 if (info != null) {
241 ToolInterface t = (ToolInterface) toolmap.get(info);
242 if (t != null) {
243 t.receive(m);
244 } else {
245 this.receive(m);
246 }
247 } else {
248 // TODO dare messaggio confortevole
249 throw new MessageException();
250 }
251 }
252
253 /**
254 * invia il messaggio al sender aggiungendo il proprio nome se specificato.
255 *
256 * @param m
257 * il messaggio da reinviare
258 * @see paolomind.multitalk.netmessage.Sender#send(paolomind.multitalk.netmessage.IMessage)
259 */
260 public final void send(final IMessage m) {
261 String s = this.getSelfId();
262 if (s != null) {
263 m.addInfo(s);
264 }
265 if (psender != null) {
266 psender.send(m);
267 }
268 }
269
270 /**
271 * registra un ogetto.
272 *
273 * @param element
274 * il tool da registrare con il suo nome
275 * @see paolomind.commons.ObjectContainer#register(paolomind.commons.NamedObject)
276 */
277 public final void register(final NamedObject element) {
278 try {
279 this.register((ToolInterface) element);
280 } catch (ClassCastException e) {
281 throw new UnsupportedOperationException(
282 "non è possibile inserire oggetti che non siano ToolInterface", e);
283 }
284 }
285
286 /**
287 * funzione di registrazione specifica per ToolManager.
288 *
289 * @param n
290 * identificativo del tool
291 * @param t
292 * il ToolInterface
293 */
294 public final void register(final String n, final ToolInterface t) {
295 toolmap.put(n, t);
296 t.setSelfId(n);
297 }
298
299 /**
300 * funzione di registrazione specifica per ToolManager.
301 *
302 * @param t
303 * il ToolInterface
304 */
305 public final void register(final ToolInterface t) {
306 String s = t.getSelfId();
307 if (s != null) {
308 toolmap.put(s, t);
309 } else {
310 throw new NullPointerException("nome nullo per il NamedObject");
311 }
312 }
313
314 /**
315 * seleziona un tool registrato. il manager prende il comportamento di tale
316 * oggetto
317 *
318 * @param pname
319 * identificativo dell'ogetto
320 * @return true se l'oggetto esiste ed è stato selezionato, false altrimenti
321 * @see paolomind.commons.ObjectContainer#select(java.lang.String)
322 */
323 public final boolean select(final String pname) {
324 current = (ToolInterface) toolmap.get(pname);
325 return (current != null);
326 }
327
328 /**
329 * Proprietà del tool selezionato.<br/>
330 *
331 * @return Informazioni sul tool selezionato
332 * @see paolomind.multitalk.plugin.ToolInterface#getPropertes()
333 */
334 public final Properties getPropertes() {
335 if (current != null) {
336 return current.getPropertes();
337 }
338 return null;
339 }
340
341 /**
342 * setta l'id.
343 *
344 * @param pname
345 * l'id con cui sarà identificato il manager
346 * @see paolomind.commons.NamedObject#setSelfId(java.lang.String)
347 */
348 public final void setSelfId(final String pname) {
349 this.name = pname;
350 }
351
352 /**
353 * reperisce un toolregistrato.
354 *
355 * @param pname
356 * nome del tool registrato
357 * @return restituisce un ogetto registrato oppure null
358 * @see paolomind.commons.ObjectContainer#get(java.lang.String)
359 */
360 public final Object get(final String pname) {
361 return toolmap.get(name);
362 }
363
364 /**
365 * restituisce tutti gli elementi.
366 *
367 * @return tutti gli elementi registrati
368 * @see paolomind.commons.ObjectContainer#getAll()
369 */
370 public final Iterator getAll() {
371 return toolmap.values().iterator();
372 }
373 }