001    /**
002     * Copyright (c) 2000-present 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.asset.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.PortletDataContext;
020    import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
021    import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
022    import com.liferay.portal.kernel.lar.StagedModelType;
023    import com.liferay.portal.kernel.lar.xstream.XStreamAliasRegistryUtil;
024    import com.liferay.portal.kernel.xml.Element;
025    import com.liferay.portlet.asset.model.AssetCategory;
026    import com.liferay.portlet.asset.model.AssetVocabulary;
027    import com.liferay.portlet.asset.model.impl.AssetCategoryImpl;
028    import com.liferay.portlet.asset.model.impl.AssetVocabularyImpl;
029    import com.liferay.portlet.asset.service.AssetCategoryLocalServiceUtil;
030    import com.liferay.portlet.asset.service.AssetVocabularyLocalServiceUtil;
031    
032    import java.util.List;
033    
034    import javax.portlet.PortletPreferences;
035    
036    /**
037     * @author Mate Thurzo
038     */
039    public class AssetCategoryPortletDataHandler extends BasePortletDataHandler {
040    
041            public static final String NAMESPACE = "asset_category";
042    
043            public AssetCategoryPortletDataHandler() {
044                    setDataAlwaysStaged(true);
045                    setDeletionSystemEventStagedModelTypes(
046                            new StagedModelType(AssetCategory.class),
047                            new StagedModelType(AssetVocabulary.class));
048                    setExportControls(
049                            new PortletDataHandlerBoolean(
050                                    NAMESPACE, "categories", true, false, null,
051                                    AssetCategory.class.getName()),
052                            new PortletDataHandlerBoolean(
053                                    NAMESPACE, "vocabularies", true, false, null,
054                                    AssetVocabulary.class.getName()));
055                    setPublishToLiveByDefault(true);
056    
057                    XStreamAliasRegistryUtil.register(
058                            AssetCategoryImpl.class, "AssetCategory");
059                    XStreamAliasRegistryUtil.register(
060                            AssetVocabularyImpl.class, "AssetVocabulary");
061            }
062    
063            @Override
064            protected PortletPreferences doDeleteData(
065                            PortletDataContext portletDataContext, String portletId,
066                            PortletPreferences portletPreferences)
067                    throws Exception {
068    
069                    if (portletDataContext.addPrimaryKey(
070                                    AssetCategoryPortletDataHandler.class, "deleteData")) {
071    
072                            return portletPreferences;
073                    }
074    
075                    AssetVocabularyLocalServiceUtil.deleteVocabularies(
076                            portletDataContext.getScopeGroupId());
077    
078                    return portletPreferences;
079            }
080    
081            @Override
082            protected String doExportData(
083                            PortletDataContext portletDataContext, String portletId,
084                            PortletPreferences portletPreferences)
085                    throws Exception {
086    
087                    Element rootElement = addExportDataRootElement(portletDataContext);
088    
089                    rootElement.addAttribute(
090                            "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
091    
092                    if (portletDataContext.getBooleanParameter(NAMESPACE, "categories")) {
093                            ActionableDynamicQuery categoryActionableDynamicQuery =
094                                    getCategoryActionableDynamicQuery(portletDataContext);
095    
096                            categoryActionableDynamicQuery.performActions();
097                    }
098    
099                    if (portletDataContext.getBooleanParameter(NAMESPACE, "vocabularies")) {
100                            ActionableDynamicQuery vocabularyActionableDynamicQuery =
101                                    getVocabularyActionableDynamicQuery(portletDataContext);
102    
103                            vocabularyActionableDynamicQuery.performActions();
104                    }
105    
106                    return getExportDataRootElementString(rootElement);
107            }
108    
109            @Override
110            protected PortletPreferences doImportData(
111                            PortletDataContext portletDataContext, String portletId,
112                            PortletPreferences portletPreferences, String data)
113                    throws Exception {
114    
115                    if (portletDataContext.getBooleanParameter(NAMESPACE, "categories")) {
116                            Element categoriesElement =
117                                    portletDataContext.getImportDataGroupElement(
118                                            AssetCategory.class);
119    
120                            List<Element> categoryElements = categoriesElement.elements();
121    
122                            for (Element categoryElement : categoryElements) {
123                                    StagedModelDataHandlerUtil.importStagedModel(
124                                            portletDataContext, categoryElement);
125                            }
126                    }
127    
128                    if (portletDataContext.getBooleanParameter(NAMESPACE, "vocabularies")) {
129                            Element vocabulariesElement =
130                                    portletDataContext.getImportDataGroupElement(
131                                            AssetVocabulary.class);
132    
133                            List<Element> vocabularyElements = vocabulariesElement.elements();
134    
135                            for (Element vocabularyElement : vocabularyElements) {
136                                    StagedModelDataHandlerUtil.importStagedModel(
137                                            portletDataContext, vocabularyElement);
138                            }
139                    }
140    
141                    return null;
142            }
143    
144            @Override
145            protected void doPrepareManifestSummary(
146                            PortletDataContext portletDataContext,
147                            PortletPreferences portletPreferences)
148                    throws Exception {
149    
150                    ActionableDynamicQuery categoryActionableDynamicQuery =
151                            getCategoryActionableDynamicQuery(portletDataContext);
152    
153                    categoryActionableDynamicQuery.performCount();
154    
155                    ActionableDynamicQuery vocabularyActionableDynamicQuery =
156                            getVocabularyActionableDynamicQuery(portletDataContext);
157    
158                    vocabularyActionableDynamicQuery.performCount();
159            }
160    
161            protected ActionableDynamicQuery getCategoryActionableDynamicQuery(
162                    final PortletDataContext portletDataContext) {
163    
164                    ActionableDynamicQuery actionableDynamicQuery =
165                            AssetCategoryLocalServiceUtil.getExportActionableDynamicQuery(
166                                    portletDataContext);
167    
168                    // Override date range criteria
169    
170                    actionableDynamicQuery.setAddCriteriaMethod(null);
171    
172                    return actionableDynamicQuery;
173            }
174    
175            protected ActionableDynamicQuery getVocabularyActionableDynamicQuery(
176                    final PortletDataContext portletDataContext) {
177    
178                    ActionableDynamicQuery actionableDynamicQuery =
179                            AssetVocabularyLocalServiceUtil.getExportActionableDynamicQuery(
180                                    portletDataContext);
181    
182                    // Override date range criteria
183    
184                    actionableDynamicQuery.setAddCriteriaMethod(null);
185    
186                    return actionableDynamicQuery;
187            }
188    
189    }