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