001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.documentlibrary.lar;
016    
017    import com.liferay.portal.kernel.lar.BasePortletDataHandler;
018    import com.liferay.portal.kernel.lar.PortletDataContext;
019    import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
020    import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
021    import com.liferay.portal.kernel.repository.model.FileEntry;
022    import com.liferay.portal.kernel.repository.model.Folder;
023    import com.liferay.portal.kernel.util.GetterUtil;
024    import com.liferay.portal.kernel.util.MapUtil;
025    import com.liferay.portal.kernel.util.StringPool;
026    import com.liferay.portal.kernel.xml.Document;
027    import com.liferay.portal.kernel.xml.Element;
028    import com.liferay.portal.kernel.xml.SAXReaderUtil;
029    import com.liferay.portal.util.PropsValues;
030    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
031    
032    import java.util.List;
033    import java.util.Map;
034    
035    import javax.portlet.PortletPreferences;
036    
037    /**
038     * @author Raymond Augé
039     */
040    public class DLDisplayPortletDataHandlerImpl extends BasePortletDataHandler {
041    
042            @Override
043            public PortletDataHandlerControl[] getExportControls() {
044                    return new PortletDataHandlerControl[] {
045                            _foldersAndDocuments, _shortcuts, _previewsAndThumbnails, _ranks
046                    };
047            }
048    
049            @Override
050            public PortletDataHandlerControl[] getExportMetadataControls() {
051                    return new PortletDataHandlerControl[] {
052                            new PortletDataHandlerBoolean(
053                                    _NAMESPACE, "folders-and-documents", true,
054                                    DLPortletDataHandlerImpl.getMetadataControls())
055                    };
056            }
057    
058            @Override
059            public PortletDataHandlerControl[] getImportControls() {
060                    return new PortletDataHandlerControl[] {
061                            _foldersAndDocuments, _shortcuts, _previewsAndThumbnails, _ranks
062                    };
063            }
064    
065            @Override
066            public PortletDataHandlerControl[] getImportMetadataControls() {
067                    return new PortletDataHandlerControl[] {
068                            new PortletDataHandlerBoolean(
069                                    _NAMESPACE, "folders-and-documents", true,
070                                    DLPortletDataHandlerImpl.getMetadataControls())
071                    };
072            }
073    
074            @Override
075            public boolean isPublishToLiveByDefault() {
076                    return PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT;
077            }
078    
079            @Override
080            protected PortletPreferences doDeleteData(
081                            PortletDataContext portletDataContext, String portletId,
082                            PortletPreferences portletPreferences)
083                    throws Exception {
084    
085                    portletPreferences.setValue("rootFolderId", StringPool.BLANK);
086                    portletPreferences.setValue("showFoldersSearch", StringPool.BLANK);
087                    portletPreferences.setValue("showSubfolders", StringPool.BLANK);
088                    portletPreferences.setValue("foldersPerPage", StringPool.BLANK);
089                    portletPreferences.setValue("folderColumns", StringPool.BLANK);
090                    portletPreferences.setValue("fileEntriesPerPage", StringPool.BLANK);
091                    portletPreferences.setValue("fileEntryColumns", StringPool.BLANK);
092                    portletPreferences.setValue("enable-comment-ratings", StringPool.BLANK);
093    
094                    return portletPreferences;
095            }
096    
097            @Override
098            protected String doExportData(
099                            PortletDataContext portletDataContext, String portletId,
100                            PortletPreferences portletPreferences)
101                    throws Exception {
102    
103                    portletDataContext.addPermissions(
104                            "com.liferay.portlet.documentlibrary",
105                            portletDataContext.getScopeGroupId());
106    
107                    long rootFolderId = GetterUtil.getLong(
108                            portletPreferences.getValue("rootFolderId", null));
109    
110                    Document document = SAXReaderUtil.createDocument();
111    
112                    Element rootElement = document.addElement(
113                            "documentlibrary-display-data");
114    
115                    Element fileEntryTypesElement = rootElement.addElement(
116                            "file-entry-types");
117                    Element foldersElement = rootElement.addElement("folders");
118                    Element fileEntriesElement = rootElement.addElement("file-entries");
119                    Element fileShortcutsElement = rootElement.addElement("file-shortcuts");
120                    Element fileRanksElement = rootElement.addElement("file-ranks");
121    
122                    if (rootFolderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
123                            List<Folder> folders = FolderUtil.findByRepositoryId(
124                                    portletDataContext.getScopeGroupId());
125    
126                            for (Folder folder : folders) {
127                                    DLPortletDataHandlerImpl.exportFolder(
128                                            portletDataContext, fileEntryTypesElement, foldersElement,
129                                            fileEntriesElement, fileShortcutsElement, fileRanksElement,
130                                            folder, false);
131                            }
132    
133                            List<FileEntry> fileEntries = FileEntryUtil.findByR_F(
134                                    portletDataContext.getScopeGroupId(),
135                                    DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
136    
137                            for (FileEntry fileEntry : fileEntries) {
138                                    DLPortletDataHandlerImpl.exportFileEntry(
139                                            portletDataContext, fileEntryTypesElement, foldersElement,
140                                            fileEntriesElement, fileRanksElement, fileEntry, true);
141                            }
142                    }
143                    else {
144                            Folder folder = FolderUtil.findByPrimaryKey(rootFolderId);
145    
146                            rootElement.addAttribute(
147                                    "root-folder-id", String.valueOf(folder.getFolderId()));
148    
149                            DLPortletDataHandlerImpl.exportFolder(
150                                    portletDataContext, fileEntryTypesElement, foldersElement,
151                                    fileEntriesElement, fileShortcutsElement, fileRanksElement,
152                                    folder, true);
153                    }
154    
155                    return document.formattedString();
156            }
157    
158            @Override
159            protected PortletPreferences doImportData(
160                            PortletDataContext portletDataContext, String portletId,
161                            PortletPreferences portletPreferences, String data)
162                    throws Exception {
163    
164                    portletDataContext.importPermissions(
165                            "com.liferay.portlet.documentlibrary",
166                            portletDataContext.getSourceGroupId(),
167                            portletDataContext.getScopeGroupId());
168    
169                    Document document = SAXReaderUtil.read(data);
170    
171                    Element rootElement = document.getRootElement();
172    
173                    Element fileEntryTypesElement = rootElement.element("file-entry-types");
174    
175                    List<Element> fileEntryTypeElements = fileEntryTypesElement.elements(
176                            "file-entry-type");
177    
178                    for (Element fileEntryTypeElement : fileEntryTypeElements) {
179                            DLPortletDataHandlerImpl.importFileEntryType(
180                                    portletDataContext, fileEntryTypeElement);
181                    }
182    
183                    Element foldersElement = rootElement.element("folders");
184    
185                    List<Element> folderElements = foldersElement.elements("folder");
186    
187                    for (Element folderElement : folderElements) {
188                            DLPortletDataHandlerImpl.importFolder(
189                                    portletDataContext, folderElement);
190                    }
191    
192                    Element fileEntriesElement = rootElement.element("file-entries");
193    
194                    List<Element> fileEntryElements = fileEntriesElement.elements(
195                            "file-entry");
196    
197                    for (Element fileEntryElement : fileEntryElements) {
198                            DLPortletDataHandlerImpl.importFileEntry(
199                                    portletDataContext, fileEntryElement);
200                    }
201    
202                    if (portletDataContext.getBooleanParameter(_NAMESPACE, "shortcuts")) {
203                            List<Element> fileShortcutElements = rootElement.element(
204                                    "file-shortcuts").elements("file-shortcut");
205    
206                            for (Element fileShortcutElement : fileShortcutElements) {
207                                    DLPortletDataHandlerImpl.importFileShortcut(
208                                            portletDataContext, fileShortcutElement);
209                            }
210                    }
211    
212                    if (portletDataContext.getBooleanParameter(_NAMESPACE, "ranks")) {
213                            Element fileRanksElement = rootElement.element("file-ranks");
214    
215                            List<Element> fileRankElements = fileRanksElement.elements(
216                                    "file-rank");
217    
218                            for (Element fileRankElement : fileRankElements) {
219                                    DLPortletDataHandlerImpl.importFileRank(
220                                            portletDataContext, fileRankElement);
221                            }
222                    }
223    
224                    long rootFolderId = GetterUtil.getLong(
225                            rootElement.attributeValue("root-folder-id"));
226    
227                    if (rootFolderId > 0) {
228                            Map<Long, Long> folderPKs =
229                                    (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
230                                            Folder.class);
231    
232                            rootFolderId = MapUtil.getLong(
233                                    folderPKs, rootFolderId, rootFolderId);
234    
235                            portletPreferences.setValue(
236                                    "rootFolderId", String.valueOf(rootFolderId));
237                    }
238    
239                    return portletPreferences;
240            }
241    
242            private static final String _NAMESPACE = "document_library";
243    
244            private static PortletDataHandlerBoolean _foldersAndDocuments =
245                    new PortletDataHandlerBoolean(
246                            _NAMESPACE, "folders-and-documents", true, true);
247    
248            private static PortletDataHandlerBoolean _previewsAndThumbnails =
249                    new PortletDataHandlerBoolean(_NAMESPACE, "previews-and-thumbnails");
250    
251            private static PortletDataHandlerBoolean _ranks =
252                    new PortletDataHandlerBoolean(_NAMESPACE, "ranks");
253    
254            private static PortletDataHandlerBoolean _shortcuts=
255                    new PortletDataHandlerBoolean(_NAMESPACE, "shortcuts");
256    
257    }