1
14
15 package com.liferay.portlet.calendar.lar;
16
17 import com.liferay.portal.SystemException;
18 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
19 import com.liferay.portal.kernel.util.StringBundler;
20 import com.liferay.portal.kernel.xml.Document;
21 import com.liferay.portal.kernel.xml.Element;
22 import com.liferay.portal.kernel.xml.SAXReaderUtil;
23 import com.liferay.portal.lar.PortletDataContext;
24 import com.liferay.portal.lar.PortletDataException;
25 import com.liferay.portal.lar.PortletDataHandler;
26 import com.liferay.portal.lar.PortletDataHandlerBoolean;
27 import com.liferay.portal.lar.PortletDataHandlerControl;
28 import com.liferay.portal.lar.PortletDataHandlerKeys;
29 import com.liferay.portal.util.PortletKeys;
30 import com.liferay.portlet.calendar.model.CalEvent;
31 import com.liferay.portlet.calendar.service.CalEventLocalServiceUtil;
32 import com.liferay.portlet.calendar.service.persistence.CalEventUtil;
33
34 import java.util.Calendar;
35 import java.util.Date;
36 import java.util.List;
37
38 import javax.portlet.PortletPreferences;
39
40
47 public class CalendarPortletDataHandlerImpl implements PortletDataHandler {
48
49 public PortletPreferences deleteData(
50 PortletDataContext context, String portletId,
51 PortletPreferences prefs)
52 throws PortletDataException {
53
54 try {
55 if (!context.addPrimaryKey(
56 CalendarPortletDataHandlerImpl.class, "deleteData")) {
57
58 CalEventLocalServiceUtil.deleteEvents(context.getGroupId());
59 }
60 return null;
61 }
62 catch (Exception e) {
63 throw new PortletDataException(e);
64 }
65 }
66
67 public String exportData(
68 PortletDataContext context, String portletId,
69 PortletPreferences prefs)
70 throws PortletDataException {
71
72 try {
73 Document doc = SAXReaderUtil.createDocument();
74
75 Element root = doc.addElement("calendar-data");
76
77 root.addAttribute("group-id", String.valueOf(context.getGroupId()));
78
79 List<CalEvent> events = CalEventUtil.findByGroupId(
80 context.getGroupId());
81
82 for (CalEvent event : events) {
83 exportEvent(context, root, event);
84 }
85
86 return doc.formattedString();
87 }
88 catch (Exception e) {
89 throw new PortletDataException(e);
90 }
91 }
92
93 public PortletDataHandlerControl[] getExportControls() {
94 return new PortletDataHandlerControl[] {_events};
95 }
96
97 public PortletDataHandlerControl[] getImportControls() {
98 return new PortletDataHandlerControl[] {_events};
99 }
100
101 public PortletPreferences importData(
102 PortletDataContext context, String portletId,
103 PortletPreferences prefs, String data)
104 throws PortletDataException {
105
106 try {
107 Document doc = SAXReaderUtil.read(data);
108
109 Element root = doc.getRootElement();
110
111 List<Element> eventsEl = root.elements("event");
112
113 for (Element eventEl : eventsEl) {
114 String path = eventEl.attributeValue("path");
115
116 if (!context.isPathNotProcessed(path)) {
117 continue;
118 }
119
120 CalEvent event = (CalEvent)context.getZipEntryAsObject(path);
121
122 importEvent(context, event);
123 }
124
125 return null;
126 }
127 catch (Exception e) {
128 throw new PortletDataException(e);
129 }
130 }
131
132 public boolean isPublishToLiveByDefault() {
133 return false;
134 }
135
136 protected void exportEvent(
137 PortletDataContext context, Element root, CalEvent event)
138 throws SystemException {
139
140 if (!context.isWithinDateRange(event.getModifiedDate())) {
141 return;
142 }
143
144 String path = getEventPath(context, event);
145
146 if (!context.isPathNotProcessed(path)) {
147 return;
148 }
149
150 Element eventEl = root.addElement("event");
151
152 eventEl.addAttribute("path", path);
153
154 event.setUserUuid(event.getUserUuid());
155
156 context.addZipEntry(path, event);
157 }
158
159 protected String getEventPath(PortletDataContext context, CalEvent event) {
160 StringBundler sb = new StringBundler(4);
161
162 sb.append(context.getPortletPath(PortletKeys.CALENDAR));
163 sb.append("/events/");
164 sb.append(event.getEventId());
165 sb.append(".xml");
166
167 return sb.toString();
168 }
169
170 protected void importEvent(PortletDataContext context, CalEvent event)
171 throws Exception {
172
173 long userId = context.getUserId(event.getUserUuid());
174 long plid = context.getPlid();
175
176 Date startDate = event.getStartDate();
177
178 int startDateMonth = 0;
179 int startDateDay = 0;
180 int startDateYear = 0;
181 int startDateHour = 0;
182 int startDateMinute = 0;
183
184 if (startDate != null) {
185 Calendar startCal = CalendarFactoryUtil.getCalendar();
186
187 startCal.setTime(startDate);
188
189 startDateMonth = startCal.get(Calendar.MONTH);
190 startDateDay = startCal.get(Calendar.DATE);
191 startDateYear = startCal.get(Calendar.YEAR);
192 startDateHour = startCal.get(Calendar.HOUR);
193 startDateMinute = startCal.get(Calendar.MINUTE);
194
195 if (startCal.get(Calendar.AM_PM) == Calendar.PM) {
196 startDateHour += 12;
197 }
198 }
199
200 Date endDate = event.getEndDate();
201
202 int endDateMonth = 0;
203 int endDateDay = 0;
204 int endDateYear = 0;
205
206 if (endDate != null) {
207 Calendar endCal = CalendarFactoryUtil.getCalendar();
208
209 endCal.setTime(endDate);
210
211 endDateMonth = endCal.get(Calendar.MONTH);
212 endDateDay = endCal.get(Calendar.DATE);
213 endDateYear = endCal.get(Calendar.YEAR);
214 }
215
216 boolean addCommunityPermissions = true;
217 boolean addGuestPermissions = true;
218
219 CalEvent existingEvent = null;
220
221 if (context.getDataStrategy().equals(
222 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
223
224 existingEvent = CalEventUtil.fetchByUUID_G(
225 event.getUuid(), context.getGroupId());
226
227 if (existingEvent == null) {
228 CalEventLocalServiceUtil.addEvent(
229 event.getUuid(), userId, plid, event.getTitle(),
230 event.getDescription(), startDateMonth, startDateDay,
231 startDateYear, startDateHour, startDateMinute, endDateMonth,
232 endDateDay, endDateYear, event.getDurationHour(),
233 event.getDurationMinute(), event.getAllDay(),
234 event.getTimeZoneSensitive(), event.getType(),
235 event.getRepeating(), event.getRecurrenceObj(),
236 event.getRemindBy(), event.getFirstReminder(),
237 event.getSecondReminder(), addCommunityPermissions,
238 addGuestPermissions);
239 }
240 else {
241 CalEventLocalServiceUtil.updateEvent(
242 userId, existingEvent.getEventId(), 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());
251 }
252 }
253 else {
254 CalEventLocalServiceUtil.addEvent(
255 userId, plid, event.getTitle(), event.getDescription(),
256 startDateMonth, startDateDay, startDateYear, startDateHour,
257 startDateMinute, endDateMonth, endDateDay, endDateYear,
258 event.getDurationHour(), event.getDurationMinute(),
259 event.getAllDay(), event.getTimeZoneSensitive(),
260 event.getType(), event.getRepeating(), event.getRecurrenceObj(),
261 event.getRemindBy(), event.getFirstReminder(),
262 event.getSecondReminder(), addCommunityPermissions,
263 addGuestPermissions);
264 }
265 }
266
267 private static final String _NAMESPACE = "calendar";
268
269 private static final PortletDataHandlerBoolean _events =
270 new PortletDataHandlerBoolean(_NAMESPACE, "events", true, true);
271
272 }