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.User;
29 import com.liferay.portal.model.impl.ResourceImpl;
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.Iterator;
41 import java.util.List;
42
43
50 public class PollsQuestionLocalServiceImpl
51 extends PollsQuestionLocalServiceBaseImpl {
52
53 public PollsQuestion addQuestion(
54 long userId, long plid, String title, String description,
55 int expirationDateMonth, int expirationDateDay,
56 int expirationDateYear, int expirationDateHour,
57 int expirationDateMinute, boolean neverExpire,
58 boolean addCommunityPermissions, boolean addGuestPermissions)
59 throws PortalException, SystemException {
60
61 return addQuestion(
62 null, userId, plid, title, description, expirationDateMonth,
63 expirationDateDay, expirationDateYear, expirationDateHour,
64 expirationDateMinute, neverExpire, null,
65 Boolean.valueOf(addCommunityPermissions),
66 Boolean.valueOf(addGuestPermissions), null, null);
67 }
68
69 public PollsQuestion addQuestion(
70 String uuid, long userId, long plid, String title,
71 String description, int expirationDateMonth, int expirationDateDay,
72 int expirationDateYear, int expirationDateHour,
73 int expirationDateMinute, boolean neverExpire,
74 boolean addCommunityPermissions, boolean addGuestPermissions)
75 throws PortalException, SystemException {
76
77 return addQuestion(
78 uuid, userId, plid, title, description, expirationDateMonth,
79 expirationDateDay, expirationDateYear, expirationDateHour,
80 expirationDateMinute, neverExpire, null,
81 Boolean.valueOf(addCommunityPermissions),
82 Boolean.valueOf(addGuestPermissions), null, null);
83 }
84
85 public PollsQuestion addQuestion(
86 long userId, long plid, String title, String description,
87 int expirationDateMonth, int expirationDateDay,
88 int expirationDateYear, int expirationDateHour,
89 int expirationDateMinute, boolean neverExpire, List choices,
90 boolean addCommunityPermissions, 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, List choices,
106 String[] communityPermissions, 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, List choices,
121 Boolean addCommunityPermissions, Boolean addGuestPermissions,
122 String[] communityPermissions, String[] guestPermissions)
123 throws PortalException, SystemException {
124
125
127 User user = userPersistence.findByPrimaryKey(userId);
128 long groupId = PortalUtil.getPortletGroupId(plid);
129 Date now = new Date();
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 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);
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 Iterator itr = choices.iterator();
177
178 while (itr.hasNext()) {
179 PollsChoice choice = (PollsChoice)itr.next();
180
181 pollsChoiceLocalService.addChoice(
182 questionId, choice.getName(), choice.getDescription());
183 }
184 }
185
186 return question;
187 }
188
189 public void addQuestionResources(
190 long questionId, boolean addCommunityPermissions,
191 boolean addGuestPermissions)
192 throws PortalException, SystemException {
193
194 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
195 questionId);
196
197 addQuestionResources(
198 question, addCommunityPermissions, addGuestPermissions);
199 }
200
201 public void addQuestionResources(
202 PollsQuestion question, boolean addCommunityPermissions,
203 boolean addGuestPermissions)
204 throws PortalException, SystemException {
205
206 resourceLocalService.addResources(
207 question.getCompanyId(), question.getGroupId(),
208 question.getUserId(), PollsQuestion.class.getName(),
209 question.getQuestionId(), false, addCommunityPermissions,
210 addGuestPermissions);
211 }
212
213 public void addQuestionResources(
214 long questionId, String[] communityPermissions,
215 String[] guestPermissions)
216 throws PortalException, SystemException {
217
218 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
219 questionId);
220
221 addQuestionResources(question, communityPermissions, guestPermissions);
222 }
223
224 public void addQuestionResources(
225 PollsQuestion question, String[] communityPermissions,
226 String[] guestPermissions)
227 throws PortalException, SystemException {
228
229 resourceLocalService.addModelResources(
230 question.getCompanyId(), question.getGroupId(),
231 question.getUserId(), PollsQuestion.class.getName(),
232 question.getQuestionId(), communityPermissions, guestPermissions);
233 }
234
235 public void deleteQuestion(long questionId)
236 throws PortalException, SystemException {
237
238 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
239 questionId);
240
241 deleteQuestion(question);
242 }
243
244 public void deleteQuestion(PollsQuestion question)
245 throws PortalException, SystemException {
246
247
249 pollsVotePersistence.removeByQuestionId(question.getQuestionId());
250
251
253 pollsChoicePersistence.removeByQuestionId(question.getQuestionId());
254
255
257 resourceLocalService.deleteResource(
258 question.getCompanyId(), PollsQuestion.class.getName(),
259 ResourceImpl.SCOPE_INDIVIDUAL, question.getQuestionId());
260
261
263 pollsQuestionPersistence.remove(question.getQuestionId());
264 }
265
266 public void deleteQuestions(long groupId)
267 throws PortalException, SystemException {
268
269 Iterator itr = pollsQuestionPersistence.findByGroupId(
270 groupId).iterator();
271
272 while (itr.hasNext()) {
273 PollsQuestion question = (PollsQuestion)itr.next();
274
275 deleteQuestion(question);
276 }
277 }
278
279 public PollsQuestion getQuestion(long questionId)
280 throws PortalException, SystemException {
281
282 return pollsQuestionPersistence.findByPrimaryKey(questionId);
283 }
284
285 public List getQuestions(long groupId) throws SystemException {
286 return pollsQuestionPersistence.findByGroupId(groupId);
287 }
288
289 public List getQuestions(long groupId, int begin, int end)
290 throws SystemException {
291
292 return pollsQuestionPersistence.findByGroupId(groupId, begin, end);
293 }
294
295 public int getQuestionsCount(long groupId) throws SystemException {
296 return pollsQuestionPersistence.countByGroupId(groupId);
297 }
298
299 public PollsQuestion updateQuestion(
300 long userId, long questionId, String title, String description,
301 int expirationDateMonth, int expirationDateDay,
302 int expirationDateYear, int expirationDateHour,
303 int expirationDateMinute, boolean neverExpire)
304 throws PortalException, SystemException {
305
306 return updateQuestion(
307 userId, questionId, title, description, expirationDateMonth,
308 expirationDateDay, expirationDateYear, expirationDateHour,
309 expirationDateMinute, neverExpire, null);
310 }
311
312 public PollsQuestion updateQuestion(
313 long userId, long questionId, String title, String description,
314 int expirationDateMonth, int expirationDateDay,
315 int expirationDateYear, int expirationDateHour,
316 int expirationDateMinute, boolean neverExpire, List choices)
317 throws PortalException, SystemException {
318
319
321 User user = userPersistence.findByPrimaryKey(userId);
322
323 Date expirationDate = null;
324
325 if (!neverExpire) {
326 expirationDate = PortalUtil.getDate(
327 expirationDateMonth, expirationDateDay, expirationDateYear,
328 expirationDateHour, expirationDateMinute, user.getTimeZone(),
329 new QuestionExpirationDateException());
330 }
331
332 validate(title, description, choices);
333
334 PollsQuestion question = pollsQuestionPersistence.findByPrimaryKey(
335 questionId);
336
337 question.setModifiedDate(new Date());
338 question.setTitle(title);
339 question.setDescription(description);
340 question.setExpirationDate(expirationDate);
341
342 pollsQuestionPersistence.update(question);
343
344
346 if (choices != null) {
347 int oldChoicesCount = pollsChoicePersistence.countByQuestionId(
348 questionId);
349
350 if (oldChoicesCount > choices.size()) {
351 throw new QuestionChoiceException();
352 }
353
354 Iterator itr = choices.iterator();
355
356 while (itr.hasNext()) {
357 PollsChoice choice = (PollsChoice)itr.next();
358
359 String choiceName = choice.getName();
360 String choiceDescription = choice.getDescription();
361
362 choice = pollsChoicePersistence.fetchByQ_N(
363 questionId, choiceName);
364
365 if (choice == null) {
366 pollsChoiceLocalService.addChoice(
367 questionId, choiceName, choiceDescription);
368 }
369 else {
370 pollsChoiceLocalService.updateChoice(
371 choice.getChoiceId(), questionId, choiceName,
372 choiceDescription);
373 }
374 }
375 }
376
377 return question;
378 }
379
380 protected void validate(String title, String description, List choices)
381 throws PortalException {
382
383 if (Validator.isNull(title)) {
384 throw new QuestionTitleException();
385 }
386 else if (Validator.isNull(description)) {
387 throw new QuestionDescriptionException();
388 }
389
390 if ((choices != null) && (choices.size() < 2)) {
391 throw new QuestionChoiceException();
392 }
393 }
394
395 }