001    /**
002     * Copyright (c) 2000-present 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.dao.orm.ExportActionableDynamicQuery;
019    import com.liferay.portal.kernel.xml.Element;
020    import com.liferay.portal.model.Layout;
021    import com.liferay.portal.util.PortalUtil;
022    import com.liferay.portal.util.PropsValues;
023    import com.liferay.portlet.exportimport.lar.BasePortletDataHandler;
024    import com.liferay.portlet.exportimport.lar.PortletDataContext;
025    import com.liferay.portlet.exportimport.lar.PortletDataHandlerBoolean;
026    import com.liferay.portlet.exportimport.lar.StagedModelDataHandlerUtil;
027    import com.liferay.portlet.exportimport.lar.StagedModelType;
028    import com.liferay.portlet.exportimport.xstream.XStreamAliasRegistryUtil;
029    import com.liferay.portlet.mobiledevicerules.model.MDRAction;
030    import com.liferay.portlet.mobiledevicerules.model.MDRRule;
031    import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroup;
032    import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
033    import com.liferay.portlet.mobiledevicerules.model.impl.MDRActionImpl;
034    import com.liferay.portlet.mobiledevicerules.model.impl.MDRRuleGroupImpl;
035    import com.liferay.portlet.mobiledevicerules.model.impl.MDRRuleGroupInstanceImpl;
036    import com.liferay.portlet.mobiledevicerules.model.impl.MDRRuleImpl;
037    import com.liferay.portlet.mobiledevicerules.service.MDRActionLocalServiceUtil;
038    import com.liferay.portlet.mobiledevicerules.service.MDRRuleGroupInstanceLocalServiceUtil;
039    import com.liferay.portlet.mobiledevicerules.service.MDRRuleGroupLocalServiceUtil;
040    import com.liferay.portlet.mobiledevicerules.service.MDRRuleLocalServiceUtil;
041    import com.liferay.portlet.mobiledevicerules.service.permission.MDRPermission;
042    
043    import java.util.List;
044    
045    import javax.portlet.PortletPreferences;
046    
047    /**
048     * @author Michael C. Han
049     * @author Brian Wing Shun Chan
050     * @author Mate Thurzo
051     */
052    public class MDRPortletDataHandler extends BasePortletDataHandler {
053    
054            public static final String NAMESPACE = "mobile_device_rules";
055    
056            public MDRPortletDataHandler() {
057                    setDeletionSystemEventStagedModelTypes(
058                            new StagedModelType(MDRAction.class, Layout.class),
059                            new StagedModelType(MDRRule.class),
060                            new StagedModelType(MDRRuleGroup.class),
061                            new StagedModelType(MDRRuleGroupInstance.class, Layout.class));
062                    setExportControls(
063                            new PortletDataHandlerBoolean(
064                                    NAMESPACE, "rules", true, false, null, MDRRule.class.getName()),
065                            new PortletDataHandlerBoolean(
066                                    NAMESPACE, "actions", true, false, null,
067                                    MDRAction.class.getName(), Layout.class.getName()));
068                    setImportControls(getExportControls());
069                    setPublishToLiveByDefault(
070                            PropsValues.MOBILE_DEVICE_RULES_PUBLISH_TO_LIVE_BY_DEFAULT);
071    
072                    XStreamAliasRegistryUtil.register(MDRActionImpl.class, "MDRAction");
073                    XStreamAliasRegistryUtil.register(MDRRuleImpl.class, "MDRRule");
074                    XStreamAliasRegistryUtil.register(
075                            MDRRuleGroupImpl.class, "MDRRuleGroup");
076                    XStreamAliasRegistryUtil.register(
077                            MDRRuleGroupInstanceImpl.class, "MDRRuleGroupInstance");
078            }
079    
080            @Override
081            protected PortletPreferences doDeleteData(
082                            PortletDataContext portletDataContext, String portletId,
083                            PortletPreferences portletPreferences)
084                    throws Exception {
085    
086                    if (portletDataContext.addPrimaryKey(
087                                    MDRPortletDataHandler.class, "deleteData")) {
088    
089                            return portletPreferences;
090                    }
091    
092                    MDRRuleGroupLocalServiceUtil.deleteRuleGroups(
093                            portletDataContext.getGroupId());
094    
095                    return portletPreferences;
096            }
097    
098            @Override
099            protected String doExportData(
100                            final PortletDataContext portletDataContext, String portletId,
101                            PortletPreferences portletPreferences)
102                    throws Exception {
103    
104                    portletDataContext.addPortletPermissions(MDRPermission.RESOURCE_NAME);
105    
106                    Element rootElement = addExportDataRootElement(portletDataContext);
107    
108                    if (portletDataContext.getBooleanParameter(NAMESPACE, "rules")) {
109                            ActionableDynamicQuery rulesActionableDynamicQuery =
110                                    MDRRuleLocalServiceUtil.getExportActionableDynamicQuery(
111                                            portletDataContext);
112    
113                            rulesActionableDynamicQuery.performActions();
114                    }
115    
116                    if (portletDataContext.getBooleanParameter(NAMESPACE, "actions")) {
117                            ExportActionableDynamicQuery actionsExportActionableDynamicQuery =
118                                    MDRActionLocalServiceUtil.getExportActionableDynamicQuery(
119                                            portletDataContext);
120    
121                            actionsExportActionableDynamicQuery.setStagedModelType(
122                                    new StagedModelType(
123                                            PortalUtil.getClassNameId(MDRAction.class),
124                                            StagedModelType.REFERRER_CLASS_NAME_ID_ALL));
125    
126                            actionsExportActionableDynamicQuery.performActions();
127                    }
128    
129                    return getExportDataRootElementString(rootElement);
130            }
131    
132            @Override
133            protected PortletPreferences doImportData(
134                            PortletDataContext portletDataContext, String portletId,
135                            PortletPreferences portletPreferences, String data)
136                    throws Exception {
137    
138                    portletDataContext.importPortletPermissions(
139                            MDRPermission.RESOURCE_NAME);
140    
141                    if (portletDataContext.getBooleanParameter(NAMESPACE, "rules")) {
142                            Element rulesElement = portletDataContext.getImportDataGroupElement(
143                                    MDRRule.class);
144    
145                            List<Element> ruleElements = rulesElement.elements();
146    
147                            for (Element ruleElement : ruleElements) {
148                                    StagedModelDataHandlerUtil.importStagedModel(
149                                            portletDataContext, ruleElement);
150                            }
151                    }
152    
153                    if (portletDataContext.getBooleanParameter(NAMESPACE, "actions")) {
154                            Element actionsElement =
155                                    portletDataContext.getImportDataGroupElement(MDRAction.class);
156    
157                            List<Element> actionElements = actionsElement.elements();
158    
159                            for (Element actionElement : actionElements) {
160                                    StagedModelDataHandlerUtil.importStagedModel(
161                                            portletDataContext, actionElement);
162                            }
163                    }
164    
165                    return null;
166            }
167    
168            @Override
169            protected void doPrepareManifestSummary(
170                            PortletDataContext portletDataContext,
171                            PortletPreferences portletPreferences)
172                    throws Exception {
173    
174                    ExportActionableDynamicQuery actionsExportActionableDynamicQuery =
175                            MDRActionLocalServiceUtil.getExportActionableDynamicQuery(
176                                    portletDataContext);
177    
178                    actionsExportActionableDynamicQuery.setStagedModelType(
179                            new StagedModelType(
180                                    MDRAction.class.getName(), Layout.class.getName()));
181    
182                    actionsExportActionableDynamicQuery.performCount();
183    
184                    ActionableDynamicQuery rulesActionableDynamicQuery =
185                            MDRRuleLocalServiceUtil.getExportActionableDynamicQuery(
186                                    portletDataContext);
187    
188                    rulesActionableDynamicQuery.performCount();
189    
190                    ActionableDynamicQuery ruleGroupsActionableDynamicQuery =
191                            MDRRuleGroupLocalServiceUtil.getExportActionableDynamicQuery(
192                                    portletDataContext);
193    
194                    ruleGroupsActionableDynamicQuery.performCount();
195    
196                    ExportActionableDynamicQuery
197                            ruleGroupInstancesExportActionableDynamicQuery =
198                                    MDRRuleGroupInstanceLocalServiceUtil.
199                                            getExportActionableDynamicQuery(portletDataContext);
200    
201                    ruleGroupInstancesExportActionableDynamicQuery.setStagedModelType(
202                            new StagedModelType(
203                                    MDRRuleGroupInstance.class.getName(), Layout.class.getName()));
204    
205                    ruleGroupInstancesExportActionableDynamicQuery.performCount();
206            }
207    
208    }