001
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.DynamicQueryFactoryUtil;
020 import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
021 import com.liferay.portal.kernel.dao.orm.Property;
022 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
023 import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
024 import com.liferay.portal.kernel.exception.PortalException;
025 import com.liferay.portal.kernel.exception.SystemException;
026 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
027 import com.liferay.portal.kernel.lar.PortletDataContext;
028 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
029 import com.liferay.portal.kernel.lar.StagedModelDataHandler;
030 import com.liferay.portal.kernel.lar.StagedModelDataHandlerRegistryUtil;
031 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
032 import com.liferay.portal.kernel.lar.StagedModelType;
033 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
034 import com.liferay.portal.kernel.xml.Element;
035 import com.liferay.portal.util.PortalUtil;
036 import com.liferay.portlet.dynamicdatalists.model.DDLRecord;
037 import com.liferay.portlet.dynamicdatalists.model.DDLRecordSet;
038 import com.liferay.portlet.dynamicdatalists.model.DDLRecordVersion;
039 import com.liferay.portlet.dynamicdatalists.service.DDLRecordSetLocalServiceUtil;
040 import com.liferay.portlet.dynamicdatalists.service.permission.DDLPermission;
041 import com.liferay.portlet.dynamicdatalists.service.persistence.DDLRecordExportActionableDynamicQuery;
042 import com.liferay.portlet.dynamicdatalists.service.persistence.DDLRecordSetExportActionableDynamicQuery;
043 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
044 import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
045 import com.liferay.portlet.dynamicdatamapping.service.persistence.DDMStructureExportActionableDynamicQuery;
046
047 import java.util.ArrayList;
048 import java.util.List;
049
050 import javax.portlet.PortletPreferences;
051
052
055 public class DDLPortletDataHandler extends BasePortletDataHandler {
056
057 public static final String NAMESPACE = "dynamic_data_lists";
058
059 public DDLPortletDataHandler() {
060 setDataLocalized(true);
061 setDeletionSystemEventStagedModelTypes(
062 new StagedModelType(DDLRecord.class),
063 new StagedModelType(DDLRecordSet.class));
064 setExportControls(
065 new PortletDataHandlerBoolean(
066 NAMESPACE, "record-sets", true, false, null,
067 DDLRecordSet.class.getName()),
068 new PortletDataHandlerBoolean(
069 NAMESPACE, "records", true, false, null,
070 DDLRecord.class.getName()),
071 new PortletDataHandlerBoolean(
072 NAMESPACE, "data-definitions", true, false, null,
073 DDMStructure.class.getName(), DDLRecordSet.class.getName()));
074 }
075
076 @Override
077 protected PortletPreferences doDeleteData(
078 PortletDataContext portletDataContext, String portletId,
079 PortletPreferences portletPreferences)
080 throws Exception {
081
082 if (portletDataContext.addPrimaryKey(
083 DDLPortletDataHandler.class, "deleteData")) {
084
085 return portletPreferences;
086 }
087
088 DDLRecordSetLocalServiceUtil.deleteRecordSets(
089 portletDataContext.getScopeGroupId());
090
091 return portletPreferences;
092 }
093
094 @Override
095 protected String doExportData(
096 final PortletDataContext portletDataContext, String portletId,
097 PortletPreferences portletPreferences)
098 throws Exception {
099
100 portletDataContext.addPortletPermissions(DDLPermission.RESOURCE_NAME);
101
102 Element rootElement = addExportDataRootElement(portletDataContext);
103
104 if (portletDataContext.getBooleanParameter(
105 NAMESPACE, "data-definitions")) {
106
107 List<DDMTemplate> ddmTemplates = new ArrayList<DDMTemplate>();
108
109 ActionableDynamicQuery ddmStructureActionableDynamicQuery =
110 getDDMStructureActionableDynamicQuery(
111 portletDataContext, ddmTemplates);
112
113 ddmStructureActionableDynamicQuery.performActions();
114
115 for (DDMTemplate ddmTemplate : ddmTemplates) {
116 StagedModelDataHandlerUtil.exportStagedModel(
117 portletDataContext, ddmTemplate);
118 }
119 }
120
121 if (portletDataContext.getBooleanParameter(NAMESPACE, "record-sets")) {
122 ActionableDynamicQuery recordSetActionableDynamicQuery =
123 new DDLRecordSetExportActionableDynamicQuery(
124 portletDataContext);
125
126 recordSetActionableDynamicQuery.performActions();
127 }
128
129 if (portletDataContext.getBooleanParameter(NAMESPACE, "records")) {
130 ActionableDynamicQuery recordActionableDynamicQuery =
131 getRecordActionableDynamicQuery(portletDataContext);
132
133 recordActionableDynamicQuery.performActions();
134 }
135
136 return getExportDataRootElementString(rootElement);
137 }
138
139 @Override
140 protected PortletPreferences doImportData(
141 PortletDataContext portletDataContext, String portletId,
142 PortletPreferences portletPreferences, String data)
143 throws Exception {
144
145 portletDataContext.importPortletPermissions(
146 DDLPermission.RESOURCE_NAME);
147
148 if (portletDataContext.getBooleanParameter(
149 NAMESPACE, "data-definitions")) {
150
151 Element ddmStructuresElement =
152 portletDataContext.getImportDataGroupElement(
153 DDMStructure.class);
154
155 List<Element> ddmStructureElements =
156 ddmStructuresElement.elements();
157
158 for (Element ddmStructureElement : ddmStructureElements) {
159 StagedModelDataHandlerUtil.importStagedModel(
160 portletDataContext, ddmStructureElement);
161 }
162
163 Element ddmTemplatesElement =
164 portletDataContext.getImportDataGroupElement(DDMTemplate.class);
165
166 List<Element> ddmTemplateElements = ddmTemplatesElement.elements();
167
168 for (Element ddmTemplateElement : ddmTemplateElements) {
169 StagedModelDataHandlerUtil.importStagedModel(
170 portletDataContext, ddmTemplateElement);
171 }
172 }
173
174 if (portletDataContext.getBooleanParameter(NAMESPACE, "record-sets")) {
175 Element recordSetsElement =
176 portletDataContext.getImportDataGroupElement(
177 DDLRecordSet.class);
178
179 List<Element> recordSetElements = recordSetsElement.elements();
180
181 for (Element recordSetElement : recordSetElements) {
182 StagedModelDataHandlerUtil.importStagedModel(
183 portletDataContext, recordSetElement);
184 }
185 }
186
187 if (portletDataContext.getBooleanParameter(NAMESPACE, "records")) {
188 Element recordsElement =
189 portletDataContext.getImportDataGroupElement(DDLRecord.class);
190
191 List<Element> recordElements = recordsElement.elements();
192
193 for (Element recordElement : recordElements) {
194 StagedModelDataHandlerUtil.importStagedModel(
195 portletDataContext, recordElement);
196 }
197 }
198
199 return portletPreferences;
200 }
201
202 @Override
203 protected void doPrepareManifestSummary(
204 PortletDataContext portletDataContext,
205 PortletPreferences portletPreferences)
206 throws Exception {
207
208 List<DDMTemplate> ddmTemplates = new ArrayList<DDMTemplate>();
209
210 ActionableDynamicQuery ddmStructureActionableDynamicQuery =
211 getDDMStructureActionableDynamicQuery(
212 portletDataContext, ddmTemplates);
213
214 ddmStructureActionableDynamicQuery.performCount();
215
216 ActionableDynamicQuery recordSetActionableDynamicQuery =
217 new DDLRecordSetExportActionableDynamicQuery(portletDataContext);
218
219 recordSetActionableDynamicQuery.performCount();
220
221 ActionableDynamicQuery recordActionableDynamicQuery =
222 getRecordActionableDynamicQuery(portletDataContext);
223
224 recordActionableDynamicQuery.performCount();
225 }
226
227 protected ActionableDynamicQuery getDDMStructureActionableDynamicQuery(
228 final PortletDataContext portletDataContext,
229 final List<DDMTemplate> ddmTemplates)
230 throws SystemException {
231
232 return new DDMStructureExportActionableDynamicQuery(
233 portletDataContext) {
234
235 @Override
236 protected void addCriteria(DynamicQuery dynamicQuery) {
237 super.addCriteria(dynamicQuery);
238
239 Property classNameIdProperty = PropertyFactoryUtil.forName(
240 "classNameId");
241
242 long classNameId = PortalUtil.getClassNameId(
243 DDLRecordSet.class);
244
245 dynamicQuery.add(classNameIdProperty.eq(classNameId));
246 }
247
248 @Override
249 protected StagedModelType getStagedModelType() {
250 return new StagedModelType(
251 DDMStructure.class.getName(), DDLRecordSet.class.getName());
252 }
253
254 @Override
255 protected void performAction(Object object) throws PortalException {
256 DDMStructure ddmStructure = (DDMStructure)object;
257
258 StagedModelDataHandlerUtil.exportStagedModel(
259 portletDataContext, ddmStructure);
260
261 try {
262 ddmTemplates.addAll(ddmStructure.getTemplates());
263 }
264 catch (SystemException se) {
265 }
266 }
267
268 };
269 }
270
271 protected ActionableDynamicQuery getRecordActionableDynamicQuery(
272 final PortletDataContext portletDataContext)
273 throws SystemException {
274
275 return new DDLRecordExportActionableDynamicQuery(
276 portletDataContext) {
277
278 @Override
279 protected void addCriteria(DynamicQuery dynamicQuery) {
280 super.addCriteria(dynamicQuery);
281
282 Property recordIdProperty = PropertyFactoryUtil.forName(
283 "recordId");
284
285 DynamicQuery recordVersionDynamicQuery =
286 DynamicQueryFactoryUtil.forClass(
287 DDLRecordVersion.class, "recordVersion",
288 PortalClassLoaderUtil.getClassLoader());
289
290 recordVersionDynamicQuery.setProjection(
291 ProjectionFactoryUtil.property("recordId"));
292
293 Property statusProperty = PropertyFactoryUtil.forName("status");
294
295 StagedModelDataHandler<?> stagedModelDataHandler =
296 StagedModelDataHandlerRegistryUtil.
297 getStagedModelDataHandler(DDLRecord.class.getName());
298
299 recordVersionDynamicQuery.add(
300 statusProperty.in(
301 stagedModelDataHandler.getExportableStatuses()));
302
303 recordVersionDynamicQuery.add(
304 RestrictionsFactoryUtil.eqProperty(
305 "recordVersion.version", "version"));
306
307 recordVersionDynamicQuery.add(
308 RestrictionsFactoryUtil.eqProperty(
309 "recordVersion.recordId", "recordId"));
310
311 dynamicQuery.add(
312 recordIdProperty.in(recordVersionDynamicQuery));
313 }
314
315 };
316 }
317
318 }