1
19
20 package com.liferay.portlet.calendar.lar;
21
22 import com.liferay.portal.SystemException;
23 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
24 import com.liferay.portal.kernel.xml.Document;
25 import com.liferay.portal.kernel.xml.Element;
26 import com.liferay.portal.kernel.xml.SAXReaderUtil;
27 import com.liferay.portal.lar.BasePortletDataHandler;
28 import com.liferay.portal.lar.PortletDataContext;
29 import com.liferay.portal.lar.PortletDataException;
30 import com.liferay.portal.lar.PortletDataHandlerBoolean;
31 import com.liferay.portal.lar.PortletDataHandlerControl;
32 import com.liferay.portal.lar.PortletDataHandlerKeys;
33 import com.liferay.portal.service.ServiceContext;
34 import com.liferay.portal.util.PortletKeys;
35 import com.liferay.portlet.calendar.model.CalEvent;
36 import com.liferay.portlet.calendar.service.CalEventLocalServiceUtil;
37 import com.liferay.portlet.calendar.service.persistence.CalEventUtil;
38
39 import java.util.Calendar;
40 import java.util.Date;
41 import java.util.List;
42
43 import javax.portlet.PortletPreferences;
44
45
53 public class CalendarPortletDataHandlerImpl extends BasePortletDataHandler {
54
55 public PortletPreferences deleteData(
56 PortletDataContext context, String portletId,
57 PortletPreferences preferences)
58 throws PortletDataException {
59
60 try {
61 if (!context.addPrimaryKey(
62 CalendarPortletDataHandlerImpl.class, "deleteData")) {
63
64 CalEventLocalServiceUtil.deleteEvents(context.getGroupId());
65 }
66 return null;
67 }
68 catch (Exception e) {
69 throw new PortletDataException(e);
70 }
71 }
72
73 public String exportData(
74 PortletDataContext context, String portletId,
75 PortletPreferences preferences)
76 throws PortletDataException {
77
78 try {
79 Document doc = SAXReaderUtil.createDocument();
80
81 Element root = doc.addElement("calendar-data");
82
83 root.addAttribute("group-id", String.valueOf(context.getGroupId()));
84
85 List<CalEvent> events = CalEventUtil.findByGroupId(
86 context.getGroupId());
87
88 for (CalEvent event : events) {
89 exportEvent(context, root, event);
90 }
91
92 return doc.formattedString();
93 }
94 catch (Exception e) {
95 throw new PortletDataException(e);
96 }
97 }
98
99 public PortletDataHandlerControl[] getExportControls() {
100 return new PortletDataHandlerControl[] {_events};
101 }
102
103 public PortletDataHandlerControl[] getImportControls() {
104 return new PortletDataHandlerControl[] {_events};
105 }
106
107 public PortletPreferences importData(
108 PortletDataContext context, String portletId,
109 PortletPreferences preferences, String data)
110 throws PortletDataException {
111
112 try {
113 Document doc = SAXReaderUtil.read(data);
114
115 Element root = doc.getRootElement();
116
117 List<Element> eventsEl = root.elements("event");
118
119 for (Element eventEl : eventsEl) {
120 String path = eventEl.attributeValue("path");
121
122 if (!context.isPathNotProcessed(path)) {
123 continue;
124 }
125
126 CalEvent event = (CalEvent)context.getZipEntryAsObject(path);
127
128 importEvent(context, event);
129 }
130
131 return null;
132 }
133 catch (Exception e) {
134 throw new PortletDataException(e);
135 }
136 }
137
138 protected void exportEvent(
139 PortletDataContext context, Element root, CalEvent event)
140 throws SystemException {
141
142 if (!context.isWithinDateRange(event.getModifiedDate())) {
143 return;
144 }
145
146 String path = getEventPath(context, event);
147
148 if (!context.isPathNotProcessed(path)) {
149 return;
150 }
151
152 Element eventEl = root.addElement("event");
153
154 eventEl.addAttribute("path", path);
155
156 event.setUserUuid(event.getUserUuid());
157
158 context.addZipEntry(path, event);
159 }
160
161 protected String getEventPath(PortletDataContext context, CalEvent event) {
162 StringBuilder sb = new StringBuilder();
163
164 sb.append(context.getPortletPath(PortletKeys.CALENDAR));
165 sb.append("/events/");
166 sb.append(event.getEventId());
167 sb.append(".xml");
168
169 return sb.toString();
170 }
171
172 protected void importEvent(PortletDataContext context, CalEvent event)
173 throws Exception {
174
175 long userId = context.getUserId(event.getUserUuid());
176
177 Date startDate = event.getStartDate();
178
179 int startDateMonth = 0;
180 int startDateDay = 0;
181 int startDateYear = 0;
182 int startDateHour = 0;
183 int startDateMinute = 0;
184
185 if (startDate != null) {
186 Calendar startCal = CalendarFactoryUtil.getCalendar();
187
188 startCal.setTime(startDate);
189
190 startDateMonth = startCal.get(Calendar.MONTH);
191 startDateDay = startCal.get(Calendar.DATE);
192 startDateYear = startCal.get(Calendar.YEAR);
193 startDateHour = startCal.get(Calendar.HOUR);
194 startDateMinute = startCal.get(Calendar.MINUTE);
195
196 if (startCal.get(Calendar.AM_PM) == Calendar.PM) {
197 startDateHour += 12;
198 }
199 }
200
201 Date endDate = event.getEndDate();
202
203 int endDateMonth = 0;
204 int endDateDay = 0;
205 int endDateYear = 0;
206
207 if (endDate != null) {
208 Calendar endCal = CalendarFactoryUtil.getCalendar();
209
210 endCal.setTime(endDate);
211
212 endDateMonth = endCal.get(Calendar.MONTH);
213 endDateDay = endCal.get(Calendar.DATE);
214 endDateYear = endCal.get(Calendar.YEAR);
215 }
216
217 ServiceContext serviceContext = new ServiceContext();
218
219 serviceContext.setAddCommunityPermissions(true);
220 serviceContext.setAddGuestPermissions(true);
221 serviceContext.setScopeGroupId(context.getGroupId());
222
223 CalEvent existingEvent = null;
224
225 if (context.getDataStrategy().equals(
226 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
227
228 existingEvent = CalEventUtil.fetchByUUID_G(
229 event.getUuid(), context.getGroupId());
230
231 if (existingEvent == null) {
232 CalEventLocalServiceUtil.addEvent(
233 event.getUuid(), userId, event.getTitle(),
234 event.getDescription(), startDateMonth, startDateDay,
235 startDateYear, startDateHour, startDateMinute, endDateMonth,
236 endDateDay, endDateYear, event.getDurationHour(),
237 event.getDurationMinute(), event.getAllDay(),
238 event.getTimeZoneSensitive(), event.getType(),
239 event.getRepeating(), event.getRecurrenceObj(),
240 event.getRemindBy(), event.getFirstReminder(),
241 event.getSecondReminder(), serviceContext);
242 }
243 else {
244 CalEventLocalServiceUtil.updateEvent(
245 userId, existingEvent.getEventId(), event.getTitle(),
246 event.getDescription(), startDateMonth, startDateDay,
247 startDateYear, startDateHour, startDateMinute, endDateMonth,
248 endDateDay, endDateYear, event.getDurationHour(),
249 event.getDurationMinute(), event.getAllDay(),
250 event.getTimeZoneSensitive(), event.getType(),
251 event.getRepeating(), event.getRecurrenceObj(),
252 event.getRemindBy(), event.getFirstReminder(),
253 event.getSecondReminder(), serviceContext);
254 }
255 }
256 else {
257 CalEventLocalServiceUtil.addEvent(
258 userId, event.getTitle(), event.getDescription(),
259 startDateMonth, startDateDay, startDateYear, startDateHour,
260 startDateMinute, endDateMonth, endDateDay, endDateYear,
261 event.getDurationHour(), event.getDurationMinute(),
262 event.getAllDay(), event.getTimeZoneSensitive(),
263 event.getType(), event.getRepeating(), event.getRecurrenceObj(),
264 event.getRemindBy(), event.getFirstReminder(),
265 event.getSecondReminder(), serviceContext);
266 }
267 }
268
269 private static final String _NAMESPACE = "calendar";
270
271 private static final PortletDataHandlerBoolean _events =
272 new PortletDataHandlerBoolean(_NAMESPACE, "events", true, true);
273
274 }