001
014
015 package com.liferay.portal.lar;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.Conjunction;
019 import com.liferay.portal.kernel.dao.orm.Disjunction;
020 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
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.ExportImportPathUtil;
027 import com.liferay.portal.kernel.lar.ManifestSummary;
028 import com.liferay.portal.kernel.lar.PortletDataContext;
029 import com.liferay.portal.kernel.lar.PortletDataHandlerKeys;
030 import com.liferay.portal.kernel.lar.StagedModelType;
031 import com.liferay.portal.kernel.util.MapUtil;
032 import com.liferay.portal.kernel.xml.Document;
033 import com.liferay.portal.kernel.xml.Element;
034 import com.liferay.portal.kernel.xml.SAXReaderUtil;
035 import com.liferay.portal.model.SystemEvent;
036 import com.liferay.portal.model.SystemEventConstants;
037 import com.liferay.portal.service.persistence.SystemEventActionableDynamicQuery;
038 import com.liferay.portal.util.PortalUtil;
039
040 import java.util.Date;
041 import java.util.Set;
042
043
046 public class DeletionSystemEventExporter {
047
048 public void exportDeletionSystemEvents(
049 PortletDataContext portletDataContext)
050 throws Exception {
051
052 Document document = SAXReaderUtil.createDocument();
053
054 Element rootElement = document.addElement("deletion-system-events");
055
056 Set<StagedModelType> deletionSystemEventStagedModelTypes =
057 portletDataContext.getDeletionSystemEventStagedModelTypes();
058
059 if (!deletionSystemEventStagedModelTypes.isEmpty() &&
060 MapUtil.getBoolean(
061 portletDataContext.getParameterMap(),
062 PortletDataHandlerKeys.DELETIONS)) {
063
064 doExportDeletionSystemEvents(
065 portletDataContext, rootElement,
066 deletionSystemEventStagedModelTypes);
067 }
068
069 portletDataContext.addZipEntry(
070 ExportImportPathUtil.getRootPath(portletDataContext) +
071 "/deletion-system-events.xml",
072 document.formattedString());
073 }
074
075 protected void doExportDeletionSystemEvents(
076 final PortletDataContext portletDataContext,
077 final Element rootElement,
078 final Set<StagedModelType> deletionSystemEventStagedModelTypes)
079 throws PortalException, SystemException {
080
081 ActionableDynamicQuery actionableDynamicQuery =
082 new SystemEventActionableDynamicQuery() {
083
084 @Override
085 protected void addCriteria(DynamicQuery dynamicQuery) {
086 Disjunction disjunction = RestrictionsFactoryUtil.disjunction();
087
088 Property groupIdProperty = PropertyFactoryUtil.forName(
089 "groupId");
090
091 disjunction.add(groupIdProperty.eq(0L));
092 disjunction.add(
093 groupIdProperty.eq(portletDataContext.getScopeGroupId()));
094
095 dynamicQuery.add(disjunction);
096
097 if (!deletionSystemEventStagedModelTypes.isEmpty()) {
098 Property classNameIdProperty = PropertyFactoryUtil.forName(
099 "classNameId");
100
101 Property referrerClassNameIdProperty =
102 PropertyFactoryUtil.forName("referrerClassNameId");
103
104 Disjunction referrerClassNameIdDisjunction =
105 RestrictionsFactoryUtil.disjunction();
106
107 for (StagedModelType stagedModelType :
108 deletionSystemEventStagedModelTypes) {
109
110 Conjunction conjunction =
111 RestrictionsFactoryUtil.conjunction();
112
113 conjunction.add(
114 classNameIdProperty.eq(
115 stagedModelType.getClassNameId()));
116
117 if (stagedModelType.getReferrerClassNameId() >= 0) {
118 conjunction.add(
119 referrerClassNameIdProperty.eq(
120 stagedModelType.getReferrerClassNameId()));
121 }
122
123 referrerClassNameIdDisjunction.add(conjunction);
124 }
125
126 dynamicQuery.add(referrerClassNameIdDisjunction);
127 }
128
129 Property typeProperty = PropertyFactoryUtil.forName("type");
130
131 dynamicQuery.add(
132 typeProperty.eq(SystemEventConstants.TYPE_DELETE));
133
134 _addCreateDateProperty(dynamicQuery);
135 }
136
137 @Override
138 protected void performAction(Object object) {
139 SystemEvent systemEvent = (SystemEvent)object;
140
141 exportDeletionSystemEvent(
142 portletDataContext, systemEvent, rootElement);
143 }
144
145 private void _addCreateDateProperty(DynamicQuery dynamicQuery) {
146 if (!portletDataContext.hasDateRange()) {
147 return;
148 }
149
150 Property createDateProperty = PropertyFactoryUtil.forName(
151 "createDate");
152
153 Date startDate = portletDataContext.getStartDate();
154
155 dynamicQuery.add(createDateProperty.ge(startDate));
156
157 Date endDate = portletDataContext.getEndDate();
158
159 dynamicQuery.add(createDateProperty.le(endDate));
160 }
161 };
162
163 actionableDynamicQuery.setCompanyId(portletDataContext.getCompanyId());
164
165 actionableDynamicQuery.performActions();
166 }
167
168 protected void exportDeletionSystemEvent(
169 PortletDataContext portletDataContext, SystemEvent systemEvent,
170 Element deletionSystemEventsElement) {
171
172 Element deletionSystemEventElement =
173 deletionSystemEventsElement.addElement("deletion-system-event");
174
175 deletionSystemEventElement.addAttribute(
176 "class-name",
177 PortalUtil.getClassName(systemEvent.getClassNameId()));
178 deletionSystemEventElement.addAttribute(
179 "extra-data", systemEvent.getExtraData());
180 deletionSystemEventElement.addAttribute(
181 "group-id", String.valueOf(systemEvent.getGroupId()));
182
183 if (systemEvent.getReferrerClassNameId() > 0) {
184 deletionSystemEventElement.addAttribute(
185 "referrer-class-name",
186 PortalUtil.getClassName(systemEvent.getReferrerClassNameId()));
187 }
188
189 deletionSystemEventElement.addAttribute(
190 "uuid", systemEvent.getClassUuid());
191
192 ManifestSummary manifestSummary =
193 portletDataContext.getManifestSummary();
194
195 manifestSummary.incrementModelDeletionCount(
196 new StagedModelType(
197 systemEvent.getClassNameId(),
198 systemEvent.getReferrerClassNameId()));
199 }
200
201 }