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.dynamicdatalists.lar;
016    
017    import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018    import com.liferay.portal.kernel.dao.orm.DynamicQuery;
019    import com.liferay.portal.kernel.dao.orm.Property;
020    import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
021    import com.liferay.portal.kernel.exception.PortalException;
022    import com.liferay.portal.kernel.exception.SystemException;
023    import com.liferay.portal.kernel.lar.BasePortletDataHandler;
024    import com.liferay.portal.kernel.lar.PortletDataContext;
025    import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
026    import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
027    import com.liferay.portal.kernel.lar.StagedModelType;
028    import com.liferay.portal.kernel.xml.Element;
029    import com.liferay.portal.util.PortalUtil;
030    import com.liferay.portlet.dynamicdatalists.model.DDLRecordSet;
031    import com.liferay.portlet.dynamicdatalists.service.DDLRecordSetLocalServiceUtil;
032    import com.liferay.portlet.dynamicdatalists.service.permission.DDLPermission;
033    import com.liferay.portlet.dynamicdatalists.service.persistence.DDLRecordSetExportActionableDynamicQuery;
034    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
035    import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
036    import com.liferay.portlet.dynamicdatamapping.service.persistence.DDMStructureExportActionableDynamicQuery;
037    
038    import java.util.ArrayList;
039    import java.util.List;
040    
041    import javax.portlet.PortletPreferences;
042    
043    /**
044     * @author Michael C. Han
045     */
046    public class DDLPortletDataHandler extends BasePortletDataHandler {
047    
048            public static final String NAMESPACE = "dynamic_data_lists";
049    
050            public DDLPortletDataHandler() {
051                    setDataLocalized(true);
052                    setDeletionSystemEventStagedModelTypes(
053                            new StagedModelType(DDLRecordSet.class));
054                    setExportControls(
055                            new PortletDataHandlerBoolean(
056                                    NAMESPACE, "record-sets", true, false, null,
057                                    DDLRecordSet.class.getName()),
058                            new PortletDataHandlerBoolean(
059                                    NAMESPACE, "data-definitions", true, false, null,
060                                    DDMStructure.class.getName(), DDLRecordSet.class.getName()));
061                    setImportControls(getExportControls());
062            }
063    
064            @Override
065            protected PortletPreferences doDeleteData(
066                            PortletDataContext portletDataContext, String portletId,
067                            PortletPreferences portletPreferences)
068                    throws Exception {
069    
070                    if (portletDataContext.addPrimaryKey(
071                                    DDLPortletDataHandler.class, "deleteData")) {
072    
073                            return portletPreferences;
074                    }
075    
076                    DDLRecordSetLocalServiceUtil.deleteRecordSets(
077                            portletDataContext.getScopeGroupId());
078    
079                    return portletPreferences;
080            }
081    
082            @Override
083            protected String doExportData(
084                            final PortletDataContext portletDataContext, String portletId,
085                            PortletPreferences portletPreferences)
086                    throws Exception {
087    
088                    portletDataContext.addPortletPermissions(DDLPermission.RESOURCE_NAME);
089    
090                    Element rootElement = addExportDataRootElement(portletDataContext);
091    
092                    if (portletDataContext.getBooleanParameter(
093                                    NAMESPACE, "data-definitions")) {
094    
095                            List<DDMTemplate> ddmTemplates = new ArrayList<DDMTemplate>();
096    
097                            ActionableDynamicQuery ddmStructureActionableDynamicQuery =
098                                    getDDMStructureActionableDynamicQuery(
099                                            portletDataContext, ddmTemplates);
100    
101                            ddmStructureActionableDynamicQuery.performActions();
102    
103                            for (DDMTemplate ddmTemplate : ddmTemplates) {
104                                    StagedModelDataHandlerUtil.exportStagedModel(
105                                            portletDataContext, ddmTemplate);
106                            }
107                    }
108    
109                    if (portletDataContext.getBooleanParameter(NAMESPACE, "record-sets")) {
110                            ActionableDynamicQuery recordSetActionableDynamicQuery =
111                                    new DDLRecordSetExportActionableDynamicQuery(
112                                            portletDataContext);
113    
114                            recordSetActionableDynamicQuery.performActions();
115                    }
116    
117                    return getExportDataRootElementString(rootElement);
118            }
119    
120            @Override
121            protected PortletPreferences doImportData(
122                            PortletDataContext portletDataContext, String portletId,
123                            PortletPreferences portletPreferences, String data)
124                    throws Exception {
125    
126                    portletDataContext.importPortletPermissions(
127                            DDLPermission.RESOURCE_NAME);
128    
129                    if (portletDataContext.getBooleanParameter(
130                                    NAMESPACE, "data-definitions")) {
131    
132                            Element ddmStructuresElement =
133                                    portletDataContext.getImportDataGroupElement(
134                                            DDMStructure.class);
135    
136                            List<Element> ddmStructureElements =
137                                    ddmStructuresElement.elements();
138    
139                            for (Element ddmStructureElement : ddmStructureElements) {
140                                    StagedModelDataHandlerUtil.importStagedModel(
141                                            portletDataContext, ddmStructureElement);
142                            }
143    
144                            Element ddmTemplatesElement =
145                                    portletDataContext.getImportDataGroupElement(DDMTemplate.class);
146    
147                            List<Element> ddmTemplateElements = ddmTemplatesElement.elements();
148    
149                            for (Element ddmTemplateElement : ddmTemplateElements) {
150                                    StagedModelDataHandlerUtil.importStagedModel(
151                                            portletDataContext, ddmTemplateElement);
152                            }
153                    }
154    
155                    if (portletDataContext.getBooleanParameter(NAMESPACE, "record-sets")) {
156                            Element recordSetsElement =
157                                    portletDataContext.getImportDataGroupElement(
158                                            DDLRecordSet.class);
159    
160                            List<Element> recordSetElements = recordSetsElement.elements();
161    
162                            for (Element recordSetElement : recordSetElements) {
163                                    StagedModelDataHandlerUtil.importStagedModel(
164                                            portletDataContext, recordSetElement);
165                            }
166                    }
167    
168                    return portletPreferences;
169            }
170    
171            @Override
172            protected void doPrepareManifestSummary(
173                            PortletDataContext portletDataContext,
174                            PortletPreferences portletPreferences)
175                    throws Exception {
176    
177                    List<DDMTemplate> ddmTemplates = new ArrayList<DDMTemplate>();
178    
179                    ActionableDynamicQuery ddmStructureActionableDynamicQuery =
180                            getDDMStructureActionableDynamicQuery(
181                                    portletDataContext, ddmTemplates);
182    
183                    ddmStructureActionableDynamicQuery.performCount();
184    
185                    ActionableDynamicQuery recordSetActionableDynamicQuery =
186                            new DDLRecordSetExportActionableDynamicQuery(portletDataContext);
187    
188                    recordSetActionableDynamicQuery.performCount();
189            }
190    
191            protected ActionableDynamicQuery getDDMStructureActionableDynamicQuery(
192                            final PortletDataContext portletDataContext,
193                            final List<DDMTemplate> ddmTemplates)
194                    throws SystemException {
195    
196                    return new DDMStructureExportActionableDynamicQuery(
197                            portletDataContext) {
198    
199                            @Override
200                            protected void addCriteria(DynamicQuery dynamicQuery) {
201                                    super.addCriteria(dynamicQuery);
202    
203                                    Property classNameIdProperty = PropertyFactoryUtil.forName(
204                                            "classNameId");
205    
206                                    long classNameId = PortalUtil.getClassNameId(
207                                            DDLRecordSet.class);
208    
209                                    dynamicQuery.add(classNameIdProperty.eq(classNameId));
210                            }
211    
212                            @Override
213                            protected StagedModelType getStagedModelType() {
214                                    return new StagedModelType(
215                                            DDMStructure.class.getName(), DDLRecordSet.class.getName());
216                            }
217    
218                            @Override
219                            protected void performAction(Object object) throws PortalException {
220                                    DDMStructure ddmStructure = (DDMStructure)object;
221    
222                                    StagedModelDataHandlerUtil.exportStagedModel(
223                                            portletDataContext, ddmStructure);
224    
225                                    try {
226                                            ddmTemplates.addAll(ddmStructure.getTemplates());
227                                    }
228                                    catch (SystemException se) {
229                                    }
230                            }
231    
232                    };
233            }
234    
235    }