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