001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.mobiledevicerules.lar;
016    
017    import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018    import com.liferay.portal.kernel.lar.BasePortletDataHandler;
019    import com.liferay.portal.kernel.lar.PortletDataContext;
020    import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
021    import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
022    import com.liferay.portal.kernel.lar.StagedModelType;
023    import com.liferay.portal.kernel.xml.Element;
024    import com.liferay.portal.model.Layout;
025    import com.liferay.portal.util.PortalUtil;
026    import com.liferay.portal.util.PropsValues;
027    import com.liferay.portlet.mobiledevicerules.model.MDRAction;
028    import com.liferay.portlet.mobiledevicerules.model.MDRRule;
029    import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroup;
030    import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
031    import com.liferay.portlet.mobiledevicerules.service.MDRRuleGroupLocalServiceUtil;
032    import com.liferay.portlet.mobiledevicerules.service.permission.MDRPermission;
033    import com.liferay.portlet.mobiledevicerules.service.persistence.MDRActionExportActionableDynamicQuery;
034    import com.liferay.portlet.mobiledevicerules.service.persistence.MDRRuleExportActionableDynamicQuery;
035    import com.liferay.portlet.mobiledevicerules.service.persistence.MDRRuleGroupExportActionableDynamicQuery;
036    import com.liferay.portlet.mobiledevicerules.service.persistence.MDRRuleGroupInstanceExportActionableDynamicQuery;
037    
038    import java.util.List;
039    
040    import javax.portlet.PortletPreferences;
041    
042    /**
043     * @author Michael C. Han
044     * @author Brian Wing Shun Chan
045     * @author Mate Thurzo
046     */
047    public class MDRPortletDataHandler extends BasePortletDataHandler {
048    
049            public static final String NAMESPACE = "mobile_device_rules";
050    
051            public MDRPortletDataHandler() {
052                    setDeletionSystemEventStagedModelTypes(
053                            new StagedModelType(MDRAction.class, Layout.class),
054                            new StagedModelType(MDRRule.class),
055                            new StagedModelType(MDRRuleGroup.class),
056                            new StagedModelType(MDRRuleGroupInstance.class, Layout.class));
057                    setExportControls(
058                            new PortletDataHandlerBoolean(
059                                    NAMESPACE, "rules", true, false, null, MDRRule.class.getName()),
060                            new PortletDataHandlerBoolean(
061                                    NAMESPACE, "actions", true, false, null,
062                                    MDRAction.class.getName(), Layout.class.getName()));
063                    setImportControls(getExportControls());
064                    setPublishToLiveByDefault(
065                            PropsValues.MOBILE_DEVICE_RULES_PUBLISH_TO_LIVE_BY_DEFAULT);
066            }
067    
068            @Override
069            protected PortletPreferences doDeleteData(
070                            PortletDataContext portletDataContext, String portletId,
071                            PortletPreferences portletPreferences)
072                    throws Exception {
073    
074                    if (portletDataContext.addPrimaryKey(
075                                    MDRPortletDataHandler.class, "deleteData")) {
076    
077                            return portletPreferences;
078                    }
079    
080                    MDRRuleGroupLocalServiceUtil.deleteRuleGroups(
081                            portletDataContext.getGroupId());
082    
083                    return portletPreferences;
084            }
085    
086            @Override
087            protected String doExportData(
088                            final PortletDataContext portletDataContext, String portletId,
089                            PortletPreferences portletPreferences)
090                    throws Exception {
091    
092                    portletDataContext.addPermissions(
093                            MDRPermission.RESOURCE_NAME, portletDataContext.getScopeGroupId());
094    
095                    Element rootElement = addExportDataRootElement(portletDataContext);
096    
097                    if (portletDataContext.getBooleanParameter(NAMESPACE, "rules")) {
098                            ActionableDynamicQuery rulesActionableDynamicQuery =
099                                    new MDRRuleExportActionableDynamicQuery(portletDataContext);
100    
101                            rulesActionableDynamicQuery.performActions();
102                    }
103    
104                    if (portletDataContext.getBooleanParameter(NAMESPACE, "actions")) {
105                            ActionableDynamicQuery actionsActionableDynamicQuery =
106                                    new MDRActionExportActionableDynamicQuery(portletDataContext) {
107    
108                                    @Override
109                                    protected StagedModelType getStagedModelType() {
110                                            return new StagedModelType(
111                                                    PortalUtil.getClassNameId(MDRAction.class),
112                                                    StagedModelType.REFERRER_CLASS_NAME_ID_ALL);
113                                    }
114    
115                            };
116    
117                            actionsActionableDynamicQuery.performActions();
118                    }
119    
120                    return getExportDataRootElementString(rootElement);
121            }
122    
123            @Override
124            protected PortletPreferences doImportData(
125                            PortletDataContext portletDataContext, String portletId,
126                            PortletPreferences portletPreferences, String data)
127                    throws Exception {
128    
129                    portletDataContext.importPermissions(
130                            MDRPermission.RESOURCE_NAME, portletDataContext.getSourceGroupId(),
131                            portletDataContext.getScopeGroupId());
132    
133                    if (portletDataContext.getBooleanParameter(NAMESPACE, "rules")) {
134                            Element rulesElement = portletDataContext.getImportDataGroupElement(
135                                    MDRRule.class);
136    
137                            List<Element> ruleElements = rulesElement.elements();
138    
139                            for (Element ruleElement : ruleElements) {
140                                    StagedModelDataHandlerUtil.importStagedModel(
141                                            portletDataContext, ruleElement);
142                            }
143                    }
144    
145                    if (portletDataContext.getBooleanParameter(NAMESPACE, "actions")) {
146                            Element actionsElement =
147                                    portletDataContext.getImportDataGroupElement(MDRAction.class);
148    
149                            List<Element> actionElements = actionsElement.elements();
150    
151                            for (Element actionElement : actionElements) {
152                                    StagedModelDataHandlerUtil.importStagedModel(
153                                            portletDataContext, actionElement);
154                            }
155                    }
156    
157                    return null;
158            }
159    
160            @Override
161            protected void doPrepareManifestSummary(
162                            PortletDataContext portletDataContext,
163                            PortletPreferences portletPreferences)
164                    throws Exception {
165    
166                    ActionableDynamicQuery actionsActionableDynamicQuery =
167                            new MDRActionExportActionableDynamicQuery(portletDataContext) {
168    
169                            @Override
170                            protected StagedModelType getStagedModelType() {
171                                    return new StagedModelType(
172                                            MDRAction.class.getName(), Layout.class.getName());
173                            }
174    
175                    };
176    
177                    actionsActionableDynamicQuery.performCount();
178    
179                    ActionableDynamicQuery rulesActionableDynamicQuery =
180                            new MDRRuleExportActionableDynamicQuery(portletDataContext);
181    
182                    rulesActionableDynamicQuery.performCount();
183    
184                    ActionableDynamicQuery ruleGroupsActionableDynamicQuery =
185                            new MDRRuleGroupExportActionableDynamicQuery(portletDataContext);
186    
187                    ruleGroupsActionableDynamicQuery.performCount();
188    
189                    ActionableDynamicQuery ruleGroupInstancesActionableDynamicQuery =
190                            new MDRRuleGroupInstanceExportActionableDynamicQuery(
191                                    portletDataContext) {
192    
193                                    @Override
194                                    protected StagedModelType getStagedModelType() {
195                                            return new StagedModelType(
196                                                    MDRRuleGroupInstance.class.getName(),
197                                                    Layout.class.getName());
198                                    }
199                            };
200    
201                    ruleGroupInstancesActionableDynamicQuery.performCount();
202            }
203    
204    }