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