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