001
014
015 package com.liferay.portlet.documentlibrary.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.log.Log;
024 import com.liferay.portal.kernel.log.LogFactoryUtil;
025 import com.liferay.portal.kernel.repository.model.FileEntry;
026 import com.liferay.portal.kernel.repository.model.Folder;
027 import com.liferay.portal.kernel.util.MapUtil;
028 import com.liferay.portal.kernel.xml.Element;
029 import com.liferay.portal.service.ServiceContext;
030 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
031 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
032 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
033 import com.liferay.portlet.documentlibrary.service.DLFileShortcutLocalServiceUtil;
034
035 import java.util.Map;
036
037
040 public class DLFileShortcutStagedModelDataHandler
041 extends BaseStagedModelDataHandler<DLFileShortcut> {
042
043 public static final String[] CLASS_NAMES = {DLFileShortcut.class.getName()};
044
045 @Override
046 public void deleteStagedModel(
047 String uuid, long groupId, String className, String extraData)
048 throws PortalException, SystemException {
049
050 DLFileShortcut dlFileShortcut =
051 DLFileShortcutLocalServiceUtil.fetchDLFileShortcutByUuidAndGroupId(
052 uuid, groupId);
053
054 if (dlFileShortcut != null) {
055 DLFileShortcutLocalServiceUtil.deleteFileShortcut(dlFileShortcut);
056 }
057 }
058
059 @Override
060 public String[] getClassNames() {
061 return CLASS_NAMES;
062 }
063
064 @Override
065 public String getDisplayName(DLFileShortcut shortcut) {
066 return shortcut.getToTitle();
067 }
068
069 @Override
070 protected void doExportStagedModel(
071 PortletDataContext portletDataContext, DLFileShortcut fileShortcut)
072 throws Exception {
073
074 if (fileShortcut.getFolderId() !=
075 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
076
077 StagedModelDataHandlerUtil.exportStagedModel(
078 portletDataContext, fileShortcut.getFolder());
079 }
080
081 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
082 fileShortcut.getToFileEntryId());
083
084 StagedModelDataHandlerUtil.exportStagedModel(
085 portletDataContext, fileEntry);
086
087 Element fileShortcutElement = portletDataContext.getExportDataElement(
088 fileShortcut);
089
090 fileShortcutElement.addAttribute(
091 "file-entry-uuid", fileEntry.getUuid());
092
093 portletDataContext.addClassedModel(
094 fileShortcutElement,
095 ExportImportPathUtil.getModelPath(fileShortcut), fileShortcut,
096 DLPortletDataHandler.NAMESPACE);
097 }
098
099 @Override
100 protected void doImportStagedModel(
101 PortletDataContext portletDataContext, DLFileShortcut fileShortcut)
102 throws Exception {
103
104 long userId = portletDataContext.getUserId(fileShortcut.getUserUuid());
105
106 if (fileShortcut.getFolderId() !=
107 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
108
109 String folderPath = ExportImportPathUtil.getModelPath(
110 portletDataContext, Folder.class.getName(),
111 fileShortcut.getFolderId());
112
113 Folder folder = (Folder)portletDataContext.getZipEntryAsObject(
114 folderPath);
115
116 StagedModelDataHandlerUtil.importStagedModel(
117 portletDataContext, folder);
118 }
119
120 Map<Long, Long> folderIds =
121 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
122 Folder.class);
123
124 long folderId = MapUtil.getLong(
125 folderIds, fileShortcut.getFolderId(), fileShortcut.getFolderId());
126
127 long groupId = portletDataContext.getScopeGroupId();
128
129 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
130 Folder folder = FolderUtil.findByPrimaryKey(folderId);
131
132 groupId = folder.getRepositoryId();
133 }
134
135 String fileEntryPath = ExportImportPathUtil.getModelPath(
136 portletDataContext, FileEntry.class.getName(),
137 fileShortcut.getToFileEntryId());
138
139 FileEntry fileEntry = (FileEntry)portletDataContext.getZipEntryAsObject(
140 fileEntryPath);
141
142 StagedModelDataHandlerUtil.importStagedModel(
143 portletDataContext, fileEntry);
144
145 Element fileShortcutElement =
146 portletDataContext.getImportDataStagedModelElement(fileShortcut);
147
148 String fileEntryUuid = fileShortcutElement.attributeValue(
149 "file-entry-uuid");
150
151 FileEntry importedFileEntry = FileEntryUtil.fetchByUUID_R(
152 fileEntryUuid, groupId);
153
154 if (importedFileEntry == null) {
155 if (_log.isWarnEnabled()) {
156 _log.warn(
157 "Unable to fetch file entry {uuid=" + fileEntryUuid +
158 ", groupId=" + groupId + "}");
159 }
160
161 return;
162 }
163
164 ServiceContext serviceContext = portletDataContext.createServiceContext(
165 fileShortcut, DLPortletDataHandler.NAMESPACE);
166
167 DLFileShortcut importedFileShortcut = null;
168
169 if (portletDataContext.isDataStrategyMirror()) {
170 DLFileShortcut existingFileShortcut =
171 DLFileShortcutLocalServiceUtil.
172 fetchDLFileShortcutByUuidAndGroupId(
173 fileShortcut.getUuid(),
174 portletDataContext.getScopeGroupId());
175
176 if (existingFileShortcut == null) {
177 serviceContext.setUuid(fileShortcut.getUuid());
178
179 importedFileShortcut = DLAppLocalServiceUtil.addFileShortcut(
180 userId, groupId, folderId,
181 importedFileEntry.getFileEntryId(), serviceContext);
182 }
183 else {
184 importedFileShortcut = DLAppLocalServiceUtil.updateFileShortcut(
185 userId, existingFileShortcut.getFileShortcutId(), folderId,
186 importedFileEntry.getFileEntryId(), serviceContext);
187 }
188 }
189 else {
190 importedFileShortcut = DLAppLocalServiceUtil.addFileShortcut(
191 userId, groupId, folderId, importedFileEntry.getFileEntryId(),
192 serviceContext);
193 }
194
195 portletDataContext.importClassedModel(
196 fileShortcut, importedFileShortcut, DLPortletDataHandler.NAMESPACE);
197 }
198
199 private static Log _log = LogFactoryUtil.getLog(
200 DLFileShortcutStagedModelDataHandler.class);
201
202 }