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.polls.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.PortletDataHandlerControl;
022    import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
023    import com.liferay.portal.kernel.lar.StagedModelType;
024    import com.liferay.portal.kernel.xml.Element;
025    import com.liferay.portlet.polls.model.PollsChoice;
026    import com.liferay.portlet.polls.model.PollsQuestion;
027    import com.liferay.portlet.polls.model.PollsVote;
028    import com.liferay.portlet.polls.service.PollsQuestionLocalServiceUtil;
029    import com.liferay.portlet.polls.service.permission.PollsPermission;
030    import com.liferay.portlet.polls.service.persistence.PollsChoiceExportActionableDynamicQuery;
031    import com.liferay.portlet.polls.service.persistence.PollsQuestionExportActionableDynamicQuery;
032    import com.liferay.portlet.polls.service.persistence.PollsVoteExportActionableDynamicQuery;
033    
034    import java.util.List;
035    
036    import javax.portlet.PortletPreferences;
037    
038    /**
039     * @author Bruno Farache
040     * @author Marcellus Tavares
041     * @author Mate Thurzo
042     */
043    public class PollsPortletDataHandler extends BasePortletDataHandler {
044    
045            public static final String NAMESPACE = "polls";
046    
047            public PollsPortletDataHandler() {
048                    setDataLocalized(true);
049                    setDeletionSystemEventStagedModelTypes(
050                            new StagedModelType(PollsQuestion.class));
051                    setExportControls(
052                            new PortletDataHandlerBoolean(
053                                    NAMESPACE, "questions", true, false,
054                                    new PortletDataHandlerControl[] {
055                                            new PortletDataHandlerBoolean(
056                                                    NAMESPACE, "votes", true, false, null,
057                                                    PollsVote.class.getName())
058                                    },
059                                    PollsQuestion.class.getName()));
060                    setImportControls(getExportControls());
061            }
062    
063            @Override
064            protected PortletPreferences doDeleteData(
065                            PortletDataContext portletDataContext, String portletId,
066                            PortletPreferences portletPreferences)
067                    throws Exception {
068    
069                    if (portletDataContext.addPrimaryKey(
070                                    PollsPortletDataHandler.class, "deleteData")) {
071    
072                            return portletPreferences;
073                    }
074    
075                    PollsQuestionLocalServiceUtil.deleteQuestions(
076                            portletDataContext.getScopeGroupId());
077    
078                    return portletPreferences;
079            }
080    
081            @Override
082            protected String doExportData(
083                            final PortletDataContext portletDataContext, String portletId,
084                            PortletPreferences portletPreferences)
085                    throws Exception {
086    
087                    portletDataContext.addPermissions(
088                            PollsPermission.RESOURCE_NAME,
089                            portletDataContext.getScopeGroupId());
090    
091                    Element rootElement = addExportDataRootElement(portletDataContext);
092    
093                    rootElement.addAttribute(
094                            "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
095    
096                    if (portletDataContext.getBooleanParameter(
097                                    PollsPortletDataHandler.NAMESPACE, "questions")) {
098    
099                            ActionableDynamicQuery questionActionableDynamicQuery =
100                                    new PollsQuestionExportActionableDynamicQuery(
101                                            portletDataContext);
102    
103                            questionActionableDynamicQuery.performActions();
104    
105                            ActionableDynamicQuery choiceActionableDynamicQuery =
106                                    new PollsChoiceExportActionableDynamicQuery(portletDataContext);
107    
108                            choiceActionableDynamicQuery.performActions();
109    
110                            if (portletDataContext.getBooleanParameter(
111                                            PollsPortletDataHandler.NAMESPACE, "votes")) {
112    
113                                    ActionableDynamicQuery voteActionableDynamicQuery =
114                                            new PollsVoteExportActionableDynamicQuery(
115                                                    portletDataContext);
116    
117                                    voteActionableDynamicQuery.performActions();
118                            }
119                    }
120    
121                    return getExportDataRootElementString(rootElement);
122            }
123    
124            @Override
125            protected PortletPreferences doImportData(
126                            PortletDataContext portletDataContext, String portletId,
127                            PortletPreferences portletPreferences, String data)
128                    throws Exception {
129    
130                    portletDataContext.importPermissions(
131                            PollsPermission.RESOURCE_NAME,
132                            portletDataContext.getSourceGroupId(),
133                            portletDataContext.getScopeGroupId());
134    
135                    Element questionsElement = portletDataContext.getImportDataGroupElement(
136                            PollsQuestion.class);
137    
138                    if (portletDataContext.getBooleanParameter(
139                                    PollsPortletDataHandler.NAMESPACE, "questions")) {
140    
141                            List<Element> questionElements = questionsElement.elements();
142    
143                            for (Element questionElement : questionElements) {
144                                    StagedModelDataHandlerUtil.importStagedModel(
145                                            portletDataContext, questionElement);
146                            }
147    
148                            Element choicesElement =
149                                    portletDataContext.getImportDataGroupElement(PollsChoice.class);
150    
151                            List<Element> choiceElements = choicesElement.elements();
152    
153                            for (Element choiceElement : choiceElements) {
154                                    StagedModelDataHandlerUtil.importStagedModel(
155                                            portletDataContext, choiceElement);
156                            }
157                    }
158    
159                    if (portletDataContext.getBooleanParameter(NAMESPACE, "votes")) {
160                            Element votesElement = portletDataContext.getImportDataGroupElement(
161                                    PollsVote.class);
162    
163                            List<Element> voteElements = votesElement.elements();
164    
165                            for (Element voteElement : voteElements) {
166                                    StagedModelDataHandlerUtil.importStagedModel(
167                                            portletDataContext, voteElement);
168                            }
169                    }
170    
171                    return null;
172            }
173    
174            @Override
175            protected void doPrepareManifestSummary(
176                            PortletDataContext portletDataContext,
177                            PortletPreferences portletPreferences)
178                    throws Exception {
179    
180                    ActionableDynamicQuery choiceActionableDynamicQuery =
181                            new PollsChoiceExportActionableDynamicQuery(portletDataContext);
182    
183                    choiceActionableDynamicQuery.performCount();
184    
185                    ActionableDynamicQuery questionActionableDynamicQuery =
186                            new PollsQuestionExportActionableDynamicQuery(portletDataContext);
187    
188                    questionActionableDynamicQuery.performCount();
189    
190                    ActionableDynamicQuery voteActionableDynamicQuery =
191                            new PollsVoteExportActionableDynamicQuery(portletDataContext);
192    
193                    voteActionableDynamicQuery.performCount();
194            }
195    
196    }