001
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.PortletDataHandlerControl;
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.lar.DDMPortletDataHandlerImpl;
028 import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
029 import com.liferay.portlet.dynamicdatamapping.service.DDMTemplateLocalServiceUtil;
030
031 import java.util.List;
032
033 import javax.portlet.PortletPreferences;
034
035
038 public class PortletDisplayTemplatePortletDataHandlerImpl
039 extends BasePortletDataHandler {
040
041 @Override
042 public PortletDataHandlerControl[] getExportControls() {
043 return new PortletDataHandlerControl[] {_portletDisplayTemplates};
044 }
045
046 @Override
047 public PortletDataHandlerControl[] getImportControls() {
048 return new PortletDataHandlerControl[] {_portletDisplayTemplates};
049 }
050
051 @Override
052 public boolean isAlwaysExportable() {
053 return _ALWAYS_EXPORTABLE;
054 }
055
056 @Override
057 protected String doExportData(
058 PortletDataContext portletDataContext, String portletId,
059 PortletPreferences portletPreferences)
060 throws Exception {
061
062 Document document = SAXReaderUtil.createDocument();
063
064 Element rootElement = document.addElement("portlet-display-templates");
065
066 exportPortletDisplayTemplates(portletDataContext, rootElement);
067
068 return document.formattedString();
069 }
070
071 @Override
072 protected PortletPreferences doImportData(
073 PortletDataContext portletDataContext, String portletId,
074 PortletPreferences portletPreferences, String data)
075 throws Exception {
076
077 Document document = SAXReaderUtil.read(data);
078
079 Element rootElement = document.getRootElement();
080
081 List<Element> ddmTemplateElements = rootElement.elements("template");
082
083 for (Element ddmTemplateElement : ddmTemplateElements) {
084 DDMPortletDataHandlerImpl.importTemplate(
085 portletDataContext, ddmTemplateElement);
086 }
087
088 return null;
089 }
090
091 protected void exportPortletDisplayTemplates(
092 PortletDataContext portletDataContext,
093 Element portletDisplayTemplatesElement)
094 throws Exception {
095
096 long[] classNameIds =
097 PortletDisplayTemplateHandlerRegistryUtil.getClassNameIds();
098
099 for (long classNameId : classNameIds) {
100 List<DDMTemplate> ddmTemplates =
101 DDMTemplateLocalServiceUtil.getTemplates(
102 portletDataContext.getScopeGroupId(), classNameId);
103
104 for (DDMTemplate ddmTemplate : ddmTemplates) {
105 DDMPortletDataHandlerImpl.exportTemplate(
106 portletDataContext, portletDisplayTemplatesElement,
107 getTemplatePath(portletDataContext, ddmTemplate),
108 ddmTemplate);
109 }
110 }
111 }
112
113 protected String getTemplatePath(
114 PortletDataContext portletDataContext, DDMTemplate template) {
115
116 StringBundler sb = new StringBundler(4);
117
118 sb.append(
119 portletDataContext.getPortletPath(
120 PortletKeys.PORTLET_DISPLAY_TEMPLATES));
121 sb.append("/templates/");
122 sb.append(template.getTemplateId());
123 sb.append(".xml");
124
125 return sb.toString();
126 }
127
128 private static final boolean _ALWAYS_EXPORTABLE = true;
129
130 private static final String _NAMESPACE = "portlet_display_templates";
131
132 private static PortletDataHandlerBoolean _portletDisplayTemplates =
133 new PortletDataHandlerBoolean(
134 _NAMESPACE, "application-display-templates");
135
136 }