001
014
015 package com.liferay.portal.pop;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.pop.MessageListener;
020 import com.liferay.portal.kernel.scheduler.SchedulerEngineUtil;
021 import com.liferay.portal.kernel.scheduler.SchedulerEntry;
022 import com.liferay.portal.kernel.scheduler.SchedulerEntryImpl;
023 import com.liferay.portal.kernel.scheduler.TimeUnit;
024 import com.liferay.portal.kernel.scheduler.TriggerType;
025 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
026 import com.liferay.portal.kernel.util.UnmodifiableList;
027 import com.liferay.portal.pop.messaging.POPNotificationsMessageListener;
028 import com.liferay.portal.util.PropsValues;
029
030 import java.util.ArrayList;
031 import java.util.Iterator;
032 import java.util.List;
033
034
037 public class POPServerUtil {
038
039 public static void addListener(MessageListener listener)
040 throws Exception {
041
042 _instance._addListener(listener);
043 }
044
045 public static void deleteListener(MessageListener listener)
046 throws Exception {
047
048 _instance._deleteListener(listener);
049 }
050
051 public static List<MessageListener> getListeners() throws Exception {
052 return _instance._getListeners();
053 }
054
055 public static void start() {
056 _instance._start();
057 }
058
059 public static void stop() {
060 _instance._stop();
061 }
062
063 private POPServerUtil() {
064 }
065
066 private void _addListener(MessageListener listener) {
067 if (listener == null) {
068 if (_log.isDebugEnabled()) {
069 _log.debug("Do not add null listener");
070 }
071
072 return;
073 }
074
075 if (_log.isDebugEnabled()) {
076 _log.debug("Add listener " + listener.getClass().getName());
077 }
078
079 MessageListenerWrapper messageListenerWrapper =
080 new MessageListenerWrapper(listener);
081
082 _deleteListener(messageListenerWrapper);
083
084 _listeners.add(messageListenerWrapper);
085
086 if (_log.isDebugEnabled()) {
087 _log.debug("Listeners size " + _listeners.size());
088 }
089 }
090
091 private void _deleteListener(MessageListenerWrapper listener) {
092 Iterator<MessageListener> itr = _listeners.iterator();
093
094 while (itr.hasNext()) {
095 MessageListenerWrapper curListener =
096 (MessageListenerWrapper)itr.next();
097
098 if (curListener.equals(listener)) {
099 itr.remove();
100 }
101 }
102 }
103
104 private void _deleteListener(MessageListener listener) {
105 if (listener == null) {
106 if (_log.isDebugEnabled()) {
107 _log.debug("Do not delete null listener");
108 }
109
110 return;
111 }
112
113 if (_log.isDebugEnabled()) {
114 _log.debug("Delete listener " + listener.getClass().getName());
115 }
116
117 MessageListenerWrapper messageListenerWrapper =
118 new MessageListenerWrapper(listener);
119
120 _deleteListener(messageListenerWrapper);
121
122 if (_log.isDebugEnabled()) {
123 _log.debug("Listeners size " + _listeners.size());
124 }
125 }
126
127 private List<MessageListener> _getListeners() {
128 if (_log.isDebugEnabled()) {
129 _log.debug("Listeners size " + _listeners.size());
130 }
131
132 return new UnmodifiableList<MessageListener>(_listeners);
133 }
134
135 private void _start() {
136 if (_log.isDebugEnabled()) {
137 _log.debug("Start");
138 }
139
140 try {
141 _schedulerEntry = new SchedulerEntryImpl();
142
143 _schedulerEntry.setEventListenerClass(
144 POPNotificationsMessageListener.class.getName());
145 _schedulerEntry.setTimeUnit(TimeUnit.MINUTE);
146 _schedulerEntry.setTriggerType(TriggerType.SIMPLE);
147 _schedulerEntry.setTriggerValue(
148 PropsValues.POP_SERVER_NOTIFICATIONS_INTERVAL);
149
150 SchedulerEngineUtil.schedule(
151 _schedulerEntry, PortalClassLoaderUtil.getClassLoader());
152 }
153 catch (Exception e) {
154 _log.error(e, e);
155 }
156 }
157
158 private void _stop() {
159 if (_log.isDebugEnabled()) {
160 _log.debug("Stop");
161 }
162
163 try {
164 if (_schedulerEntry != null) {
165 SchedulerEngineUtil.unschedule(_schedulerEntry);
166 }
167 }
168 catch (Exception e) {
169 _log.error(e, e);
170 }
171 }
172
173 private static Log _log = LogFactoryUtil.getLog(POPServerUtil.class);
174
175 private static POPServerUtil _instance = new POPServerUtil();
176
177 private List<MessageListener> _listeners = new ArrayList<MessageListener>();
178 private SchedulerEntry _schedulerEntry;
179
180 }