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