1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
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  /**
50   * <a href="DLDisplayPortletDataHandlerImpl.java.html"><b><i>View Source</i></b>
51   * </a>
52   *
53   * @author Raymond Augé
54   *
55   */
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 }