View Javadoc

1   package paolomind.multitalk.netmessage;
2   
3   import java.util.HashMap;
4   import java.util.Iterator;
5   
6   import paolomind.commons.NamedObject;
7   
8   /**
9    * oggetto che ragruppa un insieme di receiver.
10   *
11   * @author paolo
12   */
13  public class MessageManager implements paolomind.commons.ObjectContainer,
14      paolomind.multitalk.netmessage.Sender,
15      paolomind.multitalk.netmessage.Receiver {
16  
17    /** */
18    private Sender psender;
19  
20    /** */
21    private java.util.Map mreceivers;
22  
23    /**
24     * inizializza l'ogetto associado l'appropriato sender.
25     *
26     * @param s il sender a cui spedire i messaggi
27     */
28    public MessageManager(final Sender s) {
29      this(s, new HashMap());
30    }
31  
32    /**
33     * inizializza l'ogetto associado l'appropriato sender.
34     *
35     * @param s il sender a cui spedire i messaggi
36     * @param m la mappa di receivers
37     */
38    public MessageManager(final Sender s, final java.util.Map m) {
39      psender = s;
40      mreceivers = m;
41    }
42  
43    /**
44     * invio di un messaggio.
45     * @param m
46     *            il messaggio da inviare
47     * @see paolomind.multitalk.netmessage.Sender#send(paolomind.multitalk.netmessage.IMessage)
48     */
49    public final void send(final IMessage m) {
50      psender.send(m);
51    }
52  
53    /**
54     * ricezione di un messaggio.
55     * @param m
56     *            il messaggio da ricevere
57     * @throws MessageException
58     *             rilancia l'accezione in caso di errori nel messaggio
59     * @see paolomind.multitalk.netmessage.Receiver#receive(paolomind.multitalk.netmessage.IMessage)
60     */
61    public final void receive(final IMessage m) throws MessageException {
62      Object info = m.getInfo();
63      Receiver r = (Receiver) mreceivers.get(info);
64      if (r != null) {
65        r.receive(m);
66      } else {
67        throw new MessageException();
68      }
69    }
70  
71    /**
72     * Questa funzione non è implementata.
73     * @param name string
74     * @return boolean
75     * @see paolomind.commons.ObjectContainer#select(java.lang.String)
76     */
77    public final boolean select(final String name) {
78      throw new UnsupportedOperationException(
79          "non è possibile selezionare elementi");
80    }
81  
82    /**
83     * registra un ogetto.
84     * @param element
85     *            l'oggetto da registrare con il suo nome
86     * @see paolomind.commons.ObjectContainer#register(paolomind.commons.NamedObject)
87     */
88    public final void register(final NamedObject element) {
89      try {
90        this.register((NamedReceiver) element);
91      } catch (ClassCastException e) {
92        throw new UnsupportedOperationException(
93            "non è possibile inserire oggetti che non siano Receiver", e);
94      }
95    }
96  
97    /**
98     * funzione di registrazione specifica per MessageManager.
99     *
100    * @param name identificativo del receiver
101    * @param element il receiver
102    */
103   public final void register(final String name, final NamedReceiver element) {
104     mreceivers.put(name, element);
105     element.setSelfId(name);
106   }
107 
108   /**
109    * funzione di registrazione specifica per MessageManager.
110    *
111    * @param element il receiver
112    */
113   public final void register(final NamedReceiver element) {
114     String s = element.getSelfId();
115     if (s != null) {
116       mreceivers.put(s, element);
117     } else {
118       throw new NullPointerException("nome nullo per il NamedObject");
119     }
120   }
121 
122   /**
123    * funzione di registrazione specifica per MessageManager.
124    *
125    * @param name identificativo del receiver
126    * @param element il receiver
127    */
128   public final void register(final String name, final Receiver element) {
129     mreceivers.put(name, element);
130   }
131 
132   /**
133    * reperisce un elemento registrato.
134    * @param name
135    *            nome dell'oggetto registrato
136    * @return restituisce un ogetto registrato oppure null
137    * @see paolomind.commons.ObjectContainer#get(java.lang.String)
138    */
139   public final Object get(final String name) {
140     return mreceivers.get(name);
141   }
142 
143   /**
144    * restituisce tutti gli elementi.
145    * @return tutti gli elementi registrati
146    * @see paolomind.commons.ObjectContainer#getAll()
147    */
148   public final Iterator getAll() {
149     return mreceivers.values().iterator();
150   }
151 }