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.addPortletPermissions(PollsPermission.RESOURCE_NAME);
088    
089                    Element rootElement = addExportDataRootElement(portletDataContext);
090    
091                    rootElement.addAttribute(
092                            "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
093    
094                    if (portletDataContext.getBooleanParameter(
095                                    PollsPortletDataHandler.NAMESPACE, "questions")) {
096    
097                            ActionableDynamicQuery questionActionableDynamicQuery =
098                                    new PollsQuestionExportActionableDynamicQuery(
099                                            portletDataContext);
100    
101                            questionActionableDynamicQuery.performActions();
102    
103                            ActionableDynamicQuery choiceActionableDynamicQuery =
104                                    new PollsChoiceExportActionableDynamicQuery(portletDataContext);
105    
106                            choiceActionableDynamicQuery.performActions();
107    
108                            if (portletDataContext.getBooleanParameter(
109                                            PollsPortletDataHandler.NAMESPACE, "votes")) {
110    
111                                    ActionableDynamicQuery voteActionableDynamicQuery =
112                                            new PollsVoteExportActionableDynamicQuery(
113                                                    portletDataContext);
114    
115                                    voteActionableDynamicQuery.performActions();
116                            }
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                            PollsPermission.RESOURCE_NAME);
130    
131                    Element questionsElement = portletDataContext.getImportDataGroupElement(
132                            PollsQuestion.class);
133    
134                    if (portletDataContext.getBooleanParameter(
135                                    PollsPortletDataHandler.NAMESPACE, "questions")) {
136    
137                            List<Element> questionElements = questionsElement.elements();
138    
139                            for (Element questionElement : questionElements) {
140                                    StagedModelDataHandlerUtil.importStagedModel(
141                                            portletDataContext, questionElement);
142                            }
143    
144                            Element choicesElement =
145                                    portletDataContext.getImportDataGroupElement(PollsChoice.class);
146    
147                            List<Element> choiceElements = choicesElement.elements();
148    
149                            for (Element choiceElement : choiceElements) {
150                                    StagedModelDataHandlerUtil.importStagedModel(
151                                            portletDataContext, choiceElement);
152                            }
153                    }
154    
155                    if (portletDataContext.getBooleanParameter(NAMESPACE, "votes")) {
156                            Element votesElement = portletDataContext.getImportDataGroupElement(
157                                    PollsVote.class);
158    
159                            List<Element> voteElements = votesElement.elements();
160    
161                            for (Element voteElement : voteElements) {
162                                    StagedModelDataHandlerUtil.importStagedModel(
163                                            portletDataContext, voteElement);
164                            }
165                    }
166    
167                    return null;
168            }
169    
170            @Override
171            protected void doPrepareManifestSummary(
172                            PortletDataContext portletDataContext,
173                            PortletPreferences portletPreferences)
174                    throws Exception {
175    
176                    ActionableDynamicQuery choiceActionableDynamicQuery =
177                            new PollsChoiceExportActionableDynamicQuery(portletDataContext);
178    
179                    choiceActionableDynamicQuery.performCount();
180    
181                    ActionableDynamicQuery questionActionableDynamicQuery =
182                            new PollsQuestionExportActionableDynamicQuery(portletDataContext);
183    
184                    questionActionableDynamicQuery.performCount();
185    
186                    ActionableDynamicQuery voteActionableDynamicQuery =
187                            new PollsVoteExportActionableDynamicQuery(portletDataContext);
188    
189                    voteActionableDynamicQuery.performCount();
190            }
191    
192    }