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