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 }