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