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.BasePortletDataHandler;
31 import com.liferay.portal.lar.PortletDataContext;
32 import com.liferay.portal.lar.PortletDataException;
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.service.ServiceContext;
37 import com.liferay.portal.util.PortletKeys;
38 import com.liferay.portlet.calendar.model.CalEvent;
39 import com.liferay.portlet.calendar.service.CalEventLocalServiceUtil;
40 import com.liferay.portlet.calendar.service.persistence.CalEventUtil;
41
42 import java.util.Calendar;
43 import java.util.Date;
44 import java.util.List;
45
46 import javax.portlet.PortletPreferences;
47
48
55 public class CalendarPortletDataHandlerImpl extends BasePortletDataHandler {
56
57 public PortletPreferences deleteData(
58 PortletDataContext context, String portletId,
59 PortletPreferences preferences)
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 preferences)
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 preferences, 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 protected void exportEvent(
141 PortletDataContext context, Element root, CalEvent event)
142 throws SystemException {
143
144 if (!context.isWithinDateRange(event.getModifiedDate())) {
145 return;
146 }
147
148 String path = getEventPath(context, event);
149
150 if (!context.isPathNotProcessed(path)) {
151 return;
152 }
153
154 Element eventEl = root.addElement("event");
155
156 eventEl.addAttribute("path", path);
157
158 event.setUserUuid(event.getUserUuid());
159
160 context.addZipEntry(path, event);
161 }
162
163 protected String getEventPath(PortletDataContext context, CalEvent event) {
164 StringBuilder sb = new StringBuilder();
165
166 sb.append(context.getPortletPath(PortletKeys.CALENDAR));
167 sb.append("/events/");
168 sb.append(event.getEventId());
169 sb.append(".xml");
170
171 return sb.toString();
172 }
173
174 protected void importEvent(PortletDataContext context, CalEvent event)
175 throws Exception {
176
177 long userId = context.getUserId(event.getUserUuid());
178
179 Date startDate = event.getStartDate();
180
181 int startDateMonth = 0;
182 int startDateDay = 0;
183 int startDateYear = 0;
184 int startDateHour = 0;
185 int startDateMinute = 0;
186
187 if (startDate != null) {
188 Calendar startCal = CalendarFactoryUtil.getCalendar();
189
190 startCal.setTime(startDate);
191
192 startDateMonth = startCal.get(Calendar.MONTH);
193 startDateDay = startCal.get(Calendar.DATE);
194 startDateYear = startCal.get(Calendar.YEAR);
195 startDateHour = startCal.get(Calendar.HOUR);
196 startDateMinute = startCal.get(Calendar.MINUTE);
197
198 if (startCal.get(Calendar.AM_PM) == Calendar.PM) {
199 startDateHour += 12;
200 }
201 }
202
203 Date endDate = event.getEndDate();
204
205 int endDateMonth = 0;
206 int endDateDay = 0;
207 int endDateYear = 0;
208
209 if (endDate != null) {
210 Calendar endCal = CalendarFactoryUtil.getCalendar();
211
212 endCal.setTime(endDate);
213
214 endDateMonth = endCal.get(Calendar.MONTH);
215 endDateDay = endCal.get(Calendar.DATE);
216 endDateYear = endCal.get(Calendar.YEAR);
217 }
218
219 ServiceContext serviceContext = new ServiceContext();
220
221 serviceContext.setAddCommunityPermissions(true);
222 serviceContext.setAddGuestPermissions(true);
223 serviceContext.setScopeGroupId(context.getGroupId());
224
225 CalEvent existingEvent = null;
226
227 if (context.getDataStrategy().equals(
228 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
229
230 existingEvent = CalEventUtil.fetchByUUID_G(
231 event.getUuid(), context.getGroupId());
232
233 if (existingEvent == null) {
234 CalEventLocalServiceUtil.addEvent(
235 event.getUuid(), userId, event.getTitle(),
236 event.getDescription(), startDateMonth, startDateDay,
237 startDateYear, startDateHour, startDateMinute, endDateMonth,
238 endDateDay, endDateYear, event.getDurationHour(),
239 event.getDurationMinute(), event.getAllDay(),
240 event.getTimeZoneSensitive(), event.getType(),
241 event.getRepeating(), event.getRecurrenceObj(),
242 event.getRemindBy(), event.getFirstReminder(),
243 event.getSecondReminder(), serviceContext);
244 }
245 else {
246 CalEventLocalServiceUtil.updateEvent(
247 userId, existingEvent.getEventId(), event.getTitle(),
248 event.getDescription(), startDateMonth, startDateDay,
249 startDateYear, startDateHour, startDateMinute, endDateMonth,
250 endDateDay, endDateYear, event.getDurationHour(),
251 event.getDurationMinute(), event.getAllDay(),
252 event.getTimeZoneSensitive(), event.getType(),
253 event.getRepeating(), event.getRecurrenceObj(),
254 event.getRemindBy(), event.getFirstReminder(),
255 event.getSecondReminder(), serviceContext);
256 }
257 }
258 else {
259 CalEventLocalServiceUtil.addEvent(
260 userId, event.getTitle(), event.getDescription(),
261 startDateMonth, startDateDay, startDateYear, startDateHour,
262 startDateMinute, endDateMonth, endDateDay, endDateYear,
263 event.getDurationHour(), event.getDurationMinute(),
264 event.getAllDay(), event.getTimeZoneSensitive(),
265 event.getType(), event.getRepeating(), event.getRecurrenceObj(),
266 event.getRemindBy(), event.getFirstReminder(),
267 event.getSecondReminder(), serviceContext);
268 }
269 }
270
271 private static final String _NAMESPACE = "calendar";
272
273 private static final PortletDataHandlerBoolean _events =
274 new PortletDataHandlerBoolean(_NAMESPACE, "events", true, true);
275
276 }