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.messageboards.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.util.PropsValues;
025    import com.liferay.portlet.messageboards.model.MBBan;
026    import com.liferay.portlet.messageboards.model.MBCategory;
027    import com.liferay.portlet.messageboards.model.MBCategoryConstants;
028    import com.liferay.portlet.messageboards.model.MBMessage;
029    import com.liferay.portlet.messageboards.model.MBThreadFlag;
030    import com.liferay.portlet.messageboards.service.MBBanLocalServiceUtil;
031    import com.liferay.portlet.messageboards.service.MBCategoryLocalServiceUtil;
032    import com.liferay.portlet.messageboards.service.MBStatsUserLocalServiceUtil;
033    import com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil;
034    import com.liferay.portlet.messageboards.service.permission.MBPermission;
035    import com.liferay.portlet.messageboards.service.persistence.MBBanExportActionableDynamicQuery;
036    import com.liferay.portlet.messageboards.service.persistence.MBCategoryExportActionableDynamicQuery;
037    import com.liferay.portlet.messageboards.service.persistence.MBMessageExportActionableDynamicQuery;
038    import com.liferay.portlet.messageboards.service.persistence.MBThreadFlagExportActionableDynamicQuery;
039    
040    import java.util.List;
041    
042    import javax.portlet.PortletPreferences;
043    
044    /**
045     * @author Bruno Farache
046     * @author Raymond Aug??
047     * @author Daniel Kocsis
048     */
049    public class MBPortletDataHandler extends BasePortletDataHandler {
050    
051            public static final String NAMESPACE = "message_boards";
052    
053            public MBPortletDataHandler() {
054                    setDeletionSystemEventStagedModelTypes(
055                            new StagedModelType(MBBan.class),
056                            new StagedModelType(MBCategory.class),
057                            new StagedModelType(MBMessage.class),
058                            new StagedModelType(MBThreadFlag.class));
059                    setExportControls(
060                            new PortletDataHandlerBoolean(
061                                    NAMESPACE, "messages", true, false, null,
062                                    MBMessage.class.getName()),
063                            new PortletDataHandlerBoolean(
064                                    NAMESPACE, "thread-flags", true, false, null,
065                                    MBThreadFlag.class.getName()),
066                            new PortletDataHandlerBoolean(
067                                    NAMESPACE, "user-bans", true, false, null,
068                                    MBBan.class.getName()));
069                    setImportControls(getExportControls());
070                    setPublishToLiveByDefault(
071                            PropsValues.MESSAGE_BOARDS_PUBLISH_TO_LIVE_BY_DEFAULT);
072            }
073    
074            @Override
075            protected PortletPreferences doDeleteData(
076                            PortletDataContext portletDataContext, String portletId,
077                            PortletPreferences portletPreferences)
078                    throws Exception {
079    
080                    if (portletDataContext.addPrimaryKey(
081                                    MBPortletDataHandler.class, "deleteData")) {
082    
083                            return portletPreferences;
084                    }
085    
086                    MBBanLocalServiceUtil.deleteBansByGroupId(
087                            portletDataContext.getScopeGroupId());
088    
089                    MBCategoryLocalServiceUtil.deleteCategories(
090                            portletDataContext.getScopeGroupId());
091    
092                    MBStatsUserLocalServiceUtil.deleteStatsUsersByGroupId(
093                            portletDataContext.getScopeGroupId());
094    
095                    MBThreadLocalServiceUtil.deleteThreads(
096                            portletDataContext.getScopeGroupId(),
097                            MBCategoryConstants.DEFAULT_PARENT_CATEGORY_ID);
098    
099                    return portletPreferences;
100            }
101    
102            @Override
103            protected String doExportData(
104                            final PortletDataContext portletDataContext, String portletId,
105                            PortletPreferences portletPreferences)
106                    throws Exception {
107    
108                    portletDataContext.addPortletPermissions(MBPermission.RESOURCE_NAME);
109    
110                    Element rootElement = addExportDataRootElement(portletDataContext);
111    
112                    rootElement.addAttribute(
113                            "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
114    
115                    if (portletDataContext.getBooleanParameter(NAMESPACE, "messages")) {
116                            ActionableDynamicQuery categoryActionableDynamicQuery =
117                                    new MBCategoryExportActionableDynamicQuery(portletDataContext);
118    
119                            categoryActionableDynamicQuery.performActions();
120    
121                            ActionableDynamicQuery messageActionableDynamicQuery =
122                                    new MBMessageExportActionableDynamicQuery(portletDataContext);
123    
124                            messageActionableDynamicQuery.performActions();
125                    }
126    
127                    if (portletDataContext.getBooleanParameter(NAMESPACE, "thread-flags")) {
128                            ActionableDynamicQuery threadFlagActionableDynamicQuery =
129                                    new MBThreadFlagExportActionableDynamicQuery(
130                                            portletDataContext);
131    
132                            threadFlagActionableDynamicQuery.performActions();
133                    }
134    
135                    if (portletDataContext.getBooleanParameter(NAMESPACE, "user-bans")) {
136                            ActionableDynamicQuery banActionableDynamicQuery =
137                                    new MBBanExportActionableDynamicQuery(portletDataContext);
138    
139                            banActionableDynamicQuery.performActions();
140                    }
141    
142                    return getExportDataRootElementString(rootElement);
143            }
144    
145            @Override
146            protected PortletPreferences doImportData(
147                            PortletDataContext portletDataContext, String portletId,
148                            PortletPreferences portletPreferences, String data)
149                    throws Exception {
150    
151                    portletDataContext.importPortletPermissions(MBPermission.RESOURCE_NAME);
152    
153                    if (portletDataContext.getBooleanParameter(NAMESPACE, "messages")) {
154                            Element categoriesElement =
155                                    portletDataContext.getImportDataGroupElement(MBCategory.class);
156    
157                            List<Element> categoryElements = categoriesElement.elements();
158    
159                            for (Element categoryElement : categoryElements) {
160                                    StagedModelDataHandlerUtil.importStagedModel(
161                                            portletDataContext, categoryElement);
162                            }
163    
164                            Element messagesElement =
165                                    portletDataContext.getImportDataGroupElement(MBMessage.class);
166    
167                            List<Element> messageElements = messagesElement.elements();
168    
169                            for (Element messageElement : messageElements) {
170                                    StagedModelDataHandlerUtil.importStagedModel(
171                                            portletDataContext, messageElement);
172                            }
173                    }
174    
175                    if (portletDataContext.getBooleanParameter(NAMESPACE, "thread-flags")) {
176                            Element threadFlagsElement =
177                                    portletDataContext.getImportDataGroupElement(
178                                            MBThreadFlag.class);
179    
180                            List<Element> threadFlagElements = threadFlagsElement.elements();
181    
182                            for (Element threadFlagElement : threadFlagElements) {
183                                    StagedModelDataHandlerUtil.importStagedModel(
184                                            portletDataContext, threadFlagElement);
185                            }
186                    }
187    
188                    if (portletDataContext.getBooleanParameter(NAMESPACE, "user-bans")) {
189                            Element userBansElement =
190                                    portletDataContext.getImportDataGroupElement(MBBan.class);
191    
192                            List<Element> userBanElements = userBansElement.elements();
193    
194                            for (Element userBanElement : userBanElements) {
195                                    StagedModelDataHandlerUtil.importStagedModel(
196                                            portletDataContext, userBanElement);
197                            }
198                    }
199    
200                    return null;
201            }
202    
203            @Override
204            protected void doPrepareManifestSummary(
205                            PortletDataContext portletDataContext,
206                            PortletPreferences portletPreferences)
207                    throws Exception {
208    
209                    ActionableDynamicQuery banActionableDynamicQuery =
210                            new MBBanExportActionableDynamicQuery(portletDataContext);
211    
212                    banActionableDynamicQuery.performCount();
213    
214                    ActionableDynamicQuery categoryActionableDynamicQuery =
215                            new MBCategoryExportActionableDynamicQuery(portletDataContext);
216    
217                    categoryActionableDynamicQuery.performCount();
218    
219                    ActionableDynamicQuery messageActionableDynamicQuery =
220                            new MBMessageExportActionableDynamicQuery(portletDataContext);
221    
222                    messageActionableDynamicQuery.performCount();
223    
224                    ActionableDynamicQuery threadFlagActionableDynamicQuery =
225                            new MBThreadFlagExportActionableDynamicQuery(portletDataContext);
226    
227                    threadFlagActionableDynamicQuery.performCount();
228            }
229    
230    }