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.addPortletPermissions(MDRPermission.RESOURCE_NAME);
093    
094                    Element rootElement = addExportDataRootElement(portletDataContext);
095    
096                    if (portletDataContext.getBooleanParameter(NAMESPACE, "rules")) {
097                            ActionableDynamicQuery rulesActionableDynamicQuery =
098                                    new MDRRuleExportActionableDynamicQuery(portletDataContext);
099    
100                            rulesActionableDynamicQuery.performActions();
101                    }
102    
103                    if (portletDataContext.getBooleanParameter(NAMESPACE, "actions")) {
104                            ActionableDynamicQuery actionsActionableDynamicQuery =
105                                    new MDRActionExportActionableDynamicQuery(portletDataContext) {
106    
107                                    @Override
108                                    protected StagedModelType getStagedModelType() {
109                                            return new StagedModelType(
110                                                    PortalUtil.getClassNameId(MDRAction.class),
111                                                    StagedModelType.REFERRER_CLASS_NAME_ID_ALL);
112                                    }
113    
114                            };
115    
116                            actionsActionableDynamicQuery.performActions();
117                    }
118    
119                    return getExportDataRootElementString(rootElement);
120            }
121    
122            @Override
123            protected PortletPreferences doImportData(
124                            PortletDataContext portletDataContext, String portletId,
125                            PortletPreferences portletPreferences, String data)
126                    throws Exception {
127    
128                    portletDataContext.importPortletPermissions(
129                            MDRPermission.RESOURCE_NAME);
130    
131                    if (portletDataContext.getBooleanParameter(NAMESPACE, "rules")) {
132                            Element rulesElement = portletDataContext.getImportDataGroupElement(
133                                    MDRRule.class);
134    
135                            List<Element> ruleElements = rulesElement.elements();
136    
137                            for (Element ruleElement : ruleElements) {
138                                    StagedModelDataHandlerUtil.importStagedModel(
139                                            portletDataContext, ruleElement);
140                            }
141                    }
142    
143                    if (portletDataContext.getBooleanParameter(NAMESPACE, "actions")) {
144                            Element actionsElement =
145                                    portletDataContext.getImportDataGroupElement(MDRAction.class);
146    
147                            List<Element> actionElements = actionsElement.elements();
148    
149                            for (Element actionElement : actionElements) {
150                                    StagedModelDataHandlerUtil.importStagedModel(
151                                            portletDataContext, actionElement);
152                            }
153                    }
154    
155                    return null;
156            }
157    
158            @Override
159            protected void doPrepareManifestSummary(
160                            PortletDataContext portletDataContext,
161                            PortletPreferences portletPreferences)
162                    throws Exception {
163    
164                    ActionableDynamicQuery actionsActionableDynamicQuery =
165                            new MDRActionExportActionableDynamicQuery(portletDataContext) {
166    
167                            @Override
168                            protected StagedModelType getStagedModelType() {
169                                    return new StagedModelType(
170                                            MDRAction.class.getName(), Layout.class.getName());
171                            }
172    
173                    };
174    
175                    actionsActionableDynamicQuery.performCount();
176    
177                    ActionableDynamicQuery rulesActionableDynamicQuery =
178                            new MDRRuleExportActionableDynamicQuery(portletDataContext);
179    
180                    rulesActionableDynamicQuery.performCount();
181    
182                    ActionableDynamicQuery ruleGroupsActionableDynamicQuery =
183                            new MDRRuleGroupExportActionableDynamicQuery(portletDataContext);
184    
185                    ruleGroupsActionableDynamicQuery.performCount();
186    
187                    ActionableDynamicQuery ruleGroupInstancesActionableDynamicQuery =
188                            new MDRRuleGroupInstanceExportActionableDynamicQuery(
189                                    portletDataContext) {
190    
191                                    @Override
192                                    protected StagedModelType getStagedModelType() {
193                                            return new StagedModelType(
194                                                    MDRRuleGroupInstance.class.getName(),
195                                                    Layout.class.getName());
196                                    }
197                            };
198    
199                    ruleGroupInstancesActionableDynamicQuery.performCount();
200            }
201    
202    }