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