com.liferay.portlet.calendar.lar.CalendarPortletDataHandlerImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.portlet.calendar.lar.CalendarPortletDataHandlerImpl.java

Source

/**
 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.portlet.calendar.lar;

import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.lar.BasePortletDataHandler;
import com.liferay.portal.kernel.lar.PortletDataContext;
import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
import com.liferay.portal.kernel.util.CalendarFactoryUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.xml.Document;
import com.liferay.portal.kernel.xml.Element;
import com.liferay.portal.kernel.xml.SAXReaderUtil;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.util.PortletKeys;
import com.liferay.portlet.calendar.model.CalEvent;
import com.liferay.portlet.calendar.service.CalEventLocalServiceUtil;
import com.liferay.portlet.calendar.service.persistence.CalEventUtil;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.portlet.PortletPreferences;

/**
 * @author Bruno Farache
 * @author Raymond Aug
 */
public class CalendarPortletDataHandlerImpl extends BasePortletDataHandler {

    @Override
    public PortletDataHandlerControl[] getExportControls() {
        return new PortletDataHandlerControl[] { _events, _categories, _comments, _ratings, _tags };
    }

    @Override
    public PortletDataHandlerControl[] getImportControls() {
        return new PortletDataHandlerControl[] { _events, _categories, _comments, _ratings, _tags };
    }

    @Override
    public boolean isAlwaysExportable() {
        return _ALWAYS_EXPORTABLE;
    }

    @Override
    public boolean isPublishToLiveByDefault() {
        return _PUBLISH_TO_LIVE_BY_DEFAULT;
    }

    @Override
    protected PortletPreferences doDeleteData(PortletDataContext portletDataContext, String portletId,
            PortletPreferences portletPreferences) throws Exception {

        if (!portletDataContext.addPrimaryKey(CalendarPortletDataHandlerImpl.class, "deleteData")) {

            CalEventLocalServiceUtil.deleteEvents(portletDataContext.getScopeGroupId());
        }

        return null;
    }

    @Override
    protected String doExportData(PortletDataContext portletDataContext, String portletId,
            PortletPreferences portletPreferences) throws Exception {

        portletDataContext.addPermissions("com.liferay.portlet.calendar", portletDataContext.getScopeGroupId());

        Document document = SAXReaderUtil.createDocument();

        Element rootElement = document.addElement("calendar-data");

        rootElement.addAttribute("group-id", String.valueOf(portletDataContext.getScopeGroupId()));

        List<CalEvent> events = CalEventUtil.findByGroupId(portletDataContext.getScopeGroupId());

        for (CalEvent event : events) {
            exportEvent(portletDataContext, rootElement, event);
        }

        return document.formattedString();
    }

    @Override
    protected PortletPreferences doImportData(PortletDataContext portletDataContext, String portletId,
            PortletPreferences portletPreferences, String data) throws Exception {

        portletDataContext.importPermissions("com.liferay.portlet.calendar", portletDataContext.getSourceGroupId(),
                portletDataContext.getScopeGroupId());

        Document document = SAXReaderUtil.read(data);

        Element rootElement = document.getRootElement();

        for (Element eventElement : rootElement.elements("event")) {
            String path = eventElement.attributeValue("path");

            if (!portletDataContext.isPathNotProcessed(path)) {
                continue;
            }

            CalEvent event = (CalEvent) portletDataContext.getZipEntryAsObject(path);

            importEvent(portletDataContext, eventElement, event);
        }

        return null;
    }

    protected void exportEvent(PortletDataContext portletDataContext, Element rootElement, CalEvent event)
            throws PortalException, SystemException {

        if (!portletDataContext.isWithinDateRange(event.getModifiedDate())) {
            return;
        }

        String path = getEventPath(portletDataContext, event);

        if (!portletDataContext.isPathNotProcessed(path)) {
            return;
        }

        Element eventElement = rootElement.addElement("event");

        portletDataContext.addClassedModel(eventElement, path, event, _NAMESPACE);
    }

    protected String getEventPath(PortletDataContext portletDataContext, CalEvent event) {

        StringBundler sb = new StringBundler(4);

        sb.append(portletDataContext.getPortletPath(PortletKeys.CALENDAR));
        sb.append("/events/");
        sb.append(event.getEventId());
        sb.append(".xml");

        return sb.toString();
    }

    protected void importEvent(PortletDataContext portletDataContext, Element eventElement, CalEvent event)
            throws Exception {

        long userId = portletDataContext.getUserId(event.getUserUuid());

        Date startDate = event.getStartDate();

        int startDateMonth = 0;
        int startDateDay = 0;
        int startDateYear = 0;
        int startDateHour = 0;
        int startDateMinute = 0;

        if (startDate != null) {
            Calendar startCal = CalendarFactoryUtil.getCalendar();

            startCal.setTime(startDate);

            startDateMonth = startCal.get(Calendar.MONTH);
            startDateDay = startCal.get(Calendar.DATE);
            startDateYear = startCal.get(Calendar.YEAR);
            startDateHour = startCal.get(Calendar.HOUR);
            startDateMinute = startCal.get(Calendar.MINUTE);

            if (startCal.get(Calendar.AM_PM) == Calendar.PM) {
                startDateHour += 12;
            }
        }

        Date endDate = event.getEndDate();

        int endDateMonth = 0;
        int endDateDay = 0;
        int endDateYear = 0;

        if (endDate != null) {
            Calendar endCal = CalendarFactoryUtil.getCalendar();

            endCal.setTime(endDate);

            endDateMonth = endCal.get(Calendar.MONTH);
            endDateDay = endCal.get(Calendar.DATE);
            endDateYear = endCal.get(Calendar.YEAR);
        }

        ServiceContext serviceContext = portletDataContext.createServiceContext(eventElement, event, _NAMESPACE);

        CalEvent importedEvent = null;

        if (portletDataContext.isDataStrategyMirror()) {
            CalEvent existingEvent = CalEventUtil.fetchByUUID_G(event.getUuid(),
                    portletDataContext.getScopeGroupId());

            if (existingEvent == null) {
                serviceContext.setUuid(event.getUuid());

                importedEvent = CalEventLocalServiceUtil.addEvent(userId, event.getTitle(), event.getDescription(),
                        event.getLocation(), startDateMonth, startDateDay, startDateYear, startDateHour,
                        startDateMinute, endDateMonth, endDateDay, endDateYear, event.getDurationHour(),
                        event.getDurationMinute(), event.getAllDay(), event.getTimeZoneSensitive(), event.getType(),
                        event.getRepeating(), event.getRecurrenceObj(), event.getRemindBy(),
                        event.getFirstReminder(), event.getSecondReminder(), serviceContext);
            } else {
                importedEvent = CalEventLocalServiceUtil.updateEvent(userId, existingEvent.getEventId(),
                        event.getTitle(), event.getDescription(), event.getLocation(), startDateMonth, startDateDay,
                        startDateYear, startDateHour, startDateMinute, endDateMonth, endDateDay, endDateYear,
                        event.getDurationHour(), event.getDurationMinute(), event.getAllDay(),
                        event.getTimeZoneSensitive(), event.getType(), event.getRepeating(),
                        event.getRecurrenceObj(), event.getRemindBy(), event.getFirstReminder(),
                        event.getSecondReminder(), serviceContext);
            }
        } else {
            importedEvent = CalEventLocalServiceUtil.addEvent(userId, event.getTitle(), event.getDescription(),
                    event.getLocation(), startDateMonth, startDateDay, startDateYear, startDateHour,
                    startDateMinute, endDateMonth, endDateDay, endDateYear, event.getDurationHour(),
                    event.getDurationMinute(), event.getAllDay(), event.getTimeZoneSensitive(), event.getType(),
                    event.getRepeating(), event.getRecurrenceObj(), event.getRemindBy(), event.getFirstReminder(),
                    event.getSecondReminder(), serviceContext);
        }

        portletDataContext.importClassedModel(event, importedEvent, _NAMESPACE);
    }

    private static final boolean _ALWAYS_EXPORTABLE = true;

    private static final String _NAMESPACE = "calendar";

    private static final boolean _PUBLISH_TO_LIVE_BY_DEFAULT = true;

    private static PortletDataHandlerBoolean _categories = new PortletDataHandlerBoolean(_NAMESPACE, "categories");

    private static PortletDataHandlerBoolean _comments = new PortletDataHandlerBoolean(_NAMESPACE, "comments");

    private static PortletDataHandlerBoolean _events = new PortletDataHandlerBoolean(_NAMESPACE, "events", true,
            true);

    private static PortletDataHandlerBoolean _ratings = new PortletDataHandlerBoolean(_NAMESPACE, "ratings");

    private static PortletDataHandlerBoolean _tags = new PortletDataHandlerBoolean(_NAMESPACE, "tags");

}