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