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.dao.orm.DynamicQuery;
019    import com.liferay.portal.kernel.exception.PortalException;
020    import com.liferay.portal.kernel.lar.BasePortletDataHandler;
021    import com.liferay.portal.kernel.lar.PortletDataContext;
022    import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
023    import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
024    import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
025    import com.liferay.portal.kernel.xml.Element;
026    import com.liferay.portlet.mobiledevicerules.model.MDRAction;
027    import com.liferay.portlet.mobiledevicerules.model.MDRRule;
028    import com.liferay.portlet.mobiledevicerules.service.MDRRuleGroupLocalServiceUtil;
029    import com.liferay.portlet.mobiledevicerules.service.persistence.MDRActionActionableDynamicQuery;
030    import com.liferay.portlet.mobiledevicerules.service.persistence.MDRRuleActionableDynamicQuery;
031    
032    import java.util.List;
033    
034    import javax.portlet.PortletPreferences;
035    
036    /**
037     * @author Michael C. Han
038     * @author Brian Wing Shun Chan
039     * @author Mate Thurzo
040     */
041    public class MDRPortletDataHandler extends BasePortletDataHandler {
042    
043            public static final String NAMESPACE = "mobile_device_rules";
044    
045            public MDRPortletDataHandler() {
046                    setAlwaysExportable(true);
047                    setAlwaysStaged(true);
048                    setExportControls(
049                            new PortletDataHandlerBoolean(NAMESPACE, "rules", true, true),
050                            new PortletDataHandlerBoolean(NAMESPACE, "actions", true, true));
051                    setImportControls(new PortletDataHandlerControl[0]);
052                    setPublishToLiveByDefault(true);
053            }
054    
055            @Override
056            protected PortletPreferences doDeleteData(
057                            PortletDataContext portletDataContext, String portletId,
058                            PortletPreferences portletPreferences)
059                    throws Exception {
060    
061                    if (portletDataContext.addPrimaryKey(
062                                    MDRPortletDataHandler.class, "deleteData")) {
063    
064                            return portletPreferences;
065                    }
066    
067                    MDRRuleGroupLocalServiceUtil.deleteRuleGroups(
068                            portletDataContext.getGroupId());
069    
070                    return portletPreferences;
071            }
072    
073            @Override
074            protected String doExportData(
075                            final PortletDataContext portletDataContext, String portletId,
076                            PortletPreferences portletPreferences)
077                    throws Exception {
078    
079                    portletDataContext.addPermissions(
080                            "com.liferay.portlet.mobiledevicerules",
081                            portletDataContext.getScopeGroupId());
082    
083                    Element rootElement = addExportDataRootElement(portletDataContext);
084    
085                    ActionableDynamicQuery rulesActionableDynamicQuery =
086                            new MDRRuleActionableDynamicQuery() {
087    
088                            @Override
089                            protected void addCriteria(DynamicQuery dynamicQuery) {
090                                    portletDataContext.addDateRangeCriteria(
091                                            dynamicQuery, "modifiedDate");
092                            }
093    
094                            @Override
095                            protected void performAction(Object object) throws PortalException {
096                                    MDRRule rule = (MDRRule)object;
097    
098                                    StagedModelDataHandlerUtil.exportStagedModel(
099                                            portletDataContext, rule);
100                            }
101    
102                    };
103    
104                    rulesActionableDynamicQuery.setGroupId(
105                            portletDataContext.getScopeGroupId());
106    
107                    rulesActionableDynamicQuery.performActions();
108    
109                    ActionableDynamicQuery actionsActionableDynamicQuery =
110                            new MDRActionActionableDynamicQuery() {
111    
112                            @Override
113                            protected void addCriteria(DynamicQuery dynamicQuery) {
114                                    portletDataContext.addDateRangeCriteria(
115                                            dynamicQuery, "modifiedDate");
116                            }
117    
118                            @Override
119                            protected void performAction(Object object) throws PortalException {
120                                    MDRAction action = (MDRAction)object;
121    
122                                    StagedModelDataHandlerUtil.exportStagedModel(
123                                            portletDataContext, action);
124                            }
125    
126                    };
127    
128                    actionsActionableDynamicQuery.setGroupId(
129                            portletDataContext.getScopeGroupId());
130    
131                    actionsActionableDynamicQuery.performActions();
132    
133                    return getExportDataRootElementString(rootElement);
134            }
135    
136            @Override
137            protected PortletPreferences doImportData(
138                            PortletDataContext portletDataContext, String portletId,
139                            PortletPreferences portletPreferences, String data)
140                    throws Exception {
141    
142                    portletDataContext.importPermissions(
143                            "com.liferay.portlet.mobiledevicerules",
144                            portletDataContext.getSourceGroupId(),
145                            portletDataContext.getScopeGroupId());
146    
147                    Element rulesElement = portletDataContext.getImportDataGroupElement(
148                            MDRRule.class);
149    
150                    List<Element> ruleElements = rulesElement.elements();
151    
152                    for (Element ruleElement : ruleElements) {
153                            StagedModelDataHandlerUtil.importStagedModel(
154                                    portletDataContext, ruleElement);
155                    }
156    
157                    Element actionsElement = portletDataContext.getImportDataGroupElement(
158                            MDRAction.class);
159    
160                    List<Element> actionElements = actionsElement.elements();
161    
162                    for (Element actionElement : actionElements) {
163                            StagedModelDataHandlerUtil.importStagedModel(
164                                    portletDataContext, actionElement);
165                    }
166    
167                    return null;
168            }
169    
170    }