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.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  /**
50   * <a href="DLDisplayPortletDataHandlerImpl.java.html"><b><i>View Source</i></b>
51   * </a>
52   *
53   * @author Raymond Augé
54   */
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 }