001
014
015 package com.liferay.portlet.documentlibrary.lar;
016
017 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
018 import com.liferay.portal.kernel.lar.PortletDataContext;
019 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
020 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
021 import com.liferay.portal.kernel.repository.model.FileEntry;
022 import com.liferay.portal.kernel.repository.model.Folder;
023 import com.liferay.portal.kernel.util.GetterUtil;
024 import com.liferay.portal.kernel.util.MapUtil;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.kernel.xml.Document;
027 import com.liferay.portal.kernel.xml.Element;
028 import com.liferay.portal.kernel.xml.SAXReaderUtil;
029 import com.liferay.portal.model.RepositoryEntry;
030 import com.liferay.portal.util.PropsValues;
031 import com.liferay.portlet.documentlibrary.model.DLFolder;
032 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
033 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
034
035 import java.util.List;
036 import java.util.Map;
037
038 import javax.portlet.PortletPreferences;
039
040
043 public class DLDisplayPortletDataHandlerImpl extends BasePortletDataHandler {
044
045 @Override
046 public String[] getDataPortletPreferences() {
047 return new String[] {"rootFolderId"};
048 }
049
050 @Override
051 public PortletDataHandlerControl[] getExportControls() {
052 return new PortletDataHandlerControl[] {
053 _foldersAndDocuments, _shortcuts, _previewsAndThumbnails, _ranks
054 };
055 }
056
057 @Override
058 public PortletDataHandlerControl[] getExportMetadataControls() {
059 return new PortletDataHandlerControl[] {
060 new PortletDataHandlerBoolean(
061 _NAMESPACE, "folders-and-documents", true,
062 DLPortletDataHandlerImpl.getMetadataControls())
063 };
064 }
065
066 @Override
067 public PortletDataHandlerControl[] getImportControls() {
068 return new PortletDataHandlerControl[] {
069 _foldersAndDocuments, _shortcuts, _previewsAndThumbnails, _ranks
070 };
071 }
072
073 @Override
074 public PortletDataHandlerControl[] getImportMetadataControls() {
075 return new PortletDataHandlerControl[] {
076 new PortletDataHandlerBoolean(
077 _NAMESPACE, "folders-and-documents", true,
078 DLPortletDataHandlerImpl.getMetadataControls())
079 };
080 }
081
082 @Override
083 public boolean isDataLocalized() {
084 return _DATA_LOCALIZED;
085 }
086
087 @Override
088 public boolean isPublishToLiveByDefault() {
089 return PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT;
090 }
091
092 @Override
093 protected PortletPreferences doDeleteData(
094 PortletDataContext portletDataContext, String portletId,
095 PortletPreferences portletPreferences)
096 throws Exception {
097
098 if (portletPreferences == null) {
099 return portletPreferences;
100 }
101
102 portletPreferences.setValue("rootFolderId", StringPool.BLANK);
103 portletPreferences.setValue("showFoldersSearch", StringPool.BLANK);
104 portletPreferences.setValue("showSubfolders", StringPool.BLANK);
105 portletPreferences.setValue("foldersPerPage", StringPool.BLANK);
106 portletPreferences.setValue("folderColumns", StringPool.BLANK);
107 portletPreferences.setValue("fileEntriesPerPage", StringPool.BLANK);
108 portletPreferences.setValue("fileEntryColumns", StringPool.BLANK);
109 portletPreferences.setValue("enable-comment-ratings", StringPool.BLANK);
110
111 return portletPreferences;
112 }
113
114 @Override
115 protected String doExportData(
116 PortletDataContext portletDataContext, String portletId,
117 PortletPreferences portletPreferences)
118 throws Exception {
119
120 portletDataContext.addPermissions(
121 "com.liferay.portlet.documentlibrary",
122 portletDataContext.getScopeGroupId());
123
124 long rootFolderId = GetterUtil.getLong(
125 portletPreferences.getValue("rootFolderId", null));
126
127 Document document = SAXReaderUtil.createDocument();
128
129 Element rootElement = document.addElement(
130 "documentlibrary-display-data");
131
132 Element fileEntryTypesElement = rootElement.addElement(
133 "file-entry-types");
134 Element foldersElement = rootElement.addElement("folders");
135 Element fileEntriesElement = rootElement.addElement("file-entries");
136 Element fileShortcutsElement = rootElement.addElement("file-shortcuts");
137 Element fileRanksElement = rootElement.addElement("file-ranks");
138 Element repositoriesElement = rootElement.addElement("repositories");
139 Element repositoryEntriesElement = rootElement.addElement(
140 "repository-entries");
141
142 if (rootFolderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
143 List<Folder> folders = FolderUtil.findByRepositoryId(
144 portletDataContext.getScopeGroupId());
145
146 for (Folder folder : folders) {
147 DLPortletDataHandlerImpl.exportFolder(
148 portletDataContext, fileEntryTypesElement, foldersElement,
149 fileEntriesElement, fileShortcutsElement, fileRanksElement,
150 repositoriesElement, repositoryEntriesElement, folder,
151 false);
152 }
153
154 List<FileEntry> fileEntries = FileEntryUtil.findByR_F(
155 portletDataContext.getScopeGroupId(),
156 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
157
158 for (FileEntry fileEntry : fileEntries) {
159 DLPortletDataHandlerImpl.exportFileEntry(
160 portletDataContext, fileEntryTypesElement, foldersElement,
161 fileEntriesElement, fileRanksElement, repositoriesElement,
162 repositoryEntriesElement, fileEntry, true);
163 }
164 }
165 else {
166 Folder folder = DLAppLocalServiceUtil.getFolder(rootFolderId);
167
168 rootElement.addAttribute(
169 "root-folder-id", String.valueOf(folder.getFolderId()));
170 rootElement.addAttribute(
171 "default-repository",
172 String.valueOf(folder.isDefaultRepository()));
173
174 DLPortletDataHandlerImpl.exportFolder(
175 portletDataContext, fileEntryTypesElement, foldersElement,
176 fileEntriesElement, fileShortcutsElement, fileRanksElement,
177 repositoriesElement, repositoryEntriesElement, folder, true);
178 }
179
180 return document.formattedString();
181 }
182
183 @Override
184 protected PortletPreferences doImportData(
185 PortletDataContext portletDataContext, String portletId,
186 PortletPreferences portletPreferences, String data)
187 throws Exception {
188
189 portletDataContext.importPermissions(
190 "com.liferay.portlet.documentlibrary",
191 portletDataContext.getSourceGroupId(),
192 portletDataContext.getScopeGroupId());
193
194 Document document = SAXReaderUtil.read(data);
195
196 Element rootElement = document.getRootElement();
197
198 Element fileEntryTypesElement = rootElement.element("file-entry-types");
199
200 List<Element> fileEntryTypeElements = fileEntryTypesElement.elements(
201 "file-entry-type");
202
203 for (Element fileEntryTypeElement : fileEntryTypeElements) {
204 DLPortletDataHandlerImpl.importFileEntryType(
205 portletDataContext, fileEntryTypeElement);
206 }
207
208 Element foldersElement = rootElement.element("folders");
209
210 List<Element> folderElements = foldersElement.elements("folder");
211
212 for (Element folderElement : folderElements) {
213 DLPortletDataHandlerImpl.importFolder(
214 portletDataContext, folderElement);
215 }
216
217 Element fileEntriesElement = rootElement.element("file-entries");
218
219 List<Element> fileEntryElements = fileEntriesElement.elements(
220 "file-entry");
221
222 for (Element fileEntryElement : fileEntryElements) {
223 DLPortletDataHandlerImpl.importFileEntry(
224 portletDataContext, fileEntryElement);
225 }
226
227 if (portletDataContext.getBooleanParameter(_NAMESPACE, "shortcuts")) {
228 List<Element> fileShortcutElements = rootElement.element(
229 "file-shortcuts").elements("file-shortcut");
230
231 for (Element fileShortcutElement : fileShortcutElements) {
232 DLPortletDataHandlerImpl.importFileShortcut(
233 portletDataContext, fileShortcutElement);
234 }
235 }
236
237 if (portletDataContext.getBooleanParameter(_NAMESPACE, "ranks")) {
238 Element fileRanksElement = rootElement.element("file-ranks");
239
240 List<Element> fileRankElements = fileRanksElement.elements(
241 "file-rank");
242
243 for (Element fileRankElement : fileRankElements) {
244 DLPortletDataHandlerImpl.importFileRank(
245 portletDataContext, fileRankElement);
246 }
247 }
248
249 long rootFolderId = GetterUtil.getLong(
250 rootElement.attributeValue("root-folder-id"));
251 boolean defaultRepository = GetterUtil.getBoolean(
252 rootElement.attributeValue("default-repository"), true);
253
254 if (rootFolderId > 0) {
255 Map<Long, Long> folderIds = null;
256
257 if (defaultRepository) {
258 folderIds =
259 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
260 DLFolder.class);
261 }
262 else {
263 folderIds =
264 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
265 RepositoryEntry.class);
266 }
267
268 rootFolderId = MapUtil.getLong(
269 folderIds, rootFolderId, rootFolderId);
270
271 portletPreferences.setValue(
272 "rootFolderId", String.valueOf(rootFolderId));
273 }
274
275 return portletPreferences;
276 }
277
278 private static final boolean _DATA_LOCALIZED = true;
279
280 private static final String _NAMESPACE = "document_library";
281
282 private static PortletDataHandlerBoolean _foldersAndDocuments =
283 new PortletDataHandlerBoolean(
284 _NAMESPACE, "folders-and-documents", true, true);
285
286 private static PortletDataHandlerBoolean _previewsAndThumbnails =
287 new PortletDataHandlerBoolean(_NAMESPACE, "previews-and-thumbnails");
288
289 private static PortletDataHandlerBoolean _ranks =
290 new PortletDataHandlerBoolean(_NAMESPACE, "ranks");
291
292 private static PortletDataHandlerBoolean _shortcuts=
293 new PortletDataHandlerBoolean(_NAMESPACE, "shortcuts");
294
295 }