001
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
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 }