001
014
015 package com.liferay.portlet.journal.lar;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.lar.BaseStagedModelDataHandler;
020 import com.liferay.portal.kernel.lar.ExportImportPathUtil;
021 import com.liferay.portal.kernel.lar.PortletDataContext;
022 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
023 import com.liferay.portal.kernel.trash.TrashHandler;
024 import com.liferay.portal.kernel.util.MapUtil;
025 import com.liferay.portal.kernel.util.StringUtil;
026 import com.liferay.portal.kernel.util.Validator;
027 import com.liferay.portal.kernel.xml.Element;
028 import com.liferay.portal.service.ServiceContext;
029 import com.liferay.portlet.journal.model.JournalFolder;
030 import com.liferay.portlet.journal.model.JournalFolderConstants;
031 import com.liferay.portlet.journal.service.JournalFolderLocalServiceUtil;
032 import com.liferay.portlet.journal.service.persistence.JournalFolderUtil;
033
034 import java.util.Map;
035
036
039 public class JournalFolderStagedModelDataHandler
040 extends BaseStagedModelDataHandler<JournalFolder> {
041
042 public static final String[] CLASS_NAMES = {JournalFolder.class.getName()};
043
044 @Override
045 public void deleteStagedModel(
046 String uuid, long groupId, String className, String extraData)
047 throws PortalException, SystemException {
048
049 JournalFolder folder =
050 JournalFolderLocalServiceUtil.fetchJournalFolderByUuidAndGroupId(
051 uuid, groupId);
052
053 if (folder != null) {
054 JournalFolderLocalServiceUtil.deleteFolder(folder);
055 }
056 }
057
058 @Override
059 public String[] getClassNames() {
060 return CLASS_NAMES;
061 }
062
063 @Override
064 public String getDisplayName(JournalFolder folder) {
065 return folder.getName();
066 }
067
068 @Override
069 protected void doExportStagedModel(
070 PortletDataContext portletDataContext, JournalFolder folder)
071 throws Exception {
072
073 if (folder.getParentFolderId() !=
074 JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
075
076 StagedModelDataHandlerUtil.exportReferenceStagedModel(
077 portletDataContext, folder, folder.getParentFolder(),
078 PortletDataContext.REFERENCE_TYPE_PARENT);
079 }
080
081 Element folderElement = portletDataContext.getExportDataElement(folder);
082
083 portletDataContext.addClassedModel(
084 folderElement, ExportImportPathUtil.getModelPath(folder), folder);
085 }
086
087 @Override
088 protected void doImportStagedModel(
089 PortletDataContext portletDataContext, JournalFolder folder)
090 throws Exception {
091
092 long userId = portletDataContext.getUserId(folder.getUserUuid());
093
094 if (folder.getParentFolderId() !=
095 JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
096
097 StagedModelDataHandlerUtil.importReferenceStagedModel(
098 portletDataContext, folder, JournalFolder.class,
099 folder.getParentFolderId());
100 }
101
102 Map<Long, Long> folderIds =
103 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
104 JournalFolder.class);
105
106 long parentFolderId = MapUtil.getLong(
107 folderIds, folder.getParentFolderId(), folder.getParentFolderId());
108
109 ServiceContext serviceContext = portletDataContext.createServiceContext(
110 folder);
111
112 JournalFolder importedFolder = null;
113
114 long groupId = portletDataContext.getScopeGroupId();
115
116 if (portletDataContext.isDataStrategyMirror()) {
117 JournalFolder existingFolder =
118 JournalFolderLocalServiceUtil.
119 fetchJournalFolderByUuidAndGroupId(
120 folder.getUuid(), groupId);
121
122 if (existingFolder == null) {
123 String name = getFolderName(
124 null, groupId, parentFolderId, folder.getName(), 2);
125
126 serviceContext.setUuid(folder.getUuid());
127
128 importedFolder = JournalFolderLocalServiceUtil.addFolder(
129 userId, groupId, parentFolderId, name,
130 folder.getDescription(), serviceContext);
131 }
132 else {
133 String name = getFolderName(
134 folder.getUuid(), groupId, parentFolderId, folder.getName(),
135 2);
136
137 importedFolder = JournalFolderLocalServiceUtil.updateFolder(
138 userId, existingFolder.getFolderId(), parentFolderId, name,
139 folder.getDescription(), false, serviceContext);
140 }
141 }
142 else {
143 String name = getFolderName(
144 null, groupId, parentFolderId, folder.getName(), 2);
145
146 importedFolder = JournalFolderLocalServiceUtil.addFolder(
147 userId, groupId, parentFolderId, name, folder.getDescription(),
148 serviceContext);
149 }
150
151 portletDataContext.importClassedModel(folder, importedFolder);
152 }
153
154 @Override
155 protected void doRestoreStagedModel(
156 PortletDataContext portletDataContext, JournalFolder folder)
157 throws Exception {
158
159 long userId = portletDataContext.getUserId(folder.getUserUuid());
160
161 JournalFolder existingFolder =
162 JournalFolderLocalServiceUtil.fetchJournalFolderByUuidAndGroupId(
163 folder.getUuid(), portletDataContext.getScopeGroupId());
164
165 if ((existingFolder == null) || !existingFolder.isInTrash()) {
166 return;
167 }
168
169 TrashHandler trashHandler = existingFolder.getTrashHandler();
170
171 if (trashHandler.isRestorable(existingFolder.getFolderId())) {
172 trashHandler.restoreTrashEntry(
173 userId, existingFolder.getFolderId());
174 }
175 }
176
177 protected String getFolderName(
178 String uuid, long groupId, long parentFolderId, String name,
179 int count)
180 throws Exception {
181
182 JournalFolder folder = JournalFolderUtil.fetchByG_P_N(
183 groupId, parentFolderId, name);
184
185 if (folder == null) {
186 return name;
187 }
188
189 if (Validator.isNotNull(uuid) && uuid.equals(folder.getUuid())) {
190 return name;
191 }
192
193 name = StringUtil.appendParentheticalSuffix(name, count);
194
195 return getFolderName(uuid, groupId, parentFolderId, name, ++count);
196 }
197
198 }