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.DocumentUtil;
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<CalEvent> events = CalEventUtil.findByGroupId(
97 context.getGroupId());
98
99 Iterator<CalEvent> itr = events.iterator();
100
101 while (itr.hasNext()) {
102 CalEvent event = itr.next();
103
104 if (context.addPrimaryKey(
105 CalEvent.class, event.getPrimaryKeyObj())) {
106
107 itr.remove();
108 }
109 else {
110 event.setUserUuid(event.getUserUuid());
111 }
112 }
113
114 String xml = xStream.toXML(events);
115
116 Element el = root.addElement("calendar-events");
117
118 Document tempDoc = DocumentUtil.readDocumentFromXML(xml);
119
120 el.content().add(tempDoc.getRootElement().createCopy());
121
122 return doc.asXML();
123 }
124 catch (Exception e) {
125 throw new PortletDataException(e);
126 }
127 }
128
129 public PortletDataHandlerControl[] getExportControls()
130 throws PortletDataException {
131
132 return new PortletDataHandlerControl[] {_events};
133 }
134
135 public PortletDataHandlerControl[] getImportControls()
136 throws PortletDataException {
137
138 return new PortletDataHandlerControl[] {_events};
139 }
140
141 public PortletPreferences importData(
142 PortletDataContext context, String portletId,
143 PortletPreferences prefs, String data)
144 throws PortletDataException {
145
146 try {
147 XStream xStream = new XStream();
148
149 Document doc = DocumentUtil.readDocumentFromXML(data);
150
151 Element root = doc.getRootElement();
152
153
155 Element el = root.element("calendar-events").element("list");
156
157 Document tempDoc = DocumentHelper.createDocument();
158
159 tempDoc.content().add(el.createCopy());
160
161 List<CalEvent> events = (List<CalEvent>)xStream.fromXML(
162 tempDoc.asXML());
163
164 Iterator<CalEvent> itr = events.iterator();
165
166 while (itr.hasNext()) {
167 CalEvent event = itr.next();
168
169 importEvent(context, event);
170 }
171
172 return null;
173 }
174 catch (Exception e) {
175 throw new PortletDataException(e);
176 }
177 }
178
179 public boolean isPublishToLiveByDefault() {
180 return false;
181 }
182
183 protected void importEvent(PortletDataContext context, CalEvent event)
184 throws Exception {
185
186 long userId = context.getUserId(event.getUserUuid());
187 long plid = context.getPlid();
188
189 Date startDate = event.getStartDate();
190
191 int startDateMonth = 0;
192 int startDateDay = 0;
193 int startDateYear = 0;
194 int startDateHour = 0;
195 int startDateMinute = 0;
196
197 if (startDate != null) {
198 Calendar startCal = CalendarFactoryUtil.getCalendar();
199
200 startCal.setTime(startDate);
201
202 startDateMonth = startCal.get(Calendar.MONTH);
203 startDateDay = startCal.get(Calendar.DATE);
204 startDateYear = startCal.get(Calendar.YEAR);
205 startDateHour = startCal.get(Calendar.HOUR);
206 startDateMinute = startCal.get(Calendar.MINUTE);
207
208 if (startCal.get(Calendar.AM_PM) == Calendar.PM) {
209 startDateHour += 12;
210 }
211 }
212
213 Date endDate = event.getEndDate();
214
215 int endDateMonth = 0;
216 int endDateDay = 0;
217 int endDateYear = 0;
218
219 if (endDate != null) {
220 Calendar endCal = CalendarFactoryUtil.getCalendar();
221
222 endCal.setTime(endDate);
223
224 endDateMonth = endCal.get(Calendar.MONTH);
225 endDateDay = endCal.get(Calendar.DATE);
226 endDateYear = endCal.get(Calendar.YEAR);
227 }
228
229 boolean addCommunityPermissions = true;
230 boolean addGuestPermissions = true;
231
232 CalEvent existingEvent = null;
233
234 if (context.getDataStrategy().equals(
235 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
236
237 existingEvent = CalEventUtil.fetchByUUID_G(
238 event.getUuid(), context.getGroupId());
239
240 if (existingEvent == null) {
241 CalEventLocalServiceUtil.addEvent(
242 event.getUuid(), userId, plid, event.getTitle(),
243 event.getDescription(), startDateMonth, startDateDay,
244 startDateYear, startDateHour, startDateMinute, endDateMonth,
245 endDateDay, endDateYear, event.getDurationHour(),
246 event.getDurationMinute(), event.getAllDay(),
247 event.getTimeZoneSensitive(), event.getType(),
248 event.getRepeating(), event.getRecurrenceObj(),
249 event.getRemindBy(), event.getFirstReminder(),
250 event.getSecondReminder(), addCommunityPermissions,
251 addGuestPermissions);
252 }
253 else {
254 CalEventLocalServiceUtil.updateEvent(
255 userId, existingEvent.getEventId(), event.getTitle(),
256 event.getDescription(), startDateMonth, startDateDay,
257 startDateYear, startDateHour, startDateMinute, endDateMonth,
258 endDateDay, endDateYear, event.getDurationHour(),
259 event.getDurationMinute(), event.getAllDay(),
260 event.getTimeZoneSensitive(), event.getType(),
261 event.getRepeating(), event.getRecurrenceObj(),
262 event.getRemindBy(), event.getFirstReminder(),
263 event.getSecondReminder());
264 }
265 }
266 else {
267 CalEventLocalServiceUtil.addEvent(
268 userId, plid, event.getTitle(), event.getDescription(),
269 startDateMonth, startDateDay, startDateYear, startDateHour,
270 startDateMinute, endDateMonth, endDateDay, endDateYear,
271 event.getDurationHour(), event.getDurationMinute(),
272 event.getAllDay(), event.getTimeZoneSensitive(),
273 event.getType(), event.getRepeating(), event.getRecurrenceObj(),
274 event.getRemindBy(), event.getFirstReminder(),
275 event.getSecondReminder(), addCommunityPermissions,
276 addGuestPermissions);
277 }
278 }
279
280 private static final String _NAMESPACE = "calendar";
281
282 private static final PortletDataHandlerBoolean _events =
283 new PortletDataHandlerBoolean(_NAMESPACE, "events", true, true);
284
285 }