View Javadoc

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&agrave; 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 }