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