1
22
23 package com.liferay.portlet.polls.service.impl;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.kernel.util.Validator;
28 import com.liferay.portal.model.ResourceConstants;
29 import com.liferay.portal.model.User;
30 import com.liferay.portal.util.PortalUtil;
31 import com.liferay.portlet.polls.QuestionChoiceException;
32 import com.liferay.portlet.polls.QuestionDescriptionException;
33 import com.liferay.portlet.polls.QuestionExpirationDateException;
34 import com.liferay.portlet.polls.QuestionTitleException;
35 import com.liferay.portlet.polls.model.PollsChoice;
36 import com.liferay.portlet.polls.model.PollsQuestion;
37 import com.liferay.portlet.polls.service.base.PollsQuestionLocalServiceBaseImpl;
38
39 import java.util.Date;
40 import java.util.List;
41
42
49 public class PollsQuestionLocalServiceImpl
50 extends PollsQuestionLocalServiceBaseImpl {
51
52 public PollsQuestion addQuestion(
53 long userId, long plid, String title, String description,
54 int expirationDateMonth, int expirationDateDay,
55 int expirationDateYear, int expirationDateHour,
56 int expirationDateMinute, boolean neverExpire,
57 boolean addCommunityPermissions, boolean addGuestPermissions)
58 throws PortalException, SystemException {
59
60 return addQuestion(
61 null, userId, plid, title, description, expirationDateMonth,
62 expirationDateDay, expirationDateYear, expirationDateHour,
63 expirationDateMinute, neverExpire, null,
64 Boolean.valueOf(addCommunityPermissions),
65 Boolean.valueOf(addGuestPermissions), null, null);
66 }
67
68 public PollsQuestion addQuestion(
69 String uuid, long userId, long plid, String title,
70 String description, int expirationDateMonth, int expirationDateDay,
71 int expirationDateYear, int expirationDateHour,
72 int expirationDateMinute, boolean neverExpire,
73 boolean addCommunityPermissions, boolean addGuestPermissions)
74 throws PortalException, SystemException {
75
76 return addQuestion(
77 uuid, userId, plid, title, description, expirationDateMonth,
78 expirationDateDay, expirationDateYear, expirationDateHour,
79 expirationDateMinute, neverExpire, null,
80 Boolean.valueOf(addCommunityPermissions),
81 Boolean.valueOf(addGuestPermissions), null, null);
82 }
83
84 public PollsQuestion addQuestion(
85 long userId, long plid, String title, String description,
86 int expirationDateMonth, int expirationDateDay,
87 int expirationDateYear, int expirationDateHour,
88 int expirationDateMinute, boolean neverExpire,
89 List<PollsChoice> choices, boolean addCommunityPermissions,
90 boolean addGuestPermissions)
91 throws PortalException, SystemException {
92
93 return addQuestion(
94 null, userId, plid, title, description, expirationDateMonth,
95 expirationDateDay, expirationDateYear, expirationDateHour,
96 expirationDateMinute, neverExpire, choices,
97 Boolean.valueOf(addCommunityPermissions),
98 Boolean.valueOf(addGuestPermissions), null, null);
99 }
100
101 public PollsQuestion addQuestion(
102 long userId, long plid, String title, String description,
103 int expirationDateMonth, int expirationDateDay,
104 int expirationDateYear, int expirationDateHour,
105 int expirationDateMinute, boolean neverExpire,
106 List<PollsChoice> choices, String[] communityPermissions,
107 String[] guestPermissions)
108 throws PortalException, SystemException {
109
110 return addQuestion(
111 null, userId, plid, title, description, expirationDateMonth,
112 expirationDateDay, expirationDateYear, expirationDateHour,
113 expirationDateMinute, neverExpire, choices, null, null,
114 communityPermissions, guestPermissions);
115 }
116
117 public PollsQuestion addQuestion(
118 String uuid, long userId, long plid, String title,
119 String description, int expirationDateMonth, int expirationDateDay,
120 int expirationDateYear, int expirationDateHour,
121 int expirationDateMinute, boolean neverExpire,
122 List<PollsChoice> choices, Boolean addCommunityPermissions,
123 Boolean addGuestPermissions, String[] communityPermissions,
124 String[] guestPermissions)
125 throws PortalException, SystemException {
126
127
129 User user = userPersistence.findByPrimaryKey(userId);
130 long groupId = PortalUtil.getPortletGroupId(plid);
131
132 Date expirationDate = null;
133
134 if (!neverExpire) {
135 expirationDate = PortalUtil.getDate(
136 expirationDateMonth, expirationDateDay, expirationDateYear,
137 expirationDateHour, expirationDateMinute, user.getTimeZone(),
138 new QuestionExpirationDateException());
139 }
140
141 Date now = new Date();
142
143 validate(title, description, choices);
144
145 long questionId = counterLocalService.increment();
146
147 PollsQuestion question = pollsQuestionPersistence.create(questionId);
148
149 question.setUuid(uuid);
150 question.setGroupId(groupId);
151 question.setCompanyId(user.getCompanyId());
152 question.setUserId(user.getUserId());
153 question.setUserName(user.getFullName());
154 question.setCreateDate(now);
155 question.setModifiedDate(now);
156 question.setTitle(title);
157 question.setDescription(description);
158 question.setExpirationDate(expirationDate);
159
160 pollsQuestionPersistence.update(question, false);
161
162
164 if ((addCommunityPermissions != null) &&
165 (addGuestPermissions != null)) {
166
167 addQuestionResources(
168 question, addCommunityPermissions.booleanValue(),
169 addGuestPermissions.booleanValue());
170 }
171 else {
172 addQuestionResources(
173 question, communityPermissions, guestPermissions);
174 }
175
176
178 for (PollsChoice choice : choices) {
179 pollsChoiceLocalService.addChoice(
180 questionId, choice.getName(), choice.getDescription());
181 }
182
183 return question;
184 }
185
186 public void addQuestionResources(
187 long questionId, boolean addCommunityPermissions,
188 boolean addGuestPermissions)
189 throws PortalException, SystemException {
190
191 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
192 questionId);
193
194 addQuestionResources(
195 question, addCommunityPermissions, addGuestPermissions);
196 }
197
198 public void addQuestionResources(
199 PollsQuestion question, boolean addCommunityPermissions,
200 boolean addGuestPermissions)
201 throws PortalException, SystemException {
202
203 resourceLocalService.addResources(
204 question.getCompanyId(), question.getGroupId(),
205 question.getUserId(), PollsQuestion.class.getName(),
206 question.getQuestionId(), false, addCommunityPermissions,
207 addGuestPermissions);
208 }
209
210 public void addQuestionResources(
211 long questionId, String[] communityPermissions,
212 String[] guestPermissions)
213 throws PortalException, SystemException {
214
215 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
216 questionId);
217
218 addQuestionResources(question, communityPermissions, guestPermissions);
219 }
220
221 public void addQuestionResources(
222 PollsQuestion question, String[] communityPermissions,
223 String[] guestPermissions)
224 throws PortalException, SystemException {
225
226 resourceLocalService.addModelResources(
227 question.getCompanyId(), question.getGroupId(),
228 question.getUserId(), PollsQuestion.class.getName(),
229 question.getQuestionId(), communityPermissions, guestPermissions);
230 }
231
232 public void deleteQuestion(long questionId)
233 throws PortalException, SystemException {
234
235 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
236 questionId);
237
238 deleteQuestion(question);
239 }
240
241 public void deleteQuestion(PollsQuestion question)
242 throws PortalException, SystemException {
243
244
246 pollsVotePersistence.removeByQuestionId(question.getQuestionId());
247
248
250 pollsChoicePersistence.removeByQuestionId(question.getQuestionId());
251
252
254 resourceLocalService.deleteResource(
255 question.getCompanyId(), PollsQuestion.class.getName(),
256 ResourceConstants.SCOPE_INDIVIDUAL, question.getQuestionId());
257
258
260 pollsQuestionPersistence.remove(question.getQuestionId());
261 }
262
263 public void deleteQuestions(long groupId)
264 throws PortalException, SystemException {
265
266 for (PollsQuestion question :
267 pollsQuestionPersistence.findByGroupId(groupId)) {
268
269 deleteQuestion(question);
270 }
271 }
272
273 public PollsQuestion getQuestion(long questionId)
274 throws PortalException, SystemException {
275
276 return pollsQuestionPersistence.findByPrimaryKey(questionId);
277 }
278
279 public List<PollsQuestion> getQuestions(long groupId)
280 throws SystemException {
281
282 return pollsQuestionPersistence.findByGroupId(groupId);
283 }
284
285 public List<PollsQuestion> getQuestions(long groupId, int begin, int end)
286 throws SystemException {
287
288 return pollsQuestionPersistence.findByGroupId(groupId, begin, end);
289 }
290
291 public int getQuestionsCount(long groupId) throws SystemException {
292 return pollsQuestionPersistence.countByGroupId(groupId);
293 }
294
295 public PollsQuestion updateQuestion(
296 long userId, long questionId, String title, String description,
297 int expirationDateMonth, int expirationDateDay,
298 int expirationDateYear, int expirationDateHour,
299 int expirationDateMinute, boolean neverExpire)
300 throws PortalException, SystemException {
301
302 return updateQuestion(
303 userId, questionId, title, description, expirationDateMonth,
304 expirationDateDay, expirationDateYear, expirationDateHour,
305 expirationDateMinute, neverExpire, null);
306 }
307
308 public PollsQuestion updateQuestion(
309 long userId, long questionId, String title, String description,
310 int expirationDateMonth, int expirationDateDay,
311 int expirationDateYear, int expirationDateHour,
312 int expirationDateMinute, boolean neverExpire,
313 List<PollsChoice> choices)
314 throws PortalException, SystemException {
315
316
318 User user = userPersistence.findByPrimaryKey(userId);
319
320 Date expirationDate = null;
321
322 if (!neverExpire) {
323 expirationDate = PortalUtil.getDate(
324 expirationDateMonth, expirationDateDay, expirationDateYear,
325 expirationDateHour, expirationDateMinute, user.getTimeZone(),
326 new QuestionExpirationDateException());
327 }
328
329 validate(title, description, choices);
330
331 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
332 questionId);
333
334 question.setModifiedDate(new Date());
335 question.setTitle(title);
336 question.setDescription(description);
337 question.setExpirationDate(expirationDate);
338
339 pollsQuestionPersistence.update(question, false);
340
341
343 int oldChoicesCount = pollsChoicePersistence.countByQuestionId(
344 questionId);
345
346 if (oldChoicesCount > choices.size()) {
347 throw new QuestionChoiceException();
348 }
349
350 for (PollsChoice choice : choices) {
351 String choiceName = choice.getName();
352 String choiceDescription = choice.getDescription();
353
354 choice = pollsChoicePersistence.fetchByQ_N(questionId, choiceName);
355
356 if (choice == null) {
357 pollsChoiceLocalService.addChoice(
358 questionId, choiceName, choiceDescription);
359 }
360 else {
361 pollsChoiceLocalService.updateChoice(
362 choice.getChoiceId(), questionId, choiceName,
363 choiceDescription);
364 }
365 }
366
367 return question;
368 }
369
370 protected void validate(
371 String title, String description, List<PollsChoice> choices)
372 throws PortalException {
373
374 if (Validator.isNull(title)) {
375 throw new QuestionTitleException();
376 }
377 else if (Validator.isNull(description)) {
378 throw new QuestionDescriptionException();
379 }
380
381 if (choices.size() < 2) {
382 throw new QuestionChoiceException();
383 }
384 }
385
386 }