001    /**
002     * Copyright (c) 2000-2013 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.bookmarks.lar;
016    
017    import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018    import com.liferay.portal.kernel.lar.BasePortletDataHandler;
019    import com.liferay.portal.kernel.lar.ExportImportPathUtil;
020    import com.liferay.portal.kernel.lar.PortletDataContext;
021    import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
022    import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
023    import com.liferay.portal.kernel.lar.StagedModelType;
024    import com.liferay.portal.kernel.util.GetterUtil;
025    import com.liferay.portal.kernel.util.MapUtil;
026    import com.liferay.portal.kernel.xml.Element;
027    import com.liferay.portal.model.Portlet;
028    import com.liferay.portal.service.PortletLocalServiceUtil;
029    import com.liferay.portal.util.PropsValues;
030    import com.liferay.portlet.bookmarks.model.BookmarksEntry;
031    import com.liferay.portlet.bookmarks.model.BookmarksFolder;
032    import com.liferay.portlet.bookmarks.model.BookmarksFolderConstants;
033    import com.liferay.portlet.bookmarks.service.BookmarksEntryLocalServiceUtil;
034    import com.liferay.portlet.bookmarks.service.BookmarksFolderLocalServiceUtil;
035    import com.liferay.portlet.bookmarks.service.permission.BookmarksPermission;
036    import com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryExportActionableDynamicQuery;
037    import com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderExportActionableDynamicQuery;
038    
039    import java.util.List;
040    import java.util.Map;
041    
042    import javax.portlet.PortletPreferences;
043    
044    /**
045     * @author Jorge Ferrer
046     * @author Bruno Farache
047     * @author Raymond Aug??
048     * @author Juan Fern??ndez
049     * @author Mate Thurzo
050     * @author Daniel Kocsis
051     */
052    public class BookmarksPortletDataHandler extends BasePortletDataHandler {
053    
054            public static final String NAMESPACE = "bookmarks";
055    
056            public BookmarksPortletDataHandler() {
057                    setDataPortletPreferences("rootFolderId");
058                    setDeletionSystemEventStagedModelTypes(
059                            new StagedModelType(BookmarksEntry.class),
060                            new StagedModelType(BookmarksFolder.class));
061                    setExportControls(
062                            new PortletDataHandlerBoolean(
063                                    NAMESPACE, "entries", true, false, null,
064                                    BookmarksEntry.class.getName()));
065                    setImportControls(getExportControls());
066                    setPublishToLiveByDefault(
067                            PropsValues.BOOKMARKS_PUBLISH_TO_LIVE_BY_DEFAULT);
068            }
069    
070            @Override
071            protected PortletPreferences doDeleteData(
072                            PortletDataContext portletDataContext, String portletId,
073                            PortletPreferences portletPreferences)
074                    throws Exception {
075    
076                    if (portletDataContext.addPrimaryKey(
077                                    BookmarksPortletDataHandler.class, "deleteData")) {
078    
079                            return portletPreferences;
080                    }
081    
082                    BookmarksFolderLocalServiceUtil.deleteFolders(
083                            portletDataContext.getScopeGroupId());
084    
085                    BookmarksEntryLocalServiceUtil.deleteEntries(
086                            portletDataContext.getScopeGroupId(),
087                            BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID);
088    
089                    return portletPreferences;
090            }
091    
092            @Override
093            protected String doExportData(
094                            final PortletDataContext portletDataContext, String portletId,
095                            PortletPreferences portletPreferences)
096                    throws Exception {
097    
098                    Element rootElement = addExportDataRootElement(portletDataContext);
099    
100                    if (!portletDataContext.getBooleanParameter(NAMESPACE, "entries")) {
101                            return getExportDataRootElementString(rootElement);
102                    }
103    
104                    portletDataContext.addPortletPermissions(
105                            BookmarksPermission.RESOURCE_NAME);
106    
107                    rootElement.addAttribute(
108                            "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
109    
110                    ActionableDynamicQuery folderActionableDynamicQuery =
111                            new BookmarksFolderExportActionableDynamicQuery(portletDataContext);
112    
113                    folderActionableDynamicQuery.performActions();
114    
115                    ActionableDynamicQuery entryActionableDynamicQuery =
116                            new BookmarksEntryExportActionableDynamicQuery(portletDataContext);
117    
118                    entryActionableDynamicQuery.performActions();
119    
120                    return getExportDataRootElementString(rootElement);
121            }
122    
123            @Override
124            protected PortletPreferences doImportData(
125                            PortletDataContext portletDataContext, String portletId,
126                            PortletPreferences portletPreferences, String data)
127                    throws Exception {
128    
129                    if (!portletDataContext.getBooleanParameter(NAMESPACE, "entries")) {
130                            return null;
131                    }
132    
133                    portletDataContext.importPortletPermissions(
134                            BookmarksPermission.RESOURCE_NAME);
135    
136                    Element foldersElement = portletDataContext.getImportDataGroupElement(
137                            BookmarksFolder.class);
138    
139                    List<Element> folderElements = foldersElement.elements();
140    
141                    for (Element folderElement : folderElements) {
142                            StagedModelDataHandlerUtil.importStagedModel(
143                                    portletDataContext, folderElement);
144                    }
145    
146                    Element entriesElement = portletDataContext.getImportDataGroupElement(
147                            BookmarksEntry.class);
148    
149                    List<Element> entryElements = entriesElement.elements();
150    
151                    for (Element entryElement : entryElements) {
152                            StagedModelDataHandlerUtil.importStagedModel(
153                                    portletDataContext, entryElement);
154                    }
155    
156                    return null;
157            }
158    
159            @Override
160            protected void doPrepareManifestSummary(
161                            PortletDataContext portletDataContext,
162                            PortletPreferences portletPreferences)
163                    throws Exception {
164    
165                    ActionableDynamicQuery entryExportActionableDynamicQuery =
166                            new BookmarksEntryExportActionableDynamicQuery(portletDataContext);
167    
168                    entryExportActionableDynamicQuery.performCount();
169    
170                    ActionableDynamicQuery folderExportActionableDynamicQuery =
171                            new BookmarksFolderExportActionableDynamicQuery(portletDataContext);
172    
173                    folderExportActionableDynamicQuery.performCount();
174            }
175    
176            @Override
177            protected PortletPreferences doProcessExportPortletPreferences(
178                            PortletDataContext portletDataContext, String portletId,
179                            PortletPreferences portletPreferences)
180                    throws Exception {
181    
182                    long rootFolderId = GetterUtil.getLong(
183                            portletPreferences.getValue("rootFolderId", null));
184    
185                    if (rootFolderId != BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
186                            BookmarksFolder folder = BookmarksFolderLocalServiceUtil.getFolder(
187                                    rootFolderId);
188    
189                            Portlet portlet = PortletLocalServiceUtil.getPortletById(
190                                    portletDataContext.getCompanyId(), portletId);
191    
192                            portletDataContext.addReferenceElement(
193                                    portlet, portletDataContext.getExportDataRootElement(), folder,
194                                    PortletDataContext.REFERENCE_TYPE_DEPENDENCY,
195                                    !portletDataContext.getBooleanParameter(NAMESPACE, "entries"));
196                    }
197    
198                    return portletPreferences;
199            }
200    
201            @Override
202            protected PortletPreferences doProcessImportPortletPreferences(
203                            PortletDataContext portletDataContext, String portletId,
204                            PortletPreferences portletPreferences)
205                    throws Exception {
206    
207                    long rootFolderId = GetterUtil.getLong(
208                            portletPreferences.getValue("rootFolderId", null));
209    
210                    if (rootFolderId > 0) {
211                            String rootFolderPath = ExportImportPathUtil.getModelPath(
212                                    portletDataContext, BookmarksFolder.class.getName(),
213                                    rootFolderId);
214    
215                            BookmarksFolder folder =
216                                    (BookmarksFolder)portletDataContext.getZipEntryAsObject(
217                                            rootFolderPath);
218    
219                            StagedModelDataHandlerUtil.importStagedModel(
220                                    portletDataContext, folder);
221    
222                            Map<Long, Long> folderIds =
223                                    (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
224                                            BookmarksFolder.class);
225    
226                            rootFolderId = MapUtil.getLong(
227                                    folderIds, rootFolderId, rootFolderId);
228    
229                            portletPreferences.setValue(
230                                    "rootFolderId", String.valueOf(rootFolderId));
231                    }
232    
233                    return portletPreferences;
234            }
235    
236    }