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
56 public class CalendarPortletDataHandlerImpl extends BasePortletDataHandler {
57
58 public PortletPreferences deleteData(
59 PortletDataContext context, String portletId,
60 PortletPreferences preferences)
61 throws PortletDataException {
62
63 try {
64 if (!context.addPrimaryKey(
65 CalendarPortletDataHandlerImpl.class, "deleteData")) {
66
67 CalEventLocalServiceUtil.deleteEvents(context.getGroupId());
68 }
69 return null;
70 }
71 catch (Exception e) {
72 throw new PortletDataException(e);
73 }
74 }
75
76 public String exportData(
77 PortletDataContext context, String portletId,
78 PortletPreferences preferences)
79 throws PortletDataException {
80
81 try {
82 Document doc = SAXReaderUtil.createDocument();
83
84 Element root = doc.addElement("calendar-data");
85
86 root.addAttribute("group-id", String.valueOf(context.getGroupId()));
87
88 List<CalEvent> events = CalEventUtil.findByGroupId(
89 context.getGroupId());
90
91 for (CalEvent event : events) {
92 exportEvent(context, root, event);
93 }
94
95 return doc.formattedString();
96 }
97 catch (Exception e) {
98 throw new PortletDataException(e);
99 }
100 }
101
102 public PortletDataHandlerControl[] getExportControls() {
103 return new PortletDataHandlerControl[] {_events};
104 }
105
106 public PortletDataHandlerControl[] getImportControls() {
107 return new PortletDataHandlerControl[] {_events};
108 }
109
110 public PortletPreferences importData(
111 PortletDataContext context, String portletId,
112 PortletPreferences preferences, String data)
113 throws PortletDataException {
114
115 try {
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 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.addZipEntry(path, event);
162 }
163
164 protected String getEventPath(PortletDataContext context, CalEvent event) {
165 StringBuilder sb = new StringBuilder();
166
167 sb.append(context.getPortletPath(PortletKeys.CALENDAR));
168 sb.append("/events/");
169 sb.append(event.getEventId());
170 sb.append(".xml");
171
172 return sb.toString();
173 }
174
175 protected void importEvent(PortletDataContext context, CalEvent event)
176 throws Exception {
177
178 long userId = context.getUserId(event.getUserUuid());
179
180 Date startDate = event.getStartDate();
181
182 int startDateMonth = 0;
183 int startDateDay = 0;
184 int startDateYear = 0;
185 int startDateHour = 0;
186 int startDateMinute = 0;
187
188 if (startDate != null) {
189 Calendar startCal = CalendarFactoryUtil.getCalendar();
190
191 startCal.setTime(startDate);
192
193 startDateMonth = startCal.get(Calendar.MONTH);
194 startDateDay = startCal.get(Calendar.DATE);
195 startDateYear = startCal.get(Calendar.YEAR);
196 startDateHour = startCal.get(Calendar.HOUR);
197 startDateMinute = startCal.get(Calendar.MINUTE);
198
199 if (startCal.get(Calendar.AM_PM) == Calendar.PM) {
200 startDateHour += 12;
201 }
202 }
203
204 Date endDate = event.getEndDate();
205
206 int endDateMonth = 0;
207 int endDateDay = 0;
208 int endDateYear = 0;
209
210 if (endDate != null) {
211 Calendar endCal = CalendarFactoryUtil.getCalendar();
212
213 endCal.setTime(endDate);
214
215 endDateMonth = endCal.get(Calendar.MONTH);
216 endDateDay = endCal.get(Calendar.DATE);
217 endDateYear = endCal.get(Calendar.YEAR);
218 }
219
220 ServiceContext serviceContext = new ServiceContext();
221
222 serviceContext.setAddCommunityPermissions(true);
223 serviceContext.setAddGuestPermissions(true);
224 serviceContext.setScopeGroupId(context.getGroupId());
225
226 CalEvent existingEvent = null;
227
228 if (context.getDataStrategy().equals(
229 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
230
231 existingEvent = CalEventUtil.fetchByUUID_G(
232 event.getUuid(), context.getGroupId());
233
234 if (existingEvent == null) {
235 CalEventLocalServiceUtil.addEvent(
236 event.getUuid(), userId, event.getTitle(),
237 event.getDescription(), startDateMonth, startDateDay,
238 startDateYear, startDateHour, startDateMinute, endDateMonth,
239 endDateDay, endDateYear, event.getDurationHour(),
240 event.getDurationMinute(), event.getAllDay(),
241 event.getTimeZoneSensitive(), event.getType(),
242 event.getRepeating(), event.getRecurrenceObj(),
243 event.getRemindBy(), event.getFirstReminder(),
244 event.getSecondReminder(), serviceContext);
245 }
246 else {
247 CalEventLocalServiceUtil.updateEvent(
248 userId, existingEvent.getEventId(), event.getTitle(),
249 event.getDescription(), startDateMonth, startDateDay,
250 startDateYear, startDateHour, startDateMinute, endDateMonth,
251 endDateDay, endDateYear, event.getDurationHour(),
252 event.getDurationMinute(), event.getAllDay(),
253 event.getTimeZoneSensitive(), event.getType(),
254 event.getRepeating(), event.getRecurrenceObj(),
255 event.getRemindBy(), event.getFirstReminder(),
256 event.getSecondReminder());
257 }
258 }
259 else {
260 CalEventLocalServiceUtil.addEvent(
261 userId, event.getTitle(), event.getDescription(),
262 startDateMonth, startDateDay, startDateYear, startDateHour,
263 startDateMinute, endDateMonth, endDateDay, endDateYear,
264 event.getDurationHour(), event.getDurationMinute(),
265 event.getAllDay(), event.getTimeZoneSensitive(),
266 event.getType(), event.getRepeating(), event.getRecurrenceObj(),
267 event.getRemindBy(), event.getFirstReminder(),
268 event.getSecondReminder(), serviceContext);
269 }
270 }
271
272 private static final String _NAMESPACE = "calendar";
273
274 private static final PortletDataHandlerBoolean _events =
275 new PortletDataHandlerBoolean(_NAMESPACE, "events", true, true);
276
277 }