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