1
22
23 package com.liferay.portlet.polls.service.impl;
24
25 import com.liferay.counter.service.CounterLocalServiceUtil;
26 import com.liferay.portal.PortalException;
27 import com.liferay.portal.SystemException;
28 import com.liferay.portal.kernel.util.Validator;
29 import com.liferay.portal.model.User;
30 import com.liferay.portal.model.impl.ResourceImpl;
31 import com.liferay.portal.service.ResourceLocalServiceUtil;
32 import com.liferay.portal.service.persistence.UserUtil;
33 import com.liferay.portal.util.PortalUtil;
34 import com.liferay.portlet.polls.QuestionChoiceException;
35 import com.liferay.portlet.polls.QuestionDescriptionException;
36 import com.liferay.portlet.polls.QuestionExpirationDateException;
37 import com.liferay.portlet.polls.QuestionTitleException;
38 import com.liferay.portlet.polls.model.PollsChoice;
39 import com.liferay.portlet.polls.model.PollsQuestion;
40 import com.liferay.portlet.polls.service.base.PollsQuestionLocalServiceBaseImpl;
41 import com.liferay.portlet.polls.service.persistence.PollsChoiceUtil;
42 import com.liferay.portlet.polls.service.persistence.PollsQuestionUtil;
43 import com.liferay.portlet.polls.service.persistence.PollsVoteUtil;
44
45 import java.util.Date;
46 import java.util.Iterator;
47 import java.util.List;
48
49
56 public class PollsQuestionLocalServiceImpl
57 extends PollsQuestionLocalServiceBaseImpl {
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, List choices,
64 boolean addCommunityPermissions, boolean addGuestPermissions)
65 throws PortalException, SystemException {
66
67 return addQuestion(
68 userId, plid, title, description, expirationDateMonth,
69 expirationDateDay, expirationDateYear, expirationDateHour,
70 expirationDateMinute, neverExpire, choices,
71 Boolean.valueOf(addCommunityPermissions),
72 Boolean.valueOf(addGuestPermissions), null, null);
73 }
74
75 public PollsQuestion addQuestion(
76 long userId, long plid, String title, String description,
77 int expirationDateMonth, int expirationDateDay,
78 int expirationDateYear, int expirationDateHour,
79 int expirationDateMinute, boolean neverExpire, List choices,
80 String[] communityPermissions, String[] guestPermissions)
81 throws PortalException, SystemException {
82
83 return addQuestion(
84 userId, plid, title, description, expirationDateMonth,
85 expirationDateDay, expirationDateYear, expirationDateHour,
86 expirationDateMinute, neverExpire, choices, null, null,
87 communityPermissions, guestPermissions);
88 }
89
90 public PollsQuestion addQuestion(
91 long userId, long plid, String title, String description,
92 int expirationDateMonth, int expirationDateDay,
93 int expirationDateYear, int expirationDateHour,
94 int expirationDateMinute, boolean neverExpire, List choices,
95 Boolean addCommunityPermissions, Boolean addGuestPermissions,
96 String[] communityPermissions, String[] guestPermissions)
97 throws PortalException, SystemException {
98
99
101 User user = UserUtil.findByPrimaryKey(userId);
102 long groupId = PortalUtil.getPortletGroupId(plid);
103 Date now = new Date();
104
105 Date expirationDate = null;
106
107 if (!neverExpire) {
108 expirationDate = PortalUtil.getDate(
109 expirationDateMonth, expirationDateDay, expirationDateYear,
110 expirationDateHour, expirationDateMinute, user.getTimeZone(),
111 new QuestionExpirationDateException());
112 }
113
114 validate(title, description, choices);
115
116 long questionId = CounterLocalServiceUtil.increment();
117
118 PollsQuestion question = PollsQuestionUtil.create(questionId);
119
120 question.setGroupId(groupId);
121 question.setCompanyId(user.getCompanyId());
122 question.setUserId(user.getUserId());
123 question.setUserName(user.getFullName());
124 question.setCreateDate(now);
125 question.setModifiedDate(now);
126 question.setTitle(title);
127 question.setDescription(description);
128 question.setExpirationDate(expirationDate);
129
130 PollsQuestionUtil.update(question);
131
132
134 if ((addCommunityPermissions != null) &&
135 (addGuestPermissions != null)) {
136
137 addQuestionResources(
138 question, addCommunityPermissions.booleanValue(),
139 addGuestPermissions.booleanValue());
140 }
141 else {
142 addQuestionResources(
143 question, communityPermissions, guestPermissions);
144 }
145
146
148 Iterator itr = choices.iterator();
149
150 while (itr.hasNext()) {
151 PollsChoice choice = (PollsChoice)itr.next();
152
153 long choiceId = CounterLocalServiceUtil.increment();
154
155 choice.setChoiceId(choiceId);
156 choice.setQuestionId(questionId);
157
158 PollsChoiceUtil.update(choice);
159 }
160
161 return question;
162 }
163
164 public void addQuestionResources(
165 long questionId, boolean addCommunityPermissions,
166 boolean addGuestPermissions)
167 throws PortalException, SystemException {
168
169 PollsQuestion question = PollsQuestionUtil.findByPrimaryKey(questionId);
170
171 addQuestionResources(
172 question, addCommunityPermissions, addGuestPermissions);
173 }
174
175 public void addQuestionResources(
176 PollsQuestion question, boolean addCommunityPermissions,
177 boolean addGuestPermissions)
178 throws PortalException, SystemException {
179
180 ResourceLocalServiceUtil.addResources(
181 question.getCompanyId(), question.getGroupId(),
182 question.getUserId(), PollsQuestion.class.getName(),
183 question.getQuestionId(), false, addCommunityPermissions,
184 addGuestPermissions);
185 }
186
187 public void addQuestionResources(
188 long questionId, String[] communityPermissions,
189 String[] guestPermissions)
190 throws PortalException, SystemException {
191
192 PollsQuestion question = PollsQuestionUtil.findByPrimaryKey(questionId);
193
194 addQuestionResources(question, communityPermissions, guestPermissions);
195 }
196
197 public void addQuestionResources(
198 PollsQuestion question, String[] communityPermissions,
199 String[] guestPermissions)
200 throws PortalException, SystemException {
201
202 ResourceLocalServiceUtil.addModelResources(
203 question.getCompanyId(), question.getGroupId(),
204 question.getUserId(), PollsQuestion.class.getName(),
205 question.getQuestionId(), communityPermissions, guestPermissions);
206 }
207
208 public void deleteQuestion(long questionId)
209 throws PortalException, SystemException {
210
211 PollsQuestion question = PollsQuestionUtil.findByPrimaryKey(questionId);
212
213 deleteQuestion(question);
214 }
215
216 public void deleteQuestion(PollsQuestion question)
217 throws PortalException, SystemException {
218
219
221 PollsVoteUtil.removeByQuestionId(question.getQuestionId());
222
223
225 PollsChoiceUtil.removeByQuestionId(question.getQuestionId());
226
227
229 ResourceLocalServiceUtil.deleteResource(
230 question.getCompanyId(), PollsQuestion.class.getName(),
231 ResourceImpl.SCOPE_INDIVIDUAL, question.getQuestionId());
232
233
235 PollsQuestionUtil.remove(question.getQuestionId());
236 }
237
238 public void deleteQuestions(long groupId)
239 throws PortalException, SystemException {
240
241 Iterator itr = PollsQuestionUtil.findByGroupId(groupId).iterator();
242
243 while (itr.hasNext()) {
244 PollsQuestion question = (PollsQuestion)itr.next();
245
246 deleteQuestion(question);
247 }
248 }
249
250 public PollsQuestion getQuestion(long questionId)
251 throws PortalException, SystemException {
252
253 return PollsQuestionUtil.findByPrimaryKey(questionId);
254 }
255
256 public List getQuestions(long groupId) throws SystemException {
257 return PollsQuestionUtil.findByGroupId(groupId);
258 }
259
260 public List getQuestions(long groupId, int begin, int end)
261 throws SystemException {
262
263 return PollsQuestionUtil.findByGroupId(groupId, begin, end);
264 }
265
266 public int getQuestionsCount(long groupId) throws SystemException {
267 return PollsQuestionUtil.countByGroupId(groupId);
268 }
269
270 public PollsQuestion updateQuestion(
271 long userId, long questionId, String title, String description,
272 int expirationDateMonth, int expirationDateDay,
273 int expirationDateYear, int expirationDateHour,
274 int expirationDateMinute, boolean neverExpire, List choices)
275 throws PortalException, SystemException {
276
277
279 User user = UserUtil.findByPrimaryKey(userId);
280
281 Date expirationDate = null;
282
283 if (!neverExpire) {
284 expirationDate = PortalUtil.getDate(
285 expirationDateMonth, expirationDateDay, expirationDateYear,
286 expirationDateHour, expirationDateMinute, user.getTimeZone(),
287 new QuestionExpirationDateException());
288 }
289
290 validate(title, description, choices);
291
292 PollsQuestion question = PollsQuestionUtil.findByPrimaryKey(questionId);
293
294 question.setModifiedDate(new Date());
295 question.setTitle(title);
296 question.setDescription(description);
297 question.setExpirationDate(expirationDate);
298
299 PollsQuestionUtil.update(question);
300
301
303 int oldChoicesCount = PollsChoiceUtil.countByQuestionId(questionId);
304
305 if (oldChoicesCount != choices.size()) {
306 throw new QuestionChoiceException();
307 }
308
309 Iterator itr = choices.iterator();
310
311 while (itr.hasNext()) {
312 PollsChoice choice = (PollsChoice)itr.next();
313
314 String choiceName = choice.getName();
315 String choiceDescription = choice.getDescription();
316
317 choice = PollsChoiceUtil.fetchByQ_N(questionId, choiceName);
318
319 if (choice == null) {
320 long choiceId = CounterLocalServiceUtil.increment();
321
322 choice = PollsChoiceUtil.create(choiceId);
323
324 choice.setQuestionId(questionId);
325 choice.setName(choiceName);
326 }
327
328 choice.setDescription(choiceDescription);
329
330 PollsChoiceUtil.update(choice);
331 }
332
333 return question;
334 }
335
336 protected void validate(String title, String description, List choices)
337 throws PortalException {
338
339 if (Validator.isNull(title)) {
340 throw new QuestionTitleException();
341 }
342 else if (Validator.isNull(description)) {
343 throw new QuestionDescriptionException();
344 }
345
346 if (choices.size() < 2) {
347 throw new QuestionChoiceException();
348 }
349
350 for (int i = 0; i < choices.size(); i++) {
351 PollsChoice choice = (PollsChoice)choices.get(i);
352
353 if (Validator.isNull(choice.getName()) ||
354 Validator.isNull(choice.getDescription())) {
355
356 throw new QuestionChoiceException();
357 }
358 }
359 }
360
361 }