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