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
10
11
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
25
26
27
28 public MessageManager(final Sender s) {
29 this(s, new HashMap());
30 }
31
32
33
34
35
36
37
38 public MessageManager(final Sender s, final java.util.Map m) {
39 psender = s;
40 mreceivers = m;
41 }
42
43
44
45
46
47
48
49 public final void send(final IMessage m) {
50 psender.send(m);
51 }
52
53
54
55
56
57
58
59
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
73
74
75
76
77 public final boolean select(final String name) {
78 throw new UnsupportedOperationException(
79 "non è possibile selezionare elementi");
80 }
81
82
83
84
85
86
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
99
100
101
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
110
111
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
124
125
126
127
128 public final void register(final String name, final Receiver element) {
129 mreceivers.put(name, element);
130 }
131
132
133
134
135
136
137
138
139 public final Object get(final String name) {
140 return mreceivers.get(name);
141 }
142
143
144
145
146
147
148 public final Iterator getAll() {
149 return mreceivers.values().iterator();
150 }
151 }