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 if (choices != null) {
179 for (PollsChoice choice : choices) {
180 pollsChoiceLocalService.addChoice(
181 questionId, choice.getName(), choice.getDescription());
182 }
183 }
184
185 return question;
186 }
187
188 public void addQuestionResources(
189 long questionId, boolean addCommunityPermissions,
190 boolean addGuestPermissions)
191 throws PortalException, SystemException {
192
193 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
194 questionId);
195
196 addQuestionResources(
197 question, addCommunityPermissions, addGuestPermissions);
198 }
199
200 public void addQuestionResources(
201 PollsQuestion question, boolean addCommunityPermissions,
202 boolean addGuestPermissions)
203 throws PortalException, SystemException {
204
205 resourceLocalService.addResources(
206 question.getCompanyId(), question.getGroupId(),
207 question.getUserId(), PollsQuestion.class.getName(),
208 question.getQuestionId(), false, addCommunityPermissions,
209 addGuestPermissions);
210 }
211
212 public void addQuestionResources(
213 long questionId, String[] communityPermissions,
214 String[] guestPermissions)
215 throws PortalException, SystemException {
216
217 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
218 questionId);
219
220 addQuestionResources(question, communityPermissions, guestPermissions);
221 }
222
223 public void addQuestionResources(
224 PollsQuestion question, String[] communityPermissions,
225 String[] guestPermissions)
226 throws PortalException, SystemException {
227
228 resourceLocalService.addModelResources(
229 question.getCompanyId(), question.getGroupId(),
230 question.getUserId(), PollsQuestion.class.getName(),
231 question.getQuestionId(), communityPermissions, guestPermissions);
232 }
233
234 public void deleteQuestion(long questionId)
235 throws PortalException, SystemException {
236
237 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
238 questionId);
239
240 deleteQuestion(question);
241 }
242
243 public void deleteQuestion(PollsQuestion question)
244 throws PortalException, SystemException {
245
246
248 pollsVotePersistence.removeByQuestionId(question.getQuestionId());
249
250
252 pollsChoicePersistence.removeByQuestionId(question.getQuestionId());
253
254
256 resourceLocalService.deleteResource(
257 question.getCompanyId(), PollsQuestion.class.getName(),
258 ResourceConstants.SCOPE_INDIVIDUAL, question.getQuestionId());
259
260
262 pollsQuestionPersistence.remove(question.getQuestionId());
263 }
264
265 public void deleteQuestions(long groupId)
266 throws PortalException, SystemException {
267
268 for (PollsQuestion question :
269 pollsQuestionPersistence.findByGroupId(groupId)) {
270
271 deleteQuestion(question);
272 }
273 }
274
275 public PollsQuestion getQuestion(long questionId)
276 throws PortalException, SystemException {
277
278 return pollsQuestionPersistence.findByPrimaryKey(questionId);
279 }
280
281 public List<PollsQuestion> getQuestions(long groupId)
282 throws SystemException {
283
284 return pollsQuestionPersistence.findByGroupId(groupId);
285 }
286
287 public List<PollsQuestion> getQuestions(long groupId, int start, int end)
288 throws SystemException {
289
290 return pollsQuestionPersistence.findByGroupId(groupId, start, end);
291 }
292
293 public int getQuestionsCount(long groupId) throws SystemException {
294 return pollsQuestionPersistence.countByGroupId(groupId);
295 }
296
297 public PollsQuestion updateQuestion(
298 long userId, long questionId, String title, String description,
299 int expirationDateMonth, int expirationDateDay,
300 int expirationDateYear, int expirationDateHour,
301 int expirationDateMinute, boolean neverExpire)
302 throws PortalException, SystemException {
303
304 return updateQuestion(
305 userId, questionId, title, description, expirationDateMonth,
306 expirationDateDay, expirationDateYear, expirationDateHour,
307 expirationDateMinute, neverExpire, null);
308 }
309
310 public PollsQuestion updateQuestion(
311 long userId, long questionId, String title, String description,
312 int expirationDateMonth, int expirationDateDay,
313 int expirationDateYear, int expirationDateHour,
314 int expirationDateMinute, boolean neverExpire,
315 List<PollsChoice> choices)
316 throws PortalException, SystemException {
317
318
320 User user = userPersistence.findByPrimaryKey(userId);
321
322 Date expirationDate = null;
323
324 if (!neverExpire) {
325 expirationDate = PortalUtil.getDate(
326 expirationDateMonth, expirationDateDay, expirationDateYear,
327 expirationDateHour, expirationDateMinute, user.getTimeZone(),
328 new QuestionExpirationDateException());
329 }
330
331 validate(title, description, choices);
332
333 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
334 questionId);
335
336 question.setModifiedDate(new Date());
337 question.setTitle(title);
338 question.setDescription(description);
339 question.setExpirationDate(expirationDate);
340
341 pollsQuestionPersistence.update(question, false);
342
343
345 int oldChoicesCount = pollsChoicePersistence.countByQuestionId(
346 questionId);
347
348 if (oldChoicesCount > choices.size()) {
349 throw new QuestionChoiceException();
350 }
351
352 for (PollsChoice choice : choices) {
353 String choiceName = choice.getName();
354 String choiceDescription = choice.getDescription();
355
356 choice = pollsChoicePersistence.fetchByQ_N(questionId, choiceName);
357
358 if (choice == null) {
359 pollsChoiceLocalService.addChoice(
360 questionId, choiceName, choiceDescription);
361 }
362 else {
363 pollsChoiceLocalService.updateChoice(
364 choice.getChoiceId(), questionId, choiceName,
365 choiceDescription);
366 }
367 }
368
369 return question;
370 }
371
372 protected void validate(
373 String title, String description, List<PollsChoice> choices)
374 throws PortalException {
375
376 if (Validator.isNull(title)) {
377 throw new QuestionTitleException();
378 }
379 else if (Validator.isNull(description)) {
380 throw new QuestionDescriptionException();
381 }
382
383 if (choices != null && choices.size() < 2) {
384 throw new QuestionChoiceException();
385 }
386 }
387
388 }