001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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    /**
025     * @author Michael C. Han
026     * @author Shuyang Zhou
027     */
028    public abstract class BaseDestination implements Destination {
029    
030            public void addDestinationEventListener(
031                    DestinationEventListener destinationEventListener) {
032    
033                    _destinationEventListeners.add(destinationEventListener);
034            }
035    
036            public void afterPropertiesSet() {
037                    if (Validator.isNull(name)) {
038                            throw new IllegalArgumentException("Name is null");
039                    }
040    
041                    open();
042            }
043    
044            public void close() {
045                    close(false);
046            }
047    
048            public void close(boolean force) {
049            }
050    
051            public void copyDestinationEventListeners(Destination destination) {
052                    for (DestinationEventListener destinationEventListener :
053                                    _destinationEventListeners) {
054    
055                            destination.addDestinationEventListener(destinationEventListener);
056                    }
057            }
058    
059            public void copyMessageListeners(Destination destination) {
060                    for (MessageListener messageListener : messageListeners) {
061                            InvokerMessageListener invokerMessageListener =
062                                    (InvokerMessageListener)messageListener;
063    
064                            destination.register(
065                                    invokerMessageListener.getMessageListener(),
066                                    invokerMessageListener.getClassLoader());
067                    }
068            }
069    
070            public int getMessageListenerCount() {
071                    return messageListeners.size();
072            }
073    
074            public Set<MessageListener> getMessageListeners() {
075                    return Collections.unmodifiableSet(messageListeners);
076            }
077    
078            public String getName() {
079                    return name;
080            }
081    
082            public boolean isRegistered() {
083                    if (getMessageListenerCount() > 0) {
084                            return true;
085                    }
086                    else {
087                            return false;
088                    }
089            }
090    
091            public void open() {
092            }
093    
094            public boolean register(MessageListener messageListener) {
095                    InvokerMessageListener invokerMessageListener =
096                            new InvokerMessageListener(messageListener);
097    
098                    return registerMessageListener(invokerMessageListener);
099            }
100    
101            public boolean register(
102                    MessageListener messageListener, ClassLoader classloader) {
103    
104                    InvokerMessageListener invokerMessageListener =
105                            new InvokerMessageListener(messageListener, classloader);
106    
107                    return registerMessageListener(invokerMessageListener);
108            }
109    
110            public void removeDestinationEventListener(
111                    DestinationEventListener destinationEventListener) {
112    
113                    _destinationEventListeners.remove(destinationEventListener);
114            }
115    
116            public void removeDestinationEventListeners() {
117                    _destinationEventListeners.clear();
118            }
119    
120            public void setName(String name) {
121                    this.name = name;
122            }
123    
124            public boolean unregister(MessageListener messageListener) {
125                    InvokerMessageListener invokerMessageListener =
126                            new InvokerMessageListener(messageListener);
127    
128                    return unregisterMessageListener(invokerMessageListener);
129            }
130    
131            public boolean unregister(
132                    MessageListener messageListener, ClassLoader classloader) {
133    
134                    InvokerMessageListener invokerMessageListener =
135                            new InvokerMessageListener(messageListener, classloader);
136    
137                    return unregisterMessageListener(invokerMessageListener);
138            }
139    
140            public void unregisterMessageListeners() {
141                    for (MessageListener messageListener : messageListeners) {
142                            unregisterMessageListener((InvokerMessageListener)messageListener);
143                    }
144            }
145    
146            protected void fireMessageListenerRegisteredEvent(
147                    MessageListener messageListener) {
148    
149                    for (DestinationEventListener destinationEventListener :
150                                    _destinationEventListeners) {
151    
152                            destinationEventListener.messageListenerRegistered(
153                                    getName(), messageListener);
154                    }
155            }
156    
157            protected void fireMessageListenerUnregisteredEvent(
158                    MessageListener messageListener) {
159    
160                    for (DestinationEventListener listener : _destinationEventListeners) {
161                            listener.messageListenerUnregistered(getName(), messageListener);
162                    }
163            }
164    
165            protected boolean registerMessageListener(
166                    InvokerMessageListener invokerMessageListener) {
167    
168                    boolean registered = messageListeners.add(invokerMessageListener);
169    
170                    if (registered) {
171                            fireMessageListenerRegisteredEvent(
172                                    invokerMessageListener.getMessageListener());
173                    }
174    
175                    return registered;
176            }
177    
178            protected boolean unregisterMessageListener(
179                    InvokerMessageListener invokerMessageListener) {
180    
181                    boolean unregistered = messageListeners.remove(invokerMessageListener);
182    
183                    if (unregistered) {
184                            fireMessageListenerUnregisteredEvent(
185                                    invokerMessageListener.getMessageListener());
186                    }
187    
188                    return unregistered;
189            }
190    
191            protected Set<MessageListener> messageListeners =
192                    new ConcurrentHashSet<MessageListener>();
193            protected String name = StringPool.BLANK;
194    
195            private Set<DestinationEventListener> _destinationEventListeners =
196                    new ConcurrentHashSet<DestinationEventListener>();
197    
198    }