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