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