001    /**
002     * Copyright (c) 2000-2012 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.portletdisplaytemplate.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.StagedModelDataHandlerUtil;
021    import com.liferay.portal.kernel.portletdisplaytemplate.PortletDisplayTemplateHandlerRegistryUtil;
022    import com.liferay.portal.kernel.util.StringBundler;
023    import com.liferay.portal.kernel.xml.Document;
024    import com.liferay.portal.kernel.xml.Element;
025    import com.liferay.portal.kernel.xml.SAXReaderUtil;
026    import com.liferay.portal.util.PortletKeys;
027    import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
028    import com.liferay.portlet.dynamicdatamapping.service.DDMTemplateLocalServiceUtil;
029    
030    import java.util.List;
031    
032    import javax.portlet.PortletPreferences;
033    
034    /**
035     * @author Juan Fernández
036     */
037    public class PortletDisplayTemplatePortletDataHandler
038            extends BasePortletDataHandler {
039    
040            public static final String NAMESPACE = "portlet_display_templates";
041    
042            public PortletDisplayTemplatePortletDataHandler() {
043                    setAlwaysExportable(true);
044                    setExportControls(
045                            new PortletDataHandlerBoolean(
046                                    NAMESPACE, "application-display-templates"));
047            }
048    
049            @Override
050            protected String doExportData(
051                            PortletDataContext portletDataContext, String portletId,
052                            PortletPreferences portletPreferences)
053                    throws Exception {
054    
055                    Element rootElement = addExportRootElement();
056    
057                    exportPortletDisplayTemplates(portletDataContext, rootElement);
058    
059                    return rootElement.formattedString();
060            }
061    
062            @Override
063            protected PortletPreferences doImportData(
064                            PortletDataContext portletDataContext, String portletId,
065                            PortletPreferences portletPreferences, String data)
066                    throws Exception {
067    
068                    Document document = SAXReaderUtil.read(data);
069    
070                    Element rootElement = document.getRootElement();
071    
072                    List<Element> ddmTemplateElements = rootElement.elements("template");
073    
074                    for (Element ddmTemplateElement : ddmTemplateElements) {
075                            StagedModelDataHandlerUtil.importStagedModel(
076                                    portletDataContext, ddmTemplateElement);
077                    }
078    
079                    return null;
080            }
081    
082            protected void exportPortletDisplayTemplates(
083                            PortletDataContext portletDataContext,
084                            Element portletDisplayTemplatesElement)
085                    throws Exception {
086    
087                    long[] classNameIds =
088                            PortletDisplayTemplateHandlerRegistryUtil.getClassNameIds();
089    
090                    for (long classNameId : classNameIds) {
091                            List<DDMTemplate> ddmTemplates =
092                                    DDMTemplateLocalServiceUtil.getTemplates(
093                                            portletDataContext.getScopeGroupId(), classNameId);
094    
095                            for (DDMTemplate ddmTemplate : ddmTemplates) {
096                                    StagedModelDataHandlerUtil.exportStagedModel(
097                                            portletDataContext, portletDisplayTemplatesElement,
098                                            ddmTemplate);
099                            }
100                    }
101            }
102    
103            protected String getTemplatePath(
104                    PortletDataContext portletDataContext, DDMTemplate template) {
105    
106                    StringBundler sb = new StringBundler(4);
107    
108                    sb.append(
109                            portletDataContext.getPortletPath(
110                                    PortletKeys.PORTLET_DISPLAY_TEMPLATES));
111                    sb.append("/templates/");
112                    sb.append(template.getTemplateId());
113                    sb.append(".xml");
114    
115                    return sb.toString();
116            }
117    
118    }