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.getScopeGroupId(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);
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 if (choices != null) {
346 int oldChoicesCount = pollsChoicePersistence.countByQuestionId(
347 questionId);
348
349 if (oldChoicesCount > choices.size()) {
350 throw new QuestionChoiceException();
351 }
352
353 for (PollsChoice choice : choices) {
354 String choiceName = choice.getName();
355 String choiceDescription = choice.getDescription();
356
357 choice = pollsChoicePersistence.fetchByQ_N(
358 questionId, choiceName);
359
360 if (choice == null) {
361 pollsChoiceLocalService.addChoice(
362 questionId, choiceName, choiceDescription);
363 }
364 else {
365 pollsChoiceLocalService.updateChoice(
366 choice.getChoiceId(), questionId, choiceName,
367 choiceDescription);
368 }
369 }
370 }
371
372 return question;
373 }
374
375 protected void validate(
376 String title, String description, List<PollsChoice> choices)
377 throws PortalException {
378
379 if (Validator.isNull(title)) {
380 throw new QuestionTitleException();
381 }
382 else if (Validator.isNull(description)) {
383 throw new QuestionDescriptionException();
384 }
385
386 if ((choices != null) && (choices.size() < 2)) {
387 throw new QuestionChoiceException();
388 }
389 }
390
391 }