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.QueryUtil;
018    import com.liferay.portal.kernel.util.GetterUtil;
019    import com.liferay.portal.kernel.util.MapUtil;
020    import com.liferay.portal.kernel.workflow.WorkflowConstants;
021    import com.liferay.portal.kernel.xml.Element;
022    import com.liferay.portal.model.User;
023    import com.liferay.portal.service.ServiceContext;
024    import com.liferay.portal.service.UserLocalServiceUtil;
025    import com.liferay.portlet.exportimport.lar.BaseStagedModelDataHandler;
026    import com.liferay.portlet.exportimport.lar.ExportImportPathUtil;
027    import com.liferay.portlet.exportimport.lar.PortletDataContext;
028    import com.liferay.portlet.exportimport.lar.StagedModelDataHandlerUtil;
029    import com.liferay.portlet.exportimport.lar.StagedModelModifiedDateComparator;
030    import com.liferay.portlet.messageboards.model.MBCategoryConstants;
031    import com.liferay.portlet.messageboards.model.MBMessage;
032    import com.liferay.portlet.messageboards.model.MBThread;
033    import com.liferay.portlet.messageboards.model.MBThreadFlag;
034    import com.liferay.portlet.messageboards.service.MBMessageLocalServiceUtil;
035    import com.liferay.portlet.messageboards.service.MBThreadFlagLocalServiceUtil;
036    import com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil;
037    
038    import java.util.List;
039    import java.util.Map;
040    
041    /**
042     * @author Daniel Kocsis
043     */
044    public class MBThreadFlagStagedModelDataHandler
045            extends BaseStagedModelDataHandler<MBThreadFlag> {
046    
047            public static final String[] CLASS_NAMES = {MBThreadFlag.class.getName()};
048    
049            @Override
050            public void deleteStagedModel(MBThreadFlag threadFlag) {
051                    MBThreadFlagLocalServiceUtil.deleteThreadFlag(threadFlag);
052            }
053    
054            @Override
055            public void deleteStagedModel(
056                    String uuid, long groupId, String className, String extraData) {
057    
058                    MBThreadFlag threadFlag = fetchStagedModelByUuidAndGroupId(
059                            uuid, groupId);
060    
061                    if (threadFlag != null) {
062                            deleteStagedModel(threadFlag);
063                    }
064            }
065    
066            @Override
067            public MBThreadFlag fetchStagedModelByUuidAndGroupId(
068                    String uuid, long groupId) {
069    
070                    return MBThreadFlagLocalServiceUtil.fetchMBThreadFlagByUuidAndGroupId(
071                            uuid, groupId);
072            }
073    
074            @Override
075            public List<MBThreadFlag> fetchStagedModelsByUuidAndCompanyId(
076                    String uuid, long companyId) {
077    
078                    return MBThreadFlagLocalServiceUtil.getMBThreadFlagsByUuidAndCompanyId(
079                            uuid, companyId, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
080                            new StagedModelModifiedDateComparator<MBThreadFlag>());
081            }
082    
083            @Override
084            public String[] getClassNames() {
085                    return CLASS_NAMES;
086            }
087    
088            @Override
089            protected void doExportStagedModel(
090                            PortletDataContext portletDataContext, MBThreadFlag threadFlag)
091                    throws Exception {
092    
093                    MBThread thread = MBThreadLocalServiceUtil.getThread(
094                            threadFlag.getThreadId());
095    
096                    MBMessage rootMessage = MBMessageLocalServiceUtil.getMessage(
097                            thread.getRootMessageId());
098    
099                    if ((rootMessage.getStatus() != WorkflowConstants.STATUS_APPROVED) ||
100                            (rootMessage.getCategoryId() ==
101                                    MBCategoryConstants.DISCUSSION_CATEGORY_ID)) {
102    
103                            return;
104                    }
105    
106                    StagedModelDataHandlerUtil.exportStagedModel(
107                            portletDataContext, rootMessage);
108    
109                    Element threadFlagElement = portletDataContext.getExportDataElement(
110                            threadFlag);
111    
112                    threadFlagElement.addAttribute(
113                            "root-message-id", String.valueOf(rootMessage.getMessageId()));
114    
115                    portletDataContext.addClassedModel(
116                            threadFlagElement, ExportImportPathUtil.getModelPath(threadFlag),
117                            threadFlag);
118            }
119    
120            @Override
121            protected void doImportStagedModel(
122                            PortletDataContext portletDataContext, MBThreadFlag threadFlag)
123                    throws Exception {
124    
125                    User user = UserLocalServiceUtil.fetchUserByUuidAndCompanyId(
126                            threadFlag.getUserUuid(), portletDataContext.getCompanyId());
127    
128                    if (user == null) {
129                            return;
130                    }
131    
132                    Element element = portletDataContext.getImportDataStagedModelElement(
133                            threadFlag);
134    
135                    long rootMessageId = GetterUtil.getLong(
136                            element.attributeValue("root-message-id"));
137    
138                    String rootMessagePath = ExportImportPathUtil.getModelPath(
139                            portletDataContext, MBMessage.class.getName(), rootMessageId);
140    
141                    MBMessage rootMessage =
142                            (MBMessage)portletDataContext.getZipEntryAsObject(rootMessagePath);
143    
144                    StagedModelDataHandlerUtil.importStagedModel(
145                            portletDataContext, rootMessage);
146    
147                    Map<Long, Long> threadIds =
148                            (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
149                                    MBThread.class);
150    
151                    long threadId = MapUtil.getLong(
152                            threadIds, threadFlag.getThreadId(), threadFlag.getThreadId());
153    
154                    MBThread thread = MBThreadLocalServiceUtil.fetchThread(threadId);
155    
156                    if (thread == null) {
157                            return;
158                    }
159    
160                    ServiceContext serviceContext = portletDataContext.createServiceContext(
161                            threadFlag);
162    
163                    serviceContext.setUuid(threadFlag.getUuid());
164    
165                    MBThreadFlagLocalServiceUtil.addThreadFlag(
166                            user.getUserId(), thread, serviceContext);
167            }
168    
169    }