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