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 conjunction.add(
118 referrerClassNameIdProperty.eq(
119 stagedModelType.getReferrerClassNameId()));
120
121 referrerClassNameIdDisjunction.add(conjunction);
122 }
123
124 dynamicQuery.add(referrerClassNameIdDisjunction);
125 }
126
127 Property typeProperty = PropertyFactoryUtil.forName("type");
128
129 dynamicQuery.add(
130 typeProperty.eq(SystemEventConstants.TYPE_DELETE));
131
132 _addCreateDateProperty(dynamicQuery);
133 }
134
135 @Override
136 protected void performAction(Object object) {
137 SystemEvent systemEvent = (SystemEvent)object;
138
139 exportDeletionSystemEvent(
140 portletDataContext, systemEvent, rootElement);
141 }
142
143 private void _addCreateDateProperty(DynamicQuery dynamicQuery) {
144 if (!portletDataContext.hasDateRange()) {
145 return;
146 }
147
148 Property createDateProperty = PropertyFactoryUtil.forName(
149 "createDate");
150
151 Date startDate = portletDataContext.getStartDate();
152
153 dynamicQuery.add(createDateProperty.ge(startDate));
154
155 Date endDate = portletDataContext.getEndDate();
156
157 dynamicQuery.add(createDateProperty.le(endDate));
158 }
159 };
160
161 actionableDynamicQuery.setCompanyId(portletDataContext.getCompanyId());
162
163 actionableDynamicQuery.performActions();
164 }
165
166 protected void exportDeletionSystemEvent(
167 PortletDataContext portletDataContext, SystemEvent systemEvent,
168 Element deletionSystemEventsElement) {
169
170 Element deletionSystemEventElement =
171 deletionSystemEventsElement.addElement("deletion-system-event");
172
173 deletionSystemEventElement.addAttribute(
174 "class-name",
175 PortalUtil.getClassName(systemEvent.getClassNameId()));
176 deletionSystemEventElement.addAttribute(
177 "extra-data", systemEvent.getExtraData());
178 deletionSystemEventElement.addAttribute(
179 "group-id", String.valueOf(systemEvent.getGroupId()));
180
181 if (systemEvent.getReferrerClassNameId() > 0) {
182 deletionSystemEventElement.addAttribute(
183 "referrer-class-name",
184 PortalUtil.getClassName(systemEvent.getReferrerClassNameId()));
185 }
186
187 deletionSystemEventElement.addAttribute(
188 "uuid", systemEvent.getClassUuid());
189
190 ManifestSummary manifestSummary =
191 portletDataContext.getManifestSummary();
192
193 manifestSummary.incrementModelDeletionCount(
194 new StagedModelType(
195 systemEvent.getClassNameId(),
196 systemEvent.getReferrerClassNameId()));
197 }
198
199 }