1
22
23 package com.liferay.portlet.calendar.lar;
24
25 import com.liferay.portal.kernel.lar.PortletDataContext;
26 import com.liferay.portal.kernel.lar.PortletDataException;
27 import com.liferay.portal.kernel.lar.PortletDataHandler;
28 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
29 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
30 import com.liferay.portal.kernel.lar.PortletDataHandlerKeys;
31 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
32 import com.liferay.portal.util.PortalUtil;
33 import com.liferay.portlet.calendar.model.CalEvent;
34 import com.liferay.portlet.calendar.service.CalEventLocalServiceUtil;
35 import com.liferay.portlet.calendar.service.persistence.CalEventUtil;
36
37 import com.thoughtworks.xstream.XStream;
38
39 import java.util.Calendar;
40 import java.util.Date;
41 import java.util.Iterator;
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
57 public class CalendarPortletDataHandlerImpl implements PortletDataHandler {
58
59 public PortletPreferences deleteData(
60 PortletDataContext context, String portletId,
61 PortletPreferences prefs)
62 throws PortletDataException {
63
64 try {
65
66
68 if (!context.addPrimaryKey(
69 CalendarPortletDataHandlerImpl.class, "deleteData")) {
70
71 CalEventLocalServiceUtil.deleteEvents(context.getGroupId());
72 }
73 return null;
74 }
75 catch (Exception e) {
76 throw new PortletDataException(e);
77 }
78 }
79
80 public String exportData(
81 PortletDataContext context, String portletId,
82 PortletPreferences prefs)
83 throws PortletDataException {
84
85 try {
86 XStream xStream = new XStream();
87
88 Document doc = DocumentHelper.createDocument();
89
90 Element root = doc.addElement("calendar-data");
91
92 root.addAttribute("group-id", String.valueOf(context.getGroupId()));
93
94
96 List events = CalEventUtil.findByGroupId(context.getGroupId());
97
98 Iterator itr = events.iterator();
99
100 while (itr.hasNext()) {
101 CalEvent event = (CalEvent) itr.next();
102
103 if (context.addPrimaryKey(
104 CalEvent.class, event.getPrimaryKeyObj())) {
105
106 itr.remove();
107 }
108 else {
109 event.setUserUuid(event.getUserUuid());
110 }
111 }
112
113 String xml = xStream.toXML(events);
114
115 Element el = root.addElement("calendar-events");
116
117 Document tempDoc = PortalUtil.readDocumentFromXML(xml);
118
119 el.content().add(tempDoc.getRootElement().createCopy());
120
121 return doc.asXML();
122 }
123 catch (Exception e) {
124 throw new PortletDataException(e);
125 }
126 }
127
128 public PortletDataHandlerControl[] getExportControls()
129 throws PortletDataException {
130
131 return new PortletDataHandlerControl[] {_events};
132 }
133
134 public PortletDataHandlerControl[] getImportControls()
135 throws PortletDataException {
136
137 return new PortletDataHandlerControl[] {_events};
138 }
139
140 public PortletPreferences importData(
141 PortletDataContext context, String portletId,
142 PortletPreferences prefs, String data)
143 throws PortletDataException {
144
145 try {
146 XStream xStream = new XStream();
147
148 Document doc = PortalUtil.readDocumentFromXML(data);
149
150 Element root = doc.getRootElement();
151
152
154 Element el = root.element("calendar-events").element("list");
155
156 Document tempDoc = DocumentHelper.createDocument();
157
158 tempDoc.content().add(el.createCopy());
159
160 List events = (List) xStream.fromXML(tempDoc.asXML());
161
162 Iterator itr = events.iterator();
163
164 while (itr.hasNext()) {
165 CalEvent event = (CalEvent) itr.next();
166
167 importEvent(context, event);
168 }
169
170 return null;
171 }
172 catch (Exception e) {
173 throw new PortletDataException(e);
174 }
175 }
176
177 protected void importEvent(PortletDataContext context, CalEvent event)
178 throws Exception {
179
180 long userId = context.getUserId(event.getUserUuid());
181 long plid = context.getPlid();
182
183 Date startDate = event.getStartDate();
184
185 int startDateMonth = 0;
186 int startDateDay = 0;
187 int startDateYear = 0;
188 int startDateHour = 0;
189 int startDateMinute = 0;
190
191 if (startDate != null) {
192 Calendar startCal = CalendarFactoryUtil.getCalendar();
193
194 startCal.setTime(startDate);
195
196 startDateMonth = startCal.get(Calendar.MONTH);
197 startDateDay = startCal.get(Calendar.DATE);
198 startDateYear = startCal.get(Calendar.YEAR);
199 startDateHour = startCal.get(Calendar.HOUR);
200 startDateMinute = startCal.get(Calendar.MINUTE);
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 boolean addCommunityPermissions = true;
220 boolean addGuestPermissions = true;
221
222 CalEvent existingEvent = null;
223
224 if (context.getDataStrategy().equals(
225 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
226
227 existingEvent = CalEventUtil.fetchByUUID_G(
228 event.getUuid(), context.getGroupId());
229
230 if (existingEvent == null) {
231 CalEventLocalServiceUtil.addEvent(
232 event.getUuid(), userId, plid, event.getTitle(),
233 event.getDescription(), startDateMonth, startDateDay,
234 startDateYear, startDateHour, startDateMinute, endDateMonth,
235 endDateDay, endDateYear, event.getDurationHour(),
236 event.getDurationMinute(), event.getAllDay(),
237 event.getTimeZoneSensitive(), event.getType(),
238 event.getRepeating(), event.getRecurrenceObj(),
239 event.getRemindBy(), event.getFirstReminder(),
240 event.getSecondReminder(), addCommunityPermissions,
241 addGuestPermissions);
242 }
243 else {
244 CalEventLocalServiceUtil.updateEvent(
245 userId, existingEvent.getEventId(), event.getTitle(),
246 event.getDescription(), startDateMonth, startDateDay,
247 startDateYear, startDateHour, startDateMinute, endDateMonth,
248 endDateDay, endDateYear, event.getDurationHour(),
249 event.getDurationMinute(), event.getAllDay(),
250 event.getTimeZoneSensitive(), event.getType(),
251 event.getRepeating(), event.getRecurrenceObj(),
252 event.getRemindBy(), event.getFirstReminder(),
253 event.getSecondReminder());
254 }
255 }
256 else {
257 CalEventLocalServiceUtil.addEvent(
258 userId, plid, event.getTitle(), event.getDescription(),
259 startDateMonth, startDateDay, startDateYear, startDateHour,
260 startDateMinute, endDateMonth, endDateDay, endDateYear,
261 event.getDurationHour(), event.getDurationMinute(),
262 event.getAllDay(), event.getTimeZoneSensitive(),
263 event.getType(), event.getRepeating(), event.getRecurrenceObj(),
264 event.getRemindBy(), event.getFirstReminder(),
265 event.getSecondReminder(), addCommunityPermissions,
266 addGuestPermissions);
267 }
268 }
269
270 private static final String _NAMESPACE = "calendar";
271
272 private static final PortletDataHandlerBoolean _events =
273 new PortletDataHandlerBoolean(_NAMESPACE, "events", true, true);
274
275 }