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