1
14
15 package com.liferay.portlet.calendar.lar;
16
17 import com.liferay.portal.PortalException;
18 import com.liferay.portal.SystemException;
19 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
20 import com.liferay.portal.kernel.util.StringBundler;
21 import com.liferay.portal.kernel.xml.Document;
22 import com.liferay.portal.kernel.xml.Element;
23 import com.liferay.portal.kernel.xml.SAXReaderUtil;
24 import com.liferay.portal.lar.BasePortletDataHandler;
25 import com.liferay.portal.lar.PortletDataContext;
26 import com.liferay.portal.lar.PortletDataException;
27 import com.liferay.portal.lar.PortletDataHandlerBoolean;
28 import com.liferay.portal.lar.PortletDataHandlerControl;
29 import com.liferay.portal.lar.PortletDataHandlerKeys;
30 import com.liferay.portal.service.ServiceContext;
31 import com.liferay.portal.util.PortletKeys;
32 import com.liferay.portlet.calendar.model.CalEvent;
33 import com.liferay.portlet.calendar.service.CalEventLocalServiceUtil;
34 import com.liferay.portlet.calendar.service.persistence.CalEventUtil;
35
36 import java.util.Calendar;
37 import java.util.Date;
38 import java.util.List;
39
40 import javax.portlet.PortletPreferences;
41
42
49 public class CalendarPortletDataHandlerImpl extends BasePortletDataHandler {
50
51 public PortletPreferences deleteData(
52 PortletDataContext context, String portletId,
53 PortletPreferences preferences)
54 throws PortletDataException {
55
56 try {
57 if (!context.addPrimaryKey(
58 CalendarPortletDataHandlerImpl.class, "deleteData")) {
59
60 CalEventLocalServiceUtil.deleteEvents(
61 context.getScopeGroupId());
62 }
63 return null;
64 }
65 catch (Exception e) {
66 throw new PortletDataException(e);
67 }
68 }
69
70 public String exportData(
71 PortletDataContext context, String portletId,
72 PortletPreferences preferences)
73 throws PortletDataException {
74
75 try {
76 context.addPermissions(
77 "com.liferay.portlet.calendar", context.getScopeGroupId());
78
79 Document doc = SAXReaderUtil.createDocument();
80
81 Element root = doc.addElement("calendar-data");
82
83 root.addAttribute(
84 "group-id", String.valueOf(context.getScopeGroupId()));
85
86 List<CalEvent> events = CalEventUtil.findByGroupId(
87 context.getScopeGroupId());
88
89 for (CalEvent event : events) {
90 exportEvent(context, root, event);
91 }
92
93 return doc.formattedString();
94 }
95 catch (Exception e) {
96 throw new PortletDataException(e);
97 }
98 }
99
100 public PortletDataHandlerControl[] getExportControls() {
101 return new PortletDataHandlerControl[] {_events};
102 }
103
104 public PortletDataHandlerControl[] getImportControls() {
105 return new PortletDataHandlerControl[] {_events};
106 }
107
108 public PortletPreferences importData(
109 PortletDataContext context, String portletId,
110 PortletPreferences preferences, String data)
111 throws PortletDataException {
112
113 try {
114 context.importPermissions(
115 "com.liferay.portlet.calendar", context.getSourceGroupId(),
116 context.getScopeGroupId());
117
118 Document doc = SAXReaderUtil.read(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 continue;
129 }
130
131 CalEvent event = (CalEvent)context.getZipEntryAsObject(path);
132
133 importEvent(context, event);
134 }
135
136 return null;
137 }
138 catch (Exception e) {
139 throw new PortletDataException(e);
140 }
141 }
142
143 protected void exportEvent(
144 PortletDataContext context, Element root, CalEvent event)
145 throws PortalException, SystemException {
146
147 if (!context.isWithinDateRange(event.getModifiedDate())) {
148 return;
149 }
150
151 String path = getEventPath(context, event);
152
153 if (!context.isPathNotProcessed(path)) {
154 return;
155 }
156
157 Element eventEl = root.addElement("event");
158
159 eventEl.addAttribute("path", path);
160
161 event.setUserUuid(event.getUserUuid());
162
163 context.addPermissions(CalEvent.class, event.getEventId());
164
165 context.addZipEntry(path, event);
166 }
167
168 protected String getEventPath(PortletDataContext context, CalEvent event) {
169 StringBundler sb = new StringBundler(4);
170
171 sb.append(context.getPortletPath(PortletKeys.CALENDAR));
172 sb.append("/events/");
173 sb.append(event.getEventId());
174 sb.append(".xml");
175
176 return sb.toString();
177 }
178
179 protected void importEvent(PortletDataContext context, CalEvent event)
180 throws Exception {
181
182 long userId = context.getUserId(event.getUserUuid());
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 ServiceContext serviceContext = new ServiceContext();
225
226 serviceContext.setAddCommunityPermissions(true);
227 serviceContext.setAddGuestPermissions(true);
228 serviceContext.setScopeGroupId(context.getScopeGroupId());
229
230 CalEvent existingEvent = null;
231
232 if (context.getDataStrategy().equals(
233 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
234
235 existingEvent = CalEventUtil.fetchByUUID_G(
236 event.getUuid(), context.getScopeGroupId());
237
238 if (existingEvent == null) {
239 existingEvent = CalEventLocalServiceUtil.addEvent(
240 event.getUuid(), userId, 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 else {
251 existingEvent = CalEventLocalServiceUtil.updateEvent(
252 userId, existingEvent.getEventId(), event.getTitle(),
253 event.getDescription(), startDateMonth, startDateDay,
254 startDateYear, startDateHour, startDateMinute, endDateMonth,
255 endDateDay, endDateYear, event.getDurationHour(),
256 event.getDurationMinute(), event.getAllDay(),
257 event.getTimeZoneSensitive(), event.getType(),
258 event.getRepeating(), event.getRecurrenceObj(),
259 event.getRemindBy(), event.getFirstReminder(),
260 event.getSecondReminder(), serviceContext);
261 }
262 }
263 else {
264 existingEvent = CalEventLocalServiceUtil.addEvent(
265 userId, event.getTitle(), event.getDescription(),
266 startDateMonth, startDateDay, startDateYear, startDateHour,
267 startDateMinute, endDateMonth, endDateDay, endDateYear,
268 event.getDurationHour(), event.getDurationMinute(),
269 event.getAllDay(), event.getTimeZoneSensitive(),
270 event.getType(), event.getRepeating(), event.getRecurrenceObj(),
271 event.getRemindBy(), event.getFirstReminder(),
272 event.getSecondReminder(), serviceContext);
273 }
274
275 context.importPermissions(
276 CalEvent.class, event.getEventId(), existingEvent.getEventId());
277 }
278
279 private static final String _NAMESPACE = "calendar";
280
281 private static final PortletDataHandlerBoolean _events =
282 new PortletDataHandlerBoolean(_NAMESPACE, "events", true, true);
283
284 }