1
22
23 package com.liferay.portlet.messageboards.service.impl;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.kernel.json.JSONFactoryUtil;
28 import com.liferay.portal.kernel.messaging.DestinationNames;
29 import com.liferay.portal.kernel.scheduler.SchedulerEngineUtil;
30 import com.liferay.portal.kernel.scheduler.TriggerExpression;
31 import com.liferay.portal.kernel.scheduler.messaging.SchedulerRequest;
32 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
33 import com.liferay.portal.kernel.util.StringPool;
34 import com.liferay.portal.kernel.util.Validator;
35 import com.liferay.portal.model.User;
36 import com.liferay.portlet.messageboards.MailingListEmailAddressException;
37 import com.liferay.portlet.messageboards.MailingListInServerNameException;
38 import com.liferay.portlet.messageboards.MailingListInUserNameException;
39 import com.liferay.portlet.messageboards.MailingListOutEmailAddressException;
40 import com.liferay.portlet.messageboards.MailingListOutServerNameException;
41 import com.liferay.portlet.messageboards.MailingListOutUserNameException;
42 import com.liferay.portlet.messageboards.messaging.MailingListRequest;
43 import com.liferay.portlet.messageboards.model.MBCategory;
44 import com.liferay.portlet.messageboards.model.MBMailingList;
45 import com.liferay.portlet.messageboards.service.base.MBMailingListLocalServiceBaseImpl;
46
47 import java.util.Calendar;
48 import java.util.Date;
49 import java.util.List;
50
51
58 public class MBMailingListLocalServiceImpl
59 extends MBMailingListLocalServiceBaseImpl {
60
61 public MBMailingList addMailingList(
62 String uuid, long userId, long categoryId, String emailAddress,
63 String inProtocol, String inServerName, int inServerPort,
64 boolean inUseSSL, String inUserName, String inPassword,
65 int inReadInterval, String outEmailAddress, boolean outCustom,
66 String outServerName, int outServerPort, boolean outUseSSL,
67 String outUserName, String outPassword, boolean active)
68 throws PortalException, SystemException {
69
70
72 User user = userPersistence.findByPrimaryKey(userId);
73 MBCategory category = mbCategoryPersistence.findByPrimaryKey(
74 categoryId);
75 Date now = new Date();
76
77 validate(
78 emailAddress, inServerName, inUserName, outEmailAddress, outCustom,
79 outServerName, outUserName, active);
80
81 long mailingListId = counterLocalService.increment();
82
83 MBMailingList mailingList = mbMailingListPersistence.create(
84 mailingListId);
85
86 mailingList.setUuid(uuid);
87 mailingList.setGroupId(category.getGroupId());
88 mailingList.setCompanyId(user.getCompanyId());
89 mailingList.setUserId(user.getUserId());
90 mailingList.setUserName(user.getFullName());
91 mailingList.setCreateDate(now);
92 mailingList.setModifiedDate(now);
93 mailingList.setCategoryId(categoryId);
94 mailingList.setEmailAddress(emailAddress);
95 mailingList.setInProtocol(inUseSSL ? inProtocol + "s" : inProtocol);
96 mailingList.setInServerName(inServerName);
97 mailingList.setInServerPort(inServerPort);
98 mailingList.setInUseSSL(inUseSSL);
99 mailingList.setInUserName(inUserName);
100 mailingList.setInPassword(inPassword);
101 mailingList.setInReadInterval(inReadInterval);
102 mailingList.setOutEmailAddress(outEmailAddress);
103 mailingList.setOutCustom(outCustom);
104 mailingList.setOutServerName(outServerName);
105 mailingList.setOutServerPort(outServerPort);
106 mailingList.setOutUseSSL(outUseSSL);
107 mailingList.setOutUserName(outUserName);
108 mailingList.setOutPassword(outPassword);
109 mailingList.setActive(active);
110
111 mbMailingListPersistence.update(mailingList, false);
112
113
115 if (active) {
116 scheduleMailingList(mailingList);
117 }
118
119 return mailingList;
120 }
121
122 public void deleteCategoryMailingList(long categoryId)
123 throws PortalException, SystemException {
124
125 MBMailingList mailingList = mbMailingListPersistence.findByCategoryId(
126 categoryId);
127
128 deleteMailingList(mailingList);
129 }
130
131 public void deleteMailingList(long mailingListId)
132 throws PortalException, SystemException {
133
134 MBMailingList mailingList = mbMailingListPersistence.findByPrimaryKey(
135 mailingListId);
136
137 deleteMailingList(mailingList);
138 }
139
140 public void deleteMailingList(MBMailingList mailingList)
141 throws PortalException, SystemException {
142
143 unscheduleMailingList(mailingList);
144
145 mbMailingListPersistence.remove(mailingList);
146 }
147
148 public MBMailingList getCategoryMailingList(long categoryId)
149 throws PortalException, SystemException {
150
151 return mbMailingListPersistence.findByCategoryId(categoryId);
152 }
153
154 public MBMailingList updateMailingList(
155 long mailingListId, String emailAddress, String inProtocol,
156 String inServerName, int inServerPort, boolean inUseSSL,
157 String inUserName, String inPassword, int inReadInterval,
158 String outEmailAddress, boolean outCustom, String outServerName,
159 int outServerPort, boolean outUseSSL, String outUserName,
160 String outPassword, boolean active)
161 throws PortalException, SystemException {
162
163
165 validate(
166 emailAddress, inServerName, inUserName, outEmailAddress, outCustom,
167 outServerName, outUserName, active);
168
169 MBMailingList mailingList = mbMailingListPersistence.findByPrimaryKey(
170 mailingListId);
171
172 mailingList.setModifiedDate(new Date());
173 mailingList.setEmailAddress(emailAddress);
174 mailingList.setInProtocol(inUseSSL ? inProtocol + "s" : inProtocol);
175 mailingList.setInServerName(inServerName);
176 mailingList.setInServerPort(inServerPort);
177 mailingList.setInUseSSL(inUseSSL);
178 mailingList.setInUserName(inUserName);
179 mailingList.setInPassword(inPassword);
180 mailingList.setInReadInterval(inReadInterval);
181 mailingList.setOutEmailAddress(outEmailAddress);
182 mailingList.setOutCustom(outCustom);
183 mailingList.setOutServerName(outServerName);
184 mailingList.setOutServerPort(outServerPort);
185 mailingList.setOutUseSSL(outUseSSL);
186 mailingList.setOutUserName(outUserName);
187 mailingList.setOutPassword(outPassword);
188 mailingList.setActive(active);
189
190 mbMailingListPersistence.update(mailingList, false);
191
192
194 if (active) {
195 scheduleMailingList(mailingList);
196 }
197 else {
198 unscheduleMailingList(mailingList);
199 }
200
201 return mailingList;
202 }
203
204 protected String getSchedulerGroupName(MBMailingList mailingList) {
205 StringBuilder sb = new StringBuilder();
206
207 sb.append(DestinationNames.MESSAGE_BOARDS_MAILING_LIST);
208 sb.append(StringPool.SLASH);
209 sb.append(mailingList.getMailingListId());
210
211 return sb.toString();
212 }
213
214 protected void scheduleMailingList(MBMailingList mailingList)
215 throws PortalException {
216
217 unscheduleMailingList(mailingList);
218
219 String groupName = getSchedulerGroupName(mailingList);
220
221 Calendar startDate = CalendarFactoryUtil.getCalendar();
222
223 TriggerExpression triggerExpression = new TriggerExpression(
224 startDate, TriggerExpression.MINUTELY_FREQUENCY,
225 mailingList.getInReadInterval());
226
227 String cronText = triggerExpression.toCronText();
228
229 MailingListRequest mailingListRequest = new MailingListRequest();
230
231 mailingListRequest.setCompanyId(mailingList.getCompanyId());
232 mailingListRequest.setUserId(mailingList.getUserId());
233 mailingListRequest.setCategoryId(mailingList.getCategoryId());
234 mailingListRequest.setInProtocol(mailingList.getInProtocol());
235 mailingListRequest.setInServerName(mailingList.getInServerName());
236 mailingListRequest.setInServerPort(mailingList.getInServerPort());
237 mailingListRequest.setInUseSSL(mailingList.getInUseSSL());
238 mailingListRequest.setInUserName(mailingList.getInUserName());
239 mailingListRequest.setInPassword(mailingList.getInPassword());
240
241 SchedulerEngineUtil.schedule(
242 groupName, cronText, startDate.getTime(), null, null,
243 DestinationNames.MESSAGE_BOARDS_MAILING_LIST,
244 JSONFactoryUtil.serialize(mailingListRequest));
245 }
246
247 protected void unscheduleMailingList(MBMailingList mailingList)
248 throws PortalException {
249
250 String groupName = getSchedulerGroupName(mailingList);
251
252 List<SchedulerRequest> schedulerRequests =
253 SchedulerEngineUtil.getScheduledJobs(groupName);
254
255 for (SchedulerRequest schedulerRequest : schedulerRequests) {
256 SchedulerEngineUtil.unschedule(
257 schedulerRequest.getJobName(), schedulerRequest.getGroupName());
258 }
259 }
260
261 protected void validate(
262 String emailAddress, String inServerName, String inUserName,
263 String outEmailAddress, boolean outCustom, String outServerName,
264 String outUserName, boolean active)
265 throws PortalException {
266
267 if (!active) {
268 return;
269 }
270
271 if (!Validator.isEmailAddress(emailAddress)) {
272 throw new MailingListEmailAddressException();
273 }
274 else if (Validator.isNull(inServerName)) {
275 throw new MailingListInServerNameException();
276 }
277 else if (Validator.isNull(inUserName)) {
278 throw new MailingListInUserNameException();
279 }
280 else if (Validator.isNull(outEmailAddress)) {
281 throw new MailingListOutEmailAddressException();
282 }
283 else if (outCustom) {
284 if (Validator.isNull(outServerName)) {
285 throw new MailingListOutServerNameException();
286 }
287 else if (Validator.isNull(outUserName)) {
288 throw new MailingListOutUserNameException();
289 }
290 }
291 }
292
293 }