001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
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.model.RepositoryEntry;
030    import com.liferay.portal.util.PropsValues;
031    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
032    import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
033    
034    import java.util.List;
035    import java.util.Map;
036    
037    import javax.portlet.PortletPreferences;
038    
039    /**
040     * @author Raymond Augé
041     */
042    public class DLDisplayPortletDataHandlerImpl extends BasePortletDataHandler {
043    
044            @Override
045            public String[] getDataPortletPreferences() {
046                    return new String[] {"rootFolderId"};
047            }
048    
049            @Override
050            public PortletDataHandlerControl[] getExportControls() {
051                    return new PortletDataHandlerControl[] {
052                            _foldersAndDocuments, _shortcuts, _previewsAndThumbnails, _ranks
053                    };
054            }
055    
056            @Override
057            public PortletDataHandlerControl[] getExportMetadataControls() {
058                    return new PortletDataHandlerControl[] {
059                            new PortletDataHandlerBoolean(
060                                    _NAMESPACE, "folders-and-documents", true,
061                                    DLPortletDataHandlerImpl.getMetadataControls())
062                    };
063            }
064    
065            @Override
066            public PortletDataHandlerControl[] getImportControls() {
067                    return new PortletDataHandlerControl[] {
068                            _foldersAndDocuments, _shortcuts, _previewsAndThumbnails, _ranks
069                    };
070            }
071    
072            @Override
073            public PortletDataHandlerControl[] getImportMetadataControls() {
074                    return new PortletDataHandlerControl[] {
075                            new PortletDataHandlerBoolean(
076                                    _NAMESPACE, "folders-and-documents", true,
077                                    DLPortletDataHandlerImpl.getMetadataControls())
078                    };
079            }
080    
081            @Override
082            public boolean isDataLocalized() {
083                    return _DATA_LOCALIZED;
084            }
085    
086            @Override
087            public boolean isPublishToLiveByDefault() {
088                    return PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT;
089            }
090    
091            @Override
092            protected PortletPreferences doDeleteData(
093                            PortletDataContext portletDataContext, String portletId,
094                            PortletPreferences portletPreferences)
095                    throws Exception {
096    
097                    portletPreferences.setValue("rootFolderId", StringPool.BLANK);
098                    portletPreferences.setValue("showFoldersSearch", StringPool.BLANK);
099                    portletPreferences.setValue("showSubfolders", StringPool.BLANK);
100                    portletPreferences.setValue("foldersPerPage", StringPool.BLANK);
101                    portletPreferences.setValue("folderColumns", StringPool.BLANK);
102                    portletPreferences.setValue("fileEntriesPerPage", StringPool.BLANK);
103                    portletPreferences.setValue("fileEntryColumns", StringPool.BLANK);
104                    portletPreferences.setValue("enable-comment-ratings", StringPool.BLANK);
105    
106                    return portletPreferences;
107            }
108    
109            @Override
110            protected String doExportData(
111                            PortletDataContext portletDataContext, String portletId,
112                            PortletPreferences portletPreferences)
113                    throws Exception {
114    
115                    portletDataContext.addPermissions(
116                            "com.liferay.portlet.documentlibrary",
117                            portletDataContext.getScopeGroupId());
118    
119                    long rootFolderId = GetterUtil.getLong(
120                            portletPreferences.getValue("rootFolderId", null));
121    
122                    Document document = SAXReaderUtil.createDocument();
123    
124                    Element rootElement = document.addElement(
125                            "documentlibrary-display-data");
126    
127                    Element fileEntryTypesElement = rootElement.addElement(
128                            "file-entry-types");
129                    Element foldersElement = rootElement.addElement("folders");
130                    Element fileEntriesElement = rootElement.addElement("file-entries");
131                    Element fileShortcutsElement = rootElement.addElement("file-shortcuts");
132                    Element fileRanksElement = rootElement.addElement("file-ranks");
133                    Element repositoriesElement = rootElement.addElement("repositories");
134                    Element repositoryEntriesElement = rootElement.addElement(
135                            "repository-entries");
136    
137                    if (rootFolderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
138                            List<Folder> folders = FolderUtil.findByRepositoryId(
139                                    portletDataContext.getScopeGroupId());
140    
141                            for (Folder folder : folders) {
142                                    DLPortletDataHandlerImpl.exportFolder(
143                                            portletDataContext, fileEntryTypesElement, foldersElement,
144                                            fileEntriesElement, fileShortcutsElement, fileRanksElement,
145                                            repositoriesElement, repositoryEntriesElement, folder,
146                                            false);
147                            }
148    
149                            List<FileEntry> fileEntries = FileEntryUtil.findByR_F(
150                                    portletDataContext.getScopeGroupId(),
151                                    DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
152    
153                            for (FileEntry fileEntry : fileEntries) {
154                                    DLPortletDataHandlerImpl.exportFileEntry(
155                                            portletDataContext, fileEntryTypesElement, foldersElement,
156                                            fileEntriesElement, fileRanksElement, repositoriesElement,
157                                            repositoryEntriesElement, fileEntry, true);
158                            }
159                    }
160                    else {
161                            Folder folder = DLAppLocalServiceUtil.getFolder(rootFolderId);
162    
163                            rootElement.addAttribute(
164                                    "root-folder-id", String.valueOf(folder.getFolderId()));
165                            rootElement.addAttribute(
166                                    "default-repository",
167                                    String.valueOf(folder.isDefaultRepository()));
168    
169                            DLPortletDataHandlerImpl.exportFolder(
170                                    portletDataContext, fileEntryTypesElement, foldersElement,
171                                    fileEntriesElement, fileShortcutsElement, fileRanksElement,
172                                    repositoriesElement, repositoryEntriesElement, folder, true);
173                    }
174    
175                    return document.formattedString();
176            }
177    
178            @Override
179            protected PortletPreferences doImportData(
180                            PortletDataContext portletDataContext, String portletId,
181                            PortletPreferences portletPreferences, String data)
182                    throws Exception {
183    
184                    portletDataContext.importPermissions(
185                            "com.liferay.portlet.documentlibrary",
186                            portletDataContext.getSourceGroupId(),
187                            portletDataContext.getScopeGroupId());
188    
189                    Document document = SAXReaderUtil.read(data);
190    
191                    Element rootElement = document.getRootElement();
192    
193                    Element fileEntryTypesElement = rootElement.element("file-entry-types");
194    
195                    List<Element> fileEntryTypeElements = fileEntryTypesElement.elements(
196                            "file-entry-type");
197    
198                    for (Element fileEntryTypeElement : fileEntryTypeElements) {
199                            DLPortletDataHandlerImpl.importFileEntryType(
200                                    portletDataContext, fileEntryTypeElement);
201                    }
202    
203                    Element foldersElement = rootElement.element("folders");
204    
205                    List<Element> folderElements = foldersElement.elements("folder");
206    
207                    for (Element folderElement : folderElements) {
208                            DLPortletDataHandlerImpl.importFolder(
209                                    portletDataContext, folderElement);
210                    }
211    
212                    Element fileEntriesElement = rootElement.element("file-entries");
213    
214                    List<Element> fileEntryElements = fileEntriesElement.elements(
215                            "file-entry");
216    
217                    for (Element fileEntryElement : fileEntryElements) {
218                            DLPortletDataHandlerImpl.importFileEntry(
219                                    portletDataContext, fileEntryElement);
220                    }
221    
222                    if (portletDataContext.getBooleanParameter(_NAMESPACE, "shortcuts")) {
223                            List<Element> fileShortcutElements = rootElement.element(
224                                    "file-shortcuts").elements("file-shortcut");
225    
226                            for (Element fileShortcutElement : fileShortcutElements) {
227                                    DLPortletDataHandlerImpl.importFileShortcut(
228                                            portletDataContext, fileShortcutElement);
229                            }
230                    }
231    
232                    if (portletDataContext.getBooleanParameter(_NAMESPACE, "ranks")) {
233                            Element fileRanksElement = rootElement.element("file-ranks");
234    
235                            List<Element> fileRankElements = fileRanksElement.elements(
236                                    "file-rank");
237    
238                            for (Element fileRankElement : fileRankElements) {
239                                    DLPortletDataHandlerImpl.importFileRank(
240                                            portletDataContext, fileRankElement);
241                            }
242                    }
243    
244                    long rootFolderId = GetterUtil.getLong(
245                            rootElement.attributeValue("root-folder-id"));
246                    boolean defaultRepository = GetterUtil.getBoolean(
247                            rootElement.attributeValue("default-repository"), true);
248    
249                    if (rootFolderId > 0) {
250                            Map<Long, Long> folderIds = null;
251    
252                            if (defaultRepository) {
253                                    folderIds =
254                                            (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
255                                                    Folder.class);
256                            }
257                            else {
258                                    folderIds =
259                                            (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
260                                                    RepositoryEntry.class);
261                            }
262    
263                            rootFolderId = MapUtil.getLong(
264                                    folderIds, rootFolderId, rootFolderId);
265    
266                            portletPreferences.setValue(
267                                    "rootFolderId", String.valueOf(rootFolderId));
268                    }
269    
270                    return portletPreferences;
271            }
272    
273            private static final boolean _DATA_LOCALIZED = true;
274    
275            private static final String _NAMESPACE = "document_library";
276    
277            private static PortletDataHandlerBoolean _foldersAndDocuments =
278                    new PortletDataHandlerBoolean(
279                            _NAMESPACE, "folders-and-documents", true, true);
280    
281            private static PortletDataHandlerBoolean _previewsAndThumbnails =
282                    new PortletDataHandlerBoolean(_NAMESPACE, "previews-and-thumbnails");
283    
284            private static PortletDataHandlerBoolean _ranks =
285                    new PortletDataHandlerBoolean(_NAMESPACE, "ranks");
286    
287            private static PortletDataHandlerBoolean _shortcuts=
288                    new PortletDataHandlerBoolean(_NAMESPACE, "shortcuts");
289    
290    }