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