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.addPermissions(
109                            MBPermission.RESOURCE_NAME, portletDataContext.getScopeGroupId());
110    
111                    Element rootElement = addExportDataRootElement(portletDataContext);
112    
113                    rootElement.addAttribute(
114                            "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
115    
116                    if (portletDataContext.getBooleanParameter(NAMESPACE, "messages")) {
117                            ActionableDynamicQuery categoryActionableDynamicQuery =
118                                    new MBCategoryExportActionableDynamicQuery(portletDataContext);
119    
120                            categoryActionableDynamicQuery.performActions();
121    
122                            ActionableDynamicQuery messageActionableDynamicQuery =
123                                    new MBMessageExportActionableDynamicQuery(portletDataContext);
124    
125                            messageActionableDynamicQuery.performActions();
126                    }
127    
128                    if (portletDataContext.getBooleanParameter(NAMESPACE, "thread-flags")) {
129                            ActionableDynamicQuery threadFlagActionableDynamicQuery =
130                                    new MBThreadFlagExportActionableDynamicQuery(
131                                            portletDataContext);
132    
133                            threadFlagActionableDynamicQuery.performActions();
134                    }
135    
136                    if (portletDataContext.getBooleanParameter(NAMESPACE, "user-bans")) {
137                            ActionableDynamicQuery banActionableDynamicQuery =
138                                    new MBBanExportActionableDynamicQuery(portletDataContext);
139    
140                            banActionableDynamicQuery.performActions();
141                    }
142    
143                    return getExportDataRootElementString(rootElement);
144            }
145    
146            @Override
147            protected PortletPreferences doImportData(
148                            PortletDataContext portletDataContext, String portletId,
149                            PortletPreferences portletPreferences, String data)
150                    throws Exception {
151    
152                    portletDataContext.importPermissions(
153                            MBPermission.RESOURCE_NAME, portletDataContext.getSourceGroupId(),
154                            portletDataContext.getScopeGroupId());
155    
156                    if (portletDataContext.getBooleanParameter(NAMESPACE, "messages")) {
157                            Element categoriesElement =
158                                    portletDataContext.getImportDataGroupElement(MBCategory.class);
159    
160                            List<Element> categoryElements = categoriesElement.elements();
161    
162                            for (Element categoryElement : categoryElements) {
163                                    StagedModelDataHandlerUtil.importStagedModel(
164                                            portletDataContext, categoryElement);
165                            }
166    
167                            Element messagesElement =
168                                    portletDataContext.getImportDataGroupElement(MBMessage.class);
169    
170                            List<Element> messageElements = messagesElement.elements();
171    
172                            for (Element messageElement : messageElements) {
173                                    StagedModelDataHandlerUtil.importStagedModel(
174                                            portletDataContext, messageElement);
175                            }
176                    }
177    
178                    if (portletDataContext.getBooleanParameter(NAMESPACE, "thread-flags")) {
179                            Element threadFlagsElement =
180                                    portletDataContext.getImportDataGroupElement(
181                                            MBThreadFlag.class);
182    
183                            List<Element> threadFlagElements = threadFlagsElement.elements();
184    
185                            for (Element threadFlagElement : threadFlagElements) {
186                                    StagedModelDataHandlerUtil.importStagedModel(
187                                            portletDataContext, threadFlagElement);
188                            }
189                    }
190    
191                    if (portletDataContext.getBooleanParameter(NAMESPACE, "user-bans")) {
192                            Element userBansElement =
193                                    portletDataContext.getImportDataGroupElement(MBBan.class);
194    
195                            List<Element> userBanElements = userBansElement.elements();
196    
197                            for (Element userBanElement : userBanElements) {
198                                    StagedModelDataHandlerUtil.importStagedModel(
199                                            portletDataContext, userBanElement);
200                            }
201                    }
202    
203                    return null;
204            }
205    
206            @Override
207            protected void doPrepareManifestSummary(
208                            PortletDataContext portletDataContext,
209                            PortletPreferences portletPreferences)
210                    throws Exception {
211    
212                    ActionableDynamicQuery banActionableDynamicQuery =
213                            new MBBanExportActionableDynamicQuery(portletDataContext);
214    
215                    banActionableDynamicQuery.performCount();
216    
217                    ActionableDynamicQuery categoryActionableDynamicQuery =
218                            new MBCategoryExportActionableDynamicQuery(portletDataContext);
219    
220                    categoryActionableDynamicQuery.performCount();
221    
222                    ActionableDynamicQuery messageActionableDynamicQuery =
223                            new MBMessageExportActionableDynamicQuery(portletDataContext);
224    
225                    messageActionableDynamicQuery.performCount();
226    
227                    ActionableDynamicQuery threadFlagActionableDynamicQuery =
228                            new MBThreadFlagExportActionableDynamicQuery(portletDataContext);
229    
230                    threadFlagActionableDynamicQuery.performCount();
231            }
232    
233    }