1
22
23 package com.liferay.portlet.calendar.lar;
24
25 import com.liferay.portal.SystemException;
26 import com.liferay.portal.kernel.lar.PortletDataContext;
27 import com.liferay.portal.kernel.lar.PortletDataException;
28 import com.liferay.portal.kernel.lar.PortletDataHandler;
29 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
30 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
31 import com.liferay.portal.kernel.lar.PortletDataHandlerKeys;
32 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
33 import com.liferay.portal.util.DocumentUtil;
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 import com.liferay.util.xml.XMLFormatter;
39
40 import java.util.Calendar;
41 import java.util.Date;
42 import java.util.List;
43
44 import javax.portlet.PortletPreferences;
45
46 import org.dom4j.Document;
47 import org.dom4j.DocumentHelper;
48 import org.dom4j.Element;
49
50
58 public class CalendarPortletDataHandlerImpl implements PortletDataHandler {
59
60 public PortletPreferences deleteData(
61 PortletDataContext context, String portletId,
62 PortletPreferences prefs)
63 throws PortletDataException {
64
65 try {
66 if (!context.addPrimaryKey(
67 CalendarPortletDataHandlerImpl.class, "deleteData")) {
68
69 CalEventLocalServiceUtil.deleteEvents(context.getGroupId());
70 }
71 return null;
72 }
73 catch (Exception e) {
74 throw new PortletDataException(e);
75 }
76 }
77
78 public String exportData(
79 PortletDataContext context, String portletId,
80 PortletPreferences prefs)
81 throws PortletDataException {
82
83 try {
84 Document doc = DocumentHelper.createDocument();
85
86 Element root = doc.addElement("calendar-data");
87
88 root.addAttribute("group-id", String.valueOf(context.getGroupId()));
89
90 List<CalEvent> events = CalEventUtil.findByGroupId(
91 context.getGroupId());
92
93 for (CalEvent event : events) {
94 exportEvent(context, root, event);
95 }
96
97 return XMLFormatter.toString(doc);
98 }
99 catch (Exception e) {
100 throw new PortletDataException(e);
101 }
102 }
103
104 public PortletDataHandlerControl[] getExportControls() {
105 return new PortletDataHandlerControl[] {_events};
106 }
107
108 public PortletDataHandlerControl[] getImportControls() {
109 return new PortletDataHandlerControl[] {_events};
110 }
111
112 public PortletPreferences importData(
113 PortletDataContext context, String portletId,
114 PortletPreferences prefs, String data)
115 throws PortletDataException {
116
117 try {
118 Document doc = DocumentUtil.readDocumentFromXML(data);
119
120 Element root = doc.getRootElement();
121
122 List<Element> eventsEl = root.elements("event");
123
124 for (Element eventEl : eventsEl) {
125 String path = eventEl.attributeValue("path");
126
127 if (context.isPathNotProcessed(path)) {
128 CalEvent event = (CalEvent)context.getZipEntryAsObject(
129 path);
130
131 importEvent(context, event);
132 }
133 }
134
135 return null;
136 }
137 catch (Exception e) {
138 throw new PortletDataException(e);
139 }
140 }
141
142 public boolean isPublishToLiveByDefault() {
143 return false;
144 }
145
146 protected void exportEvent(
147 PortletDataContext context, Element root, CalEvent event)
148 throws SystemException {
149
150 if (!context.isWithinDateRange(event.getModifiedDate())) {
151 return;
152 }
153
154 String path = getEventPath(context, event);
155
156 Element eventEl = root.addElement("event");
157
158 eventEl.addAttribute("path", path);
159
160 if (context.isPathNotProcessed(path)) {
161 event.setUserUuid(event.getUserUuid());
162
163 context.addZipEntry(path, event);
164 }
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 }