com.liferay.exportimport.lar.DeletionSystemEventExporter.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.exportimport.lar.DeletionSystemEventExporter.java

Source

/**
 * Copyright (c) 2000-present 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.exportimport.lar;

import aQute.bnd.annotation.ProviderType;

import com.liferay.exportimport.kernel.lar.ExportImportPathUtil;
import com.liferay.exportimport.kernel.lar.ManifestSummary;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.kernel.lar.PortletDataHandlerKeys;
import com.liferay.exportimport.kernel.lar.StagedModelType;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.Conjunction;
import com.liferay.portal.kernel.dao.orm.Disjunction;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.SystemEvent;
import com.liferay.portal.kernel.model.SystemEventConstants;
import com.liferay.portal.kernel.service.SystemEventLocalServiceUtil;
import com.liferay.portal.kernel.util.MapUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.xml.Document;
import com.liferay.portal.kernel.xml.Element;
import com.liferay.portal.kernel.xml.SAXReaderUtil;

import java.util.Date;
import java.util.Set;

/**
 * @author Zsolt Berentey
 */
@ProviderType
public class DeletionSystemEventExporter {

    public static DeletionSystemEventExporter getInstance() {
        return _instance;
    }

    public void exportDeletionSystemEvents(PortletDataContext portletDataContext) throws Exception {

        Document document = SAXReaderUtil.createDocument();

        Element rootElement = document.addElement("deletion-system-events");

        Set<StagedModelType> deletionSystemEventStagedModelTypes = portletDataContext
                .getDeletionSystemEventStagedModelTypes();

        if (!deletionSystemEventStagedModelTypes.isEmpty()
                && MapUtil.getBoolean(portletDataContext.getParameterMap(), PortletDataHandlerKeys.DELETIONS)) {

            doExportDeletionSystemEvents(portletDataContext, rootElement, deletionSystemEventStagedModelTypes);
        }

        portletDataContext.addZipEntry(
                ExportImportPathUtil.getRootPath(portletDataContext) + "/deletion-system-events.xml",
                document.formattedString());
    }

    protected void addCreateDateProperty(PortletDataContext portletDataContext, DynamicQuery dynamicQuery) {

        if (!portletDataContext.hasDateRange()) {
            return;
        }

        Property createDateProperty = PropertyFactoryUtil.forName("createDate");

        Date startDate = portletDataContext.getStartDate();

        dynamicQuery.add(createDateProperty.ge(startDate));

        Date endDate = portletDataContext.getEndDate();

        dynamicQuery.add(createDateProperty.le(endDate));
    }

    protected void doAddCriteria(PortletDataContext portletDataContext,
            Set<StagedModelType> deletionSystemEventStagedModelTypes, DynamicQuery dynamicQuery) {

        Disjunction disjunction = RestrictionsFactoryUtil.disjunction();

        Property groupIdProperty = PropertyFactoryUtil.forName("groupId");

        disjunction.add(groupIdProperty.eq(0L));
        disjunction.add(groupIdProperty.eq(portletDataContext.getScopeGroupId()));

        dynamicQuery.add(disjunction);

        if (!deletionSystemEventStagedModelTypes.isEmpty()) {
            Property classNameIdProperty = PropertyFactoryUtil.forName("classNameId");

            Property referrerClassNameIdProperty = PropertyFactoryUtil.forName("referrerClassNameId");

            Disjunction referrerClassNameIdDisjunction = RestrictionsFactoryUtil.disjunction();

            for (StagedModelType stagedModelType : deletionSystemEventStagedModelTypes) {

                Conjunction conjunction = RestrictionsFactoryUtil.conjunction();

                conjunction.add(classNameIdProperty.eq(stagedModelType.getClassNameId()));

                if (stagedModelType.getReferrerClassNameId() >= 0) {
                    conjunction.add(referrerClassNameIdProperty.eq(stagedModelType.getReferrerClassNameId()));
                }

                referrerClassNameIdDisjunction.add(conjunction);
            }

            dynamicQuery.add(referrerClassNameIdDisjunction);
        }

        Property typeProperty = PropertyFactoryUtil.forName("type");

        dynamicQuery.add(typeProperty.eq(SystemEventConstants.TYPE_DELETE));

        addCreateDateProperty(portletDataContext, dynamicQuery);
    }

    protected void doExportDeletionSystemEvents(final PortletDataContext portletDataContext,
            final Element rootElement, final Set<StagedModelType> deletionSystemEventStagedModelTypes)
            throws PortalException {

        ActionableDynamicQuery actionableDynamicQuery = SystemEventLocalServiceUtil.getActionableDynamicQuery();

        actionableDynamicQuery.setAddCriteriaMethod(new ActionableDynamicQuery.AddCriteriaMethod() {

            @Override
            public void addCriteria(DynamicQuery dynamicQuery) {
                doAddCriteria(portletDataContext, deletionSystemEventStagedModelTypes, dynamicQuery);
            }

        });
        actionableDynamicQuery.setCompanyId(portletDataContext.getCompanyId());
        actionableDynamicQuery
                .setPerformActionMethod(new ActionableDynamicQuery.PerformActionMethod<SystemEvent>() {

                    @Override
                    public void performAction(SystemEvent systemEvent) {
                        exportDeletionSystemEvent(portletDataContext, systemEvent, rootElement);
                    }

                });

        actionableDynamicQuery.performActions();
    }

    protected void exportDeletionSystemEvent(PortletDataContext portletDataContext, SystemEvent systemEvent,
            Element deletionSystemEventsElement) {

        Element deletionSystemEventElement = deletionSystemEventsElement.addElement("deletion-system-event");

        deletionSystemEventElement.addAttribute("class-name",
                PortalUtil.getClassName(systemEvent.getClassNameId()));
        deletionSystemEventElement.addAttribute("extra-data", systemEvent.getExtraData());
        deletionSystemEventElement.addAttribute("group-id", String.valueOf(systemEvent.getGroupId()));

        if (systemEvent.getReferrerClassNameId() > 0) {
            deletionSystemEventElement.addAttribute("referrer-class-name",
                    PortalUtil.getClassName(systemEvent.getReferrerClassNameId()));
        }

        deletionSystemEventElement.addAttribute("uuid", systemEvent.getClassUuid());

        ManifestSummary manifestSummary = portletDataContext.getManifestSummary();

        manifestSummary.incrementModelDeletionCount(
                new StagedModelType(systemEvent.getClassNameId(), systemEvent.getReferrerClassNameId()));
    }

    private DeletionSystemEventExporter() {
    }

    private static final DeletionSystemEventExporter _instance = new DeletionSystemEventExporter();

}