001
014
015 package com.liferay.portlet.portletdisplaytemplate.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.ExportActionableDynamicQuery;
020 import com.liferay.portal.kernel.dao.orm.Property;
021 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
022 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
023 import com.liferay.portal.kernel.lar.ManifestSummary;
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.template.TemplateHandlerRegistryUtil;
029 import com.liferay.portal.kernel.util.ArrayUtil;
030 import com.liferay.portal.kernel.xml.Element;
031 import com.liferay.portal.util.PortalUtil;
032 import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
033 import com.liferay.portlet.dynamicdatamapping.model.DDMTemplateConstants;
034 import com.liferay.portlet.dynamicdatamapping.service.DDMTemplateLocalServiceUtil;
035
036 import java.util.ArrayList;
037 import java.util.List;
038
039 import javax.portlet.PortletPreferences;
040
041
044 public class PortletDisplayTemplatePortletDataHandler
045 extends BasePortletDataHandler {
046
047 public static final String NAMESPACE = "portlet_display_templates";
048
049 public PortletDisplayTemplatePortletDataHandler() {
050 setExportControls(
051 new PortletDataHandlerBoolean(
052 NAMESPACE, "application-display-templates", true, true));
053 }
054
055 @Override
056 public StagedModelType[] getDeletionSystemEventStagedModelTypes() {
057 return getStagedModelTypes();
058 }
059
060 @Override
061 public long getExportModelCount(ManifestSummary manifestSummary) {
062 long totalModelCount = -1;
063
064 for (StagedModelType stagedModelType : getStagedModelTypes()) {
065 long modelCount = manifestSummary.getModelAdditionCount(
066 stagedModelType.getClassName(),
067 stagedModelType.getReferrerClassName());
068
069 if (modelCount == -1) {
070 continue;
071 }
072
073 if (totalModelCount == -1) {
074 totalModelCount = modelCount;
075 }
076 else {
077 totalModelCount += modelCount;
078 }
079 }
080
081 return totalModelCount;
082 }
083
084 @Override
085 protected String doExportData(
086 PortletDataContext portletDataContext, String portletId,
087 PortletPreferences portletPreferences)
088 throws Exception {
089
090 Element rootElement = addExportDataRootElement(portletDataContext);
091
092 long[] classNameIds = TemplateHandlerRegistryUtil.getClassNameIds();
093
094 ActionableDynamicQuery actionableDynamicQuery =
095 getDDMTemplateActionableDynamicQuery(
096 portletDataContext, ArrayUtil.toArray(classNameIds),
097 new StagedModelType(
098 PortalUtil.getClassNameId(DDMTemplate.class),
099 StagedModelType.REFERRER_CLASS_NAME_ID_ALL));
100
101 actionableDynamicQuery.performActions();
102
103 return getExportDataRootElementString(rootElement);
104 }
105
106 @Override
107 protected PortletPreferences doImportData(
108 PortletDataContext portletDataContext, String portletId,
109 PortletPreferences portletPreferences, String data)
110 throws Exception {
111
112 Element ddmTemplatesElement =
113 portletDataContext.getImportDataGroupElement(DDMTemplate.class);
114
115 List<Element> ddmTemplateElements = ddmTemplatesElement.elements();
116
117 for (Element ddmTemplateElement : ddmTemplateElements) {
118 StagedModelDataHandlerUtil.importStagedModel(
119 portletDataContext, ddmTemplateElement);
120 }
121
122 return null;
123 }
124
125 @Override
126 protected void doPrepareManifestSummary(
127 PortletDataContext portletDataContext,
128 PortletPreferences portletPreferences)
129 throws Exception {
130
131 for (StagedModelType stagedModelType : getStagedModelTypes()) {
132 ActionableDynamicQuery actionableDynamicQuery =
133 getDDMTemplateActionableDynamicQuery(
134 portletDataContext,
135 new Long[] {stagedModelType.getReferrerClassNameId()},
136 stagedModelType);
137
138 actionableDynamicQuery.performCount();
139 }
140 }
141
142 protected ActionableDynamicQuery getDDMTemplateActionableDynamicQuery(
143 final PortletDataContext portletDataContext, final Long[] classNameIds,
144 final StagedModelType stagedModelType) {
145
146 ExportActionableDynamicQuery exportActionableDynamicQuery =
147 DDMTemplateLocalServiceUtil.getExportActionableDynamicQuery(
148 portletDataContext);
149
150 final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod =
151 exportActionableDynamicQuery.getAddCriteriaMethod();
152
153 exportActionableDynamicQuery.setAddCriteriaMethod(
154 new ActionableDynamicQuery.AddCriteriaMethod() {
155
156 @Override
157 public void addCriteria(DynamicQuery dynamicQuery) {
158 addCriteriaMethod.addCriteria(dynamicQuery);
159
160 Property classNameIdProperty = PropertyFactoryUtil.forName(
161 "classNameId");
162
163 dynamicQuery.add(classNameIdProperty.in(classNameIds));
164
165 Property classPKProperty = PropertyFactoryUtil.forName(
166 "classPK");
167
168 dynamicQuery.add(classPKProperty.eq(0L));
169
170 Property typeProperty = PropertyFactoryUtil.forName("type");
171
172 dynamicQuery.add(
173 typeProperty.eq(
174 DDMTemplateConstants.TEMPLATE_TYPE_DISPLAY));
175 }
176
177 });
178 exportActionableDynamicQuery.setStagedModelType(stagedModelType);
179
180 return exportActionableDynamicQuery;
181 }
182
183 protected StagedModelType[] getStagedModelTypes() {
184 if (_stagedModelTypes != null) {
185 return _stagedModelTypes;
186 }
187
188 List<StagedModelType> stagedModelTypes =
189 new ArrayList<StagedModelType>();
190
191 long ddmTemplateClassNameId = PortalUtil.getClassNameId(
192 DDMTemplate.class);
193
194 for (long classNameId : TemplateHandlerRegistryUtil.getClassNameIds()) {
195 stagedModelTypes.add(
196 new StagedModelType(ddmTemplateClassNameId, classNameId));
197 }
198
199 _stagedModelTypes = stagedModelTypes.toArray(
200 new StagedModelType[stagedModelTypes.size()]);
201
202 return _stagedModelTypes;
203 }
204
205 private StagedModelType[] _stagedModelTypes;
206
207 }