1
22
23 package com.liferay.portlet.documentlibrary.lar;
24
25 import com.liferay.portal.kernel.util.GetterUtil;
26 import com.liferay.portal.kernel.util.MapUtil;
27 import com.liferay.portal.kernel.util.StringPool;
28 import com.liferay.portal.kernel.util.Validator;
29 import com.liferay.portal.kernel.xml.Document;
30 import com.liferay.portal.kernel.xml.Element;
31 import com.liferay.portal.kernel.xml.SAXReaderUtil;
32 import com.liferay.portal.lar.BasePortletDataHandler;
33 import com.liferay.portal.lar.PortletDataContext;
34 import com.liferay.portal.lar.PortletDataException;
35 import com.liferay.portal.lar.PortletDataHandlerBoolean;
36 import com.liferay.portal.lar.PortletDataHandlerControl;
37 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
38 import com.liferay.portlet.documentlibrary.model.DLFileRank;
39 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
40 import com.liferay.portlet.documentlibrary.model.DLFolder;
41 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
42 import com.liferay.portlet.documentlibrary.service.persistence.DLFolderUtil;
43
44 import java.util.List;
45 import java.util.Map;
46
47 import javax.portlet.PortletPreferences;
48
49
56 public class DLDisplayPortletDataHandlerImpl extends BasePortletDataHandler {
57
58 public PortletPreferences deleteData(
59 PortletDataContext context, String portletId,
60 PortletPreferences preferences)
61 throws PortletDataException {
62
63 try {
64 preferences.setValue("rootFolderId", StringPool.BLANK);
65 preferences.setValue("showBreadcrumbs", StringPool.BLANK);
66 preferences.setValue("showFoldersSearch", StringPool.BLANK);
67 preferences.setValue("showSubfolders", StringPool.BLANK);
68 preferences.setValue("foldersPerPage", StringPool.BLANK);
69 preferences.setValue("folderColumns", StringPool.BLANK);
70 preferences.setValue("showFileEntriesSearch", StringPool.BLANK);
71 preferences.setValue("fileEntriesPerPage", StringPool.BLANK);
72 preferences.setValue("fileEntryColumns", StringPool.BLANK);
73 preferences.setValue("enable-comment-ratings", StringPool.BLANK);
74
75 return preferences;
76 }
77 catch (Exception e) {
78 throw new PortletDataException(e);
79 }
80 }
81
82 public String exportData(
83 PortletDataContext context, String portletId,
84 PortletPreferences preferences)
85 throws PortletDataException {
86
87 try {
88 long rootFolderId = GetterUtil.getLong(
89 preferences.getValue("rootFolderId", null));
90
91 Document doc = SAXReaderUtil.createDocument();
92
93 Element root = doc.addElement("documentlibrary-display-data");
94
95 Element foldersEl = root.addElement("folders");
96 Element fileEntriesEl = root.addElement("file-entries");
97 Element fileShortcutsEl = root.addElement("file-shortcuts");
98 Element fileRanksEl = root.addElement("file-ranks");
99
100 if (rootFolderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
101 List<DLFolder> folders = DLFolderUtil.findByGroupId(
102 context.getGroupId());
103
104 for (DLFolder folder : folders) {
105 DLPortletDataHandlerImpl.exportFolder(
106 context, foldersEl, fileEntriesEl, fileShortcutsEl,
107 fileRanksEl, folder);
108 }
109 }
110 else {
111 DLFolder folder = DLFolderUtil.findByPrimaryKey(rootFolderId);
112
113 root.addAttribute(
114 "root-folder-id", String.valueOf(folder.getFolderId()));
115
116 DLPortletDataHandlerImpl.exportFolder(
117 context, foldersEl, fileEntriesEl, fileShortcutsEl,
118 fileRanksEl, folder);
119 }
120
121 return doc.formattedString();
122 }
123 catch (Exception e) {
124 throw new PortletDataException(e);
125 }
126 }
127
128 public PortletDataHandlerControl[] getExportControls() {
129 return new PortletDataHandlerControl[] {
130 _foldersAndDocuments, _shortcuts, _ranks, _comments, _ratings, _tags
131 };
132 }
133
134 public PortletDataHandlerControl[] getImportControls() {
135 return new PortletDataHandlerControl[] {
136 _foldersAndDocuments, _shortcuts, _ranks, _comments, _ratings, _tags
137 };
138 }
139
140 public PortletPreferences importData(
141 PortletDataContext context, String portletId,
142 PortletPreferences preferences, String data)
143 throws PortletDataException {
144
145 try {
146 Document doc = SAXReaderUtil.read(data);
147
148 Element root = doc.getRootElement();
149
150 List<Element> folderEls = root.element("folders").elements(
151 "folder");
152
153 Map<Long, Long> folderPKs =
154 (Map<Long, Long>)context.getNewPrimaryKeysMap(DLFolder.class);
155
156 for (Element folderEl : folderEls) {
157 String path = folderEl.attributeValue("path");
158
159 if (!context.isPathNotProcessed(path)) {
160 continue;
161 }
162
163 DLFolder folder = (DLFolder)context.getZipEntryAsObject(path);
164
165 DLPortletDataHandlerImpl.importFolder(
166 context, folderPKs, folder);
167 }
168
169 List<Element> fileEntryEls = root.element("file-entries").elements(
170 "file-entry");
171
172 Map<String, String> fileEntryNames =
173 (Map<String, String>)context.getNewPrimaryKeysMap(
174 DLFileEntry.class);
175
176 for (Element fileEntryEl : fileEntryEls) {
177 String path = fileEntryEl.attributeValue("path");
178
179 if (!context.isPathNotProcessed(path)) {
180 continue;
181 }
182
183 DLFileEntry fileEntry =
184 (DLFileEntry)context.getZipEntryAsObject(path);
185
186 String binPath = fileEntryEl.attributeValue("bin-path");
187
188 DLPortletDataHandlerImpl.importFileEntry(
189 context, folderPKs, fileEntryNames, fileEntry, binPath);
190 }
191
192 if (context.getBooleanParameter(_NAMESPACE, "shortcuts")) {
193 List<Element> fileShortcutEls = root.element(
194 "file-shortcuts").elements("file-shortcut");
195
196 for (Element fileShortcutEl : fileShortcutEls) {
197 String path = fileShortcutEl.attributeValue("path");
198
199 if (!context.isPathNotProcessed(path)) {
200 continue;
201 }
202
203 DLFileShortcut fileShortcut =
204 (DLFileShortcut)context.getZipEntryAsObject(path);
205
206 DLPortletDataHandlerImpl.importFileShortcut(
207 context, folderPKs, fileEntryNames, fileShortcut);
208 }
209 }
210
211 if (context.getBooleanParameter(_NAMESPACE, "ranks")) {
212 List<Element> fileRankEls = root.element("file-ranks").elements(
213 "file-rank");
214
215 for (Element fileRankEl : fileRankEls) {
216 String path = fileRankEl.attributeValue("path");
217
218 if (!context.isPathNotProcessed(path)) {
219 continue;
220 }
221
222 DLFileRank fileRank =
223 (DLFileRank)context.getZipEntryAsObject(path);
224
225 DLPortletDataHandlerImpl.importFileRank(
226 context, folderPKs, fileEntryNames, fileRank);
227 }
228 }
229
230 long rootFolderId = GetterUtil.getLong(
231 root.attributeValue("root-folder-id"));
232
233 if (Validator.isNotNull(rootFolderId)) {
234 rootFolderId = MapUtil.getLong(
235 folderPKs, rootFolderId, rootFolderId);
236
237 preferences.setValue(
238 "rootFolderId", String.valueOf(rootFolderId));
239 }
240
241 return preferences;
242 }
243 catch (Exception e) {
244 throw new PortletDataException(e);
245 }
246 }
247
248 private static final String _NAMESPACE = "document_library";
249
250 private static final PortletDataHandlerBoolean _foldersAndDocuments =
251 new PortletDataHandlerBoolean(
252 _NAMESPACE, "folders-and-documents", true, true);
253
254 private static final PortletDataHandlerBoolean _ranks =
255 new PortletDataHandlerBoolean(_NAMESPACE, "ranks");
256
257 private static final PortletDataHandlerBoolean _shortcuts=
258 new PortletDataHandlerBoolean(_NAMESPACE, "shortcuts");
259
260 private static final PortletDataHandlerBoolean _comments =
261 new PortletDataHandlerBoolean(_NAMESPACE, "comments");
262
263 private static final PortletDataHandlerBoolean _ratings =
264 new PortletDataHandlerBoolean(_NAMESPACE, "ratings");
265
266 private static final PortletDataHandlerBoolean _tags =
267 new PortletDataHandlerBoolean(_NAMESPACE, "tags");
268
269 }