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(MessageListenerWrapper listener) {
089 Iterator<MessageListener> itr = _listeners.iterator();
090
091 while (itr.hasNext()) {
092 MessageListenerWrapper curListener =
093 (MessageListenerWrapper)itr.next();
094
095 if (curListener.equals(listener)) {
096 itr.remove();
097 }
098 }
099 }
100
101 private void _deleteListener(MessageListener listener) {
102 if (listener == null) {
103 if (_log.isDebugEnabled()) {
104 _log.debug("Do not delete null listener");
105 }
106
107 return;
108 }
109
110 if (_log.isDebugEnabled()) {
111 _log.debug("Delete listener " + listener.getClass().getName());
112 }
113
114 MessageListenerWrapper messageListenerWrapper =
115 new MessageListenerWrapper(listener);
116
117 _deleteListener(messageListenerWrapper);
118
119 if (_log.isDebugEnabled()) {
120 _log.debug("Listeners size " + _listeners.size());
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 }