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