001    /**
002     * Copyright (c) 2000-2011 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.Folder;
022    import com.liferay.portal.kernel.util.GetterUtil;
023    import com.liferay.portal.kernel.util.MapUtil;
024    import com.liferay.portal.kernel.util.StringPool;
025    import com.liferay.portal.kernel.xml.Document;
026    import com.liferay.portal.kernel.xml.Element;
027    import com.liferay.portal.kernel.xml.SAXReaderUtil;
028    import com.liferay.portal.util.PropsValues;
029    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
030    
031    import java.util.List;
032    import java.util.Map;
033    
034    import javax.portlet.PortletPreferences;
035    
036    /**
037     * @author Raymond Augé
038     */
039    public class DLDisplayPortletDataHandlerImpl extends BasePortletDataHandler {
040    
041            @Override
042            public PortletDataHandlerControl[] getExportControls() {
043                    return new PortletDataHandlerControl[] {
044                            _foldersAndDocuments, _shortcuts, _ranks, _comments, _ratings, _tags
045                    };
046            }
047    
048            @Override
049            public PortletDataHandlerControl[] getImportControls() {
050                    return new PortletDataHandlerControl[] {
051                            _foldersAndDocuments, _shortcuts, _ranks, _comments, _ratings, _tags
052                    };
053            }
054    
055            @Override
056            public boolean isPublishToLiveByDefault() {
057                    return PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT;
058            }
059    
060            @Override
061            protected PortletPreferences doDeleteData(
062                            PortletDataContext portletDataContext, String portletId,
063                            PortletPreferences portletPreferences)
064                    throws Exception {
065    
066                    portletPreferences.setValue("rootFolderId", StringPool.BLANK);
067                    portletPreferences.setValue("showFoldersSearch", StringPool.BLANK);
068                    portletPreferences.setValue("showSubfolders", StringPool.BLANK);
069                    portletPreferences.setValue("foldersPerPage", StringPool.BLANK);
070                    portletPreferences.setValue("folderColumns", StringPool.BLANK);
071                    portletPreferences.setValue("fileEntriesPerPage", StringPool.BLANK);
072                    portletPreferences.setValue("fileEntryColumns", StringPool.BLANK);
073                    portletPreferences.setValue("enable-comment-ratings", StringPool.BLANK);
074    
075                    return portletPreferences;
076            }
077    
078            @Override
079            protected String doExportData(
080                            PortletDataContext portletDataContext, String portletId,
081                            PortletPreferences portletPreferences)
082                    throws Exception {
083    
084                    portletDataContext.addPermissions(
085                            "com.liferay.portlet.documentlibrary",
086                            portletDataContext.getScopeGroupId());
087    
088                    long rootFolderId = GetterUtil.getLong(
089                            portletPreferences.getValue("rootFolderId", null));
090    
091                    Document document = SAXReaderUtil.createDocument();
092    
093                    Element rootElement = document.addElement(
094                            "documentlibrary-display-data");
095    
096                    Element fileEntryTypesElement = rootElement.addElement(
097                            "file-entry-types");
098                    Element foldersElement = rootElement.addElement("folders");
099                    Element fileEntriesElement = rootElement.addElement("file-entries");
100                    Element fileShortcutsElement = rootElement.addElement("file-shortcuts");
101                    Element fileRanksElement = rootElement.addElement("file-ranks");
102    
103                    if (rootFolderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
104                            List<Folder> folders = FolderUtil.findByRepositoryId(
105                                    portletDataContext.getScopeGroupId());
106    
107                            for (Folder folder : folders) {
108                                    DLPortletDataHandlerImpl.exportFolder(
109                                            portletDataContext, fileEntryTypesElement, foldersElement,
110                                            fileEntriesElement, fileShortcutsElement, fileRanksElement,
111                                            folder, false);
112                            }
113                    }
114                    else {
115                            Folder folder = FolderUtil.findByPrimaryKey(rootFolderId);
116    
117                            rootElement.addAttribute(
118                                    "root-folder-id", String.valueOf(folder.getFolderId()));
119    
120                            DLPortletDataHandlerImpl.exportFolder(
121                                    portletDataContext, fileEntryTypesElement, foldersElement,
122                                    fileEntriesElement, fileShortcutsElement, fileRanksElement,
123                                    folder, true);
124                    }
125    
126                    return document.formattedString();
127            }
128    
129            @Override
130            protected PortletPreferences doImportData(
131                            PortletDataContext portletDataContext, String portletId,
132                            PortletPreferences portletPreferences, String data)
133                    throws Exception {
134    
135                    portletDataContext.importPermissions(
136                            "com.liferay.portlet.documentlibrary",
137                            portletDataContext.getSourceGroupId(),
138                            portletDataContext.getScopeGroupId());
139    
140                    Document document = SAXReaderUtil.read(data);
141    
142                    Element rootElement = document.getRootElement();
143    
144                    Element fileEntryTypesElement = rootElement.element(
145                            "file-entry-types");
146    
147                    List<Element> fileEntryTypeElements = fileEntryTypesElement.elements(
148                            "file-entry-type");
149    
150                    for (Element fileEntryTypeElement : fileEntryTypeElements) {
151                            DLPortletDataHandlerImpl.importFileEntryType(
152                                    portletDataContext, fileEntryTypeElement);
153                    }
154    
155                    Element foldersElement = rootElement.element("folders");
156    
157                    List<Element> folderElements = foldersElement.elements("folder");
158    
159                    for (Element folderElement : folderElements) {
160                            DLPortletDataHandlerImpl.importFolder(
161                                    portletDataContext, folderElement);
162                    }
163    
164                    Element fileEntriesElement = rootElement.element("file-entries");
165    
166                    List<Element> fileEntryElements = fileEntriesElement.elements(
167                            "file-entry");
168    
169                    for (Element fileEntryElement : fileEntryElements) {
170                            DLPortletDataHandlerImpl.importFileEntry(
171                                    portletDataContext, fileEntryElement);
172                    }
173    
174                    if (portletDataContext.getBooleanParameter(_NAMESPACE, "shortcuts")) {
175                            List<Element> fileShortcutElements = rootElement.element(
176                                    "file-shortcuts").elements("file-shortcut");
177    
178                            for (Element fileShortcutElement : fileShortcutElements) {
179                                    DLPortletDataHandlerImpl.importFileShortcut(
180                                            portletDataContext, fileShortcutElement);
181                            }
182                    }
183    
184                    if (portletDataContext.getBooleanParameter(_NAMESPACE, "ranks")) {
185                            Element fileRanksElement = rootElement.element("file-ranks");
186    
187                            List<Element> fileRankElements = fileRanksElement.elements(
188                                    "file-rank");
189    
190                            for (Element fileRankElement : fileRankElements) {
191                                    DLPortletDataHandlerImpl.importFileRank(
192                                            portletDataContext, fileRankElement);
193                            }
194                    }
195    
196                    long rootFolderId = GetterUtil.getLong(
197                            rootElement.attributeValue("root-folder-id"));
198    
199                    if (rootFolderId > 0) {
200                            Map<Long, Long> folderPKs =
201                                    (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
202                                            Folder.class);
203    
204                            rootFolderId = MapUtil.getLong(
205                                    folderPKs, rootFolderId, rootFolderId);
206    
207                            portletPreferences.setValue(
208                                    "rootFolderId", String.valueOf(rootFolderId));
209                    }
210    
211                    return portletPreferences;
212            }
213    
214            private static final String _NAMESPACE = "document_library";
215    
216            private static PortletDataHandlerBoolean _comments =
217                    new PortletDataHandlerBoolean(_NAMESPACE, "comments");
218    
219            private static PortletDataHandlerBoolean _foldersAndDocuments =
220                    new PortletDataHandlerBoolean(
221                            _NAMESPACE, "folders-and-documents", true, true);
222    
223            private static PortletDataHandlerBoolean _ranks =
224                    new PortletDataHandlerBoolean(_NAMESPACE, "ranks");
225    
226            private static PortletDataHandlerBoolean _ratings =
227                    new PortletDataHandlerBoolean(_NAMESPACE, "ratings");
228    
229            private static PortletDataHandlerBoolean _shortcuts=
230                    new PortletDataHandlerBoolean(_NAMESPACE, "shortcuts");
231    
232            private static PortletDataHandlerBoolean _tags =
233                    new PortletDataHandlerBoolean(_NAMESPACE, "tags");
234    
235    }