001
014
015 package com.liferay.portal.kernel.messaging;
016
017 import com.liferay.portal.kernel.concurrent.ConcurrentHashSet;
018 import com.liferay.portal.kernel.util.StringPool;
019 import com.liferay.portal.kernel.util.Validator;
020
021 import java.util.Collections;
022 import java.util.Set;
023
024 import org.osgi.service.component.annotations.Activate;
025 import org.osgi.service.component.annotations.Deactivate;
026
027
031 public abstract class BaseDestination implements Destination {
032
033 @Override
034 public boolean addDestinationEventListener(
035 DestinationEventListener destinationEventListener) {
036
037 return _destinationEventListeners.add(destinationEventListener);
038 }
039
040 public void afterPropertiesSet() {
041 if (Validator.isNull(name)) {
042 throw new IllegalArgumentException("Name is null");
043 }
044 }
045
046 @Override
047 public void close() {
048 close(false);
049 }
050
051 @Override
052 public void close(boolean force) {
053 }
054
055 @Override
056 public void copyDestinationEventListeners(Destination destination) {
057 for (DestinationEventListener destinationEventListener :
058 _destinationEventListeners) {
059
060 destination.addDestinationEventListener(destinationEventListener);
061 }
062 }
063
064 @Override
065 public void copyMessageListeners(Destination destination) {
066 for (MessageListener messageListener : messageListeners) {
067 InvokerMessageListener invokerMessageListener =
068 (InvokerMessageListener)messageListener;
069
070 destination.register(
071 invokerMessageListener.getMessageListener(),
072 invokerMessageListener.getClassLoader());
073 }
074 }
075
076 @Override
077 public void destroy() {
078 close(true);
079
080 removeDestinationEventListeners();
081
082 unregisterMessageListeners();
083 }
084
085 @Override
086 public DestinationStatistics getDestinationStatistics() {
087 throw new UnsupportedOperationException();
088 }
089
090 @Override
091 public int getMessageListenerCount() {
092 return messageListeners.size();
093 }
094
095 @Override
096 public Set<MessageListener> getMessageListeners() {
097 return Collections.unmodifiableSet(messageListeners);
098 }
099
100 @Override
101 public String getName() {
102 return name;
103 }
104
105 @Override
106 public boolean isRegistered() {
107 if (getMessageListenerCount() > 0) {
108 return true;
109 }
110 else {
111 return false;
112 }
113 }
114
115 @Override
116 public void open() {
117 }
118
119 @Override
120 public boolean register(MessageListener messageListener) {
121 InvokerMessageListener invokerMessageListener =
122 new InvokerMessageListener(messageListener);
123
124 return registerMessageListener(invokerMessageListener);
125 }
126
127 @Override
128 public boolean register(
129 MessageListener messageListener, ClassLoader classloader) {
130
131 InvokerMessageListener invokerMessageListener =
132 new InvokerMessageListener(messageListener, classloader);
133
134 return registerMessageListener(invokerMessageListener);
135 }
136
137 @Override
138 public boolean removeDestinationEventListener(
139 DestinationEventListener destinationEventListener) {
140
141 return _destinationEventListeners.remove(destinationEventListener);
142 }
143
144 @Override
145 public void removeDestinationEventListeners() {
146 _destinationEventListeners.clear();
147 }
148
149 @Override
150 public void send(Message message) {
151 throw new UnsupportedOperationException();
152 }
153
154 public void setName(String name) {
155 this.name = name;
156 }
157
158 @Override
159 public boolean unregister(MessageListener messageListener) {
160 InvokerMessageListener invokerMessageListener =
161 new InvokerMessageListener(messageListener);
162
163 return unregisterMessageListener(invokerMessageListener);
164 }
165
166 public boolean unregister(
167 MessageListener messageListener, ClassLoader classloader) {
168
169 InvokerMessageListener invokerMessageListener =
170 new InvokerMessageListener(messageListener, classloader);
171
172 return unregisterMessageListener(invokerMessageListener);
173 }
174
175 @Override
176 public void unregisterMessageListeners() {
177 for (MessageListener messageListener : messageListeners) {
178 unregisterMessageListener((InvokerMessageListener)messageListener);
179 }
180 }
181
182 @Activate
183 protected void activate() {
184 afterPropertiesSet();
185 }
186
187 @Deactivate
188 protected void deactivate() {
189 destroy();
190 }
191
192 protected void fireMessageListenerRegisteredEvent(
193 MessageListener messageListener) {
194
195 for (DestinationEventListener destinationEventListener :
196 _destinationEventListeners) {
197
198 destinationEventListener.messageListenerRegistered(
199 getName(), messageListener);
200 }
201 }
202
203 protected void fireMessageListenerUnregisteredEvent(
204 MessageListener messageListener) {
205
206 for (DestinationEventListener listener : _destinationEventListeners) {
207 listener.messageListenerUnregistered(getName(), messageListener);
208 }
209 }
210
211 protected boolean registerMessageListener(
212 InvokerMessageListener invokerMessageListener) {
213
214 boolean registered = messageListeners.add(invokerMessageListener);
215
216 if (registered) {
217 fireMessageListenerRegisteredEvent(
218 invokerMessageListener.getMessageListener());
219 }
220
221 return registered;
222 }
223
224 protected boolean unregisterMessageListener(
225 InvokerMessageListener invokerMessageListener) {
226
227 boolean unregistered = messageListeners.remove(invokerMessageListener);
228
229 if (unregistered) {
230 fireMessageListenerUnregisteredEvent(
231 invokerMessageListener.getMessageListener());
232 }
233
234 return unregistered;
235 }
236
237 protected Set<MessageListener> messageListeners = new ConcurrentHashSet<>();
238 protected String name = StringPool.BLANK;
239
240 private final Set<DestinationEventListener> _destinationEventListeners =
241 new ConcurrentHashSet<>();
242
243 }