1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
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  /**
42   * <a href="DLDisplayPortletDataHandlerImpl.java.html"><b><i>View Source</i></b>
43   * </a>
44   *
45   * @author Raymond Augé
46   */
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 }