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.dao.orm.DynamicQuery;
019    import com.liferay.portal.kernel.exception.PortalException;
020    import com.liferay.portal.kernel.lar.BasePortletDataHandler;
021    import com.liferay.portal.kernel.lar.PortletDataContext;
022    import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
023    import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
024    import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
025    import com.liferay.portal.kernel.xml.Element;
026    import com.liferay.portal.util.PropsValues;
027    import com.liferay.portlet.messageboards.model.MBBan;
028    import com.liferay.portlet.messageboards.model.MBCategory;
029    import com.liferay.portlet.messageboards.model.MBCategoryConstants;
030    import com.liferay.portlet.messageboards.model.MBMessage;
031    import com.liferay.portlet.messageboards.model.MBThreadFlag;
032    import com.liferay.portlet.messageboards.service.MBBanLocalServiceUtil;
033    import com.liferay.portlet.messageboards.service.MBCategoryLocalServiceUtil;
034    import com.liferay.portlet.messageboards.service.MBStatsUserLocalServiceUtil;
035    import com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil;
036    import com.liferay.portlet.messageboards.service.persistence.MBBanActionableDynamicQuery;
037    import com.liferay.portlet.messageboards.service.persistence.MBCategoryActionableDynamicQuery;
038    import com.liferay.portlet.messageboards.service.persistence.MBMessageActionableDynamicQuery;
039    import com.liferay.portlet.messageboards.service.persistence.MBThreadFlagActionableDynamicQuery;
040    
041    import java.util.List;
042    
043    import javax.portlet.PortletPreferences;
044    
045    /**
046     * @author Bruno Farache
047     * @author Raymond Augé
048     * @author Daniel Kocsis
049     */
050    public class MBPortletDataHandler extends BasePortletDataHandler {
051    
052            public static final String NAMESPACE = "message_boards";
053    
054            public MBPortletDataHandler() {
055                    setAlwaysExportable(true);
056                    setExportControls(
057                            new PortletDataHandlerBoolean(
058                                    NAMESPACE, "categories-and-messages", true, true),
059                            new PortletDataHandlerBoolean(NAMESPACE, "thread-flags"),
060                            new PortletDataHandlerBoolean(NAMESPACE, "user-bans"));
061                    setExportMetadataControls(
062                            new PortletDataHandlerBoolean(
063                                    NAMESPACE, "message-board-messages", true,
064                                    new PortletDataHandlerControl[] {
065                                            new PortletDataHandlerBoolean(NAMESPACE, "attachments"),
066                                            new PortletDataHandlerBoolean(NAMESPACE, "ratings"),
067                                            new PortletDataHandlerBoolean(NAMESPACE, "tags")
068                                    }));
069                    setPublishToLiveByDefault(
070                            PropsValues.MESSAGE_BOARDS_PUBLISH_TO_LIVE_BY_DEFAULT);
071            }
072    
073            @Override
074            protected PortletPreferences doDeleteData(
075                            PortletDataContext portletDataContext, String portletId,
076                            PortletPreferences portletPreferences)
077                    throws Exception {
078    
079                    if (portletDataContext.addPrimaryKey(
080                                    MBPortletDataHandler.class, "deleteData")) {
081    
082                            return portletPreferences;
083                    }
084    
085                    MBBanLocalServiceUtil.deleteBansByGroupId(
086                            portletDataContext.getScopeGroupId());
087    
088                    MBCategoryLocalServiceUtil.deleteCategories(
089                            portletDataContext.getScopeGroupId());
090    
091                    MBStatsUserLocalServiceUtil.deleteStatsUsersByGroupId(
092                            portletDataContext.getScopeGroupId());
093    
094                    MBThreadLocalServiceUtil.deleteThreads(
095                            portletDataContext.getScopeGroupId(),
096                            MBCategoryConstants.DEFAULT_PARENT_CATEGORY_ID);
097    
098                    return portletPreferences;
099            }
100    
101            @Override
102            protected String doExportData(
103                            final PortletDataContext portletDataContext, String portletId,
104                            PortletPreferences portletPreferences)
105                    throws Exception {
106    
107                    portletDataContext.addPermissions(
108                            "com.liferay.portlet.messageboards",
109                            portletDataContext.getScopeGroupId());
110    
111                    Element rootElement = addExportDataRootElement(portletDataContext);
112    
113                    rootElement.addAttribute(
114                            "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
115    
116                    ActionableDynamicQuery categoriesActionableDynamicQuery =
117                            new MBCategoryActionableDynamicQuery() {
118    
119                            @Override
120                            protected void addCriteria(DynamicQuery dynamicQuery) {
121                                    portletDataContext.addDateRangeCriteria(
122                                            dynamicQuery, "modifiedDate");
123                            }
124    
125                            @Override
126                            protected void performAction(Object object) throws PortalException {
127                                    MBCategory category = (MBCategory)object;
128    
129                                    StagedModelDataHandlerUtil.exportStagedModel(
130                                            portletDataContext, category);
131                            }
132    
133                    };
134    
135                    categoriesActionableDynamicQuery.setGroupId(
136                            portletDataContext.getScopeGroupId());
137    
138                    categoriesActionableDynamicQuery.performActions();
139    
140                    ActionableDynamicQuery messagesActionableDynamicQuery =
141                            new MBMessageActionableDynamicQuery() {
142    
143                            @Override
144                            protected void addCriteria(DynamicQuery dynamicQuery) {
145                                    portletDataContext.addDateRangeCriteria(
146                                            dynamicQuery, "modifiedDate");
147                            }
148    
149                            @Override
150                            protected void performAction(Object object) throws PortalException {
151                                    MBMessage message = (MBMessage)object;
152    
153                                    StagedModelDataHandlerUtil.exportStagedModel(
154                                            portletDataContext, message);
155                            }
156    
157                    };
158    
159                    messagesActionableDynamicQuery.setGroupId(
160                            portletDataContext.getScopeGroupId());
161    
162                    messagesActionableDynamicQuery.performActions();
163    
164                    if (portletDataContext.getBooleanParameter(
165                                    MBPortletDataHandler.NAMESPACE, "thread-flags")) {
166    
167                            ActionableDynamicQuery threadFlagsActionableDynamicQuery =
168                                    new MBThreadFlagActionableDynamicQuery() {
169    
170                                    @Override
171                                    protected void addCriteria(DynamicQuery dynamicQuery) {
172                                            portletDataContext.addDateRangeCriteria(
173                                                    dynamicQuery, "modifiedDate");
174                                    }
175    
176                                    @Override
177                                    protected void performAction(Object object)
178                                            throws PortalException {
179    
180                                            MBThreadFlag message = (MBThreadFlag)object;
181    
182                                            StagedModelDataHandlerUtil.exportStagedModel(
183                                                    portletDataContext, message);
184                                    }
185    
186                            };
187    
188                            threadFlagsActionableDynamicQuery.setGroupId(
189                                    portletDataContext.getScopeGroupId());
190    
191                            threadFlagsActionableDynamicQuery.performActions();
192                    }
193    
194                    if (!portletDataContext.getBooleanParameter(NAMESPACE, "user-bans")) {
195                            return getExportDataRootElementString(rootElement);
196                    }
197    
198                    ActionableDynamicQuery userBansActionableDynamicQuery =
199                            new MBBanActionableDynamicQuery() {
200    
201                            @Override
202                            protected void addCriteria(DynamicQuery dynamicQuery) {
203                                    portletDataContext.addDateRangeCriteria(
204                                            dynamicQuery, "modifiedDate");
205                            }
206    
207                            @Override
208                            protected void performAction(Object object) throws PortalException {
209                                    MBBan userBan = (MBBan)object;
210    
211                                    StagedModelDataHandlerUtil.exportStagedModel(
212                                            portletDataContext, userBan);
213                            }
214    
215                    };
216    
217                    userBansActionableDynamicQuery.setGroupId(
218                            portletDataContext.getScopeGroupId());
219    
220                    userBansActionableDynamicQuery.performActions();
221    
222                    return getExportDataRootElementString(rootElement);
223            }
224    
225            @Override
226            protected PortletPreferences doImportData(
227                            PortletDataContext portletDataContext, String portletId,
228                            PortletPreferences portletPreferences, String data)
229                    throws Exception {
230    
231                    portletDataContext.importPermissions(
232                            "com.liferay.portlet.messageboards",
233                            portletDataContext.getSourceGroupId(),
234                            portletDataContext.getScopeGroupId());
235    
236                    Element categoriesElement =
237                            portletDataContext.getImportDataGroupElement(MBCategory.class);
238    
239                    List<Element> categoryElements = categoriesElement.elements();
240    
241                    for (Element categoryElement : categoryElements) {
242                            StagedModelDataHandlerUtil.importStagedModel(
243                                    portletDataContext, categoryElement);
244                    }
245    
246                    Element messagesElement = portletDataContext.getImportDataGroupElement(
247                            MBMessage.class);
248    
249                    List<Element> messageElements = messagesElement.elements();
250    
251                    for (Element messageElement : messageElements) {
252                            StagedModelDataHandlerUtil.importStagedModel(
253                                    portletDataContext, messageElement);
254                    }
255    
256                    if (portletDataContext.getBooleanParameter(NAMESPACE, "thread-flags")) {
257                            Element threadFlagsElement =
258                                    portletDataContext.getImportDataGroupElement(
259                                            MBThreadFlag.class);
260    
261                            List<Element> threadFlagElements = threadFlagsElement.elements();
262    
263                            for (Element threadFlagElement : threadFlagElements) {
264                                    StagedModelDataHandlerUtil.importStagedModel(
265                                            portletDataContext, threadFlagElement);
266                            }
267                    }
268    
269                    if (portletDataContext.getBooleanParameter(NAMESPACE, "user-bans")) {
270                            Element userBansElement =
271                                    portletDataContext.getImportDataGroupElement(MBBan.class);
272    
273                            List<Element> userBanElements = userBansElement.elements();
274    
275                            for (Element userBanElement : userBanElements) {
276                                    StagedModelDataHandlerUtil.importStagedModel(
277                                            portletDataContext, userBanElement);
278                            }
279                    }
280    
281                    return null;
282            }
283    
284    }