001
014
015 package com.liferay.portlet.mobiledevicerules.lar;
016
017 import com.liferay.portal.kernel.dao.orm.QueryUtil;
018 import com.liferay.portal.kernel.lar.BaseStagedModelDataHandler;
019 import com.liferay.portal.kernel.lar.ExportImportPathUtil;
020 import com.liferay.portal.kernel.lar.PortletDataContext;
021 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
022 import com.liferay.portal.kernel.lar.StagedModelModifiedDateComparator;
023 import com.liferay.portal.kernel.log.Log;
024 import com.liferay.portal.kernel.log.LogFactoryUtil;
025 import com.liferay.portal.kernel.util.ListUtil;
026 import com.liferay.portal.kernel.util.MapUtil;
027 import com.liferay.portal.kernel.util.StringBundler;
028 import com.liferay.portal.kernel.util.Validator;
029 import com.liferay.portal.kernel.xml.Element;
030 import com.liferay.portal.model.Layout;
031 import com.liferay.portal.model.LayoutSet;
032 import com.liferay.portal.service.LayoutLocalServiceUtil;
033 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
034 import com.liferay.portal.service.ServiceContext;
035 import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroup;
036 import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
037 import com.liferay.portlet.mobiledevicerules.service.MDRRuleGroupInstanceLocalServiceUtil;
038 import com.liferay.portlet.mobiledevicerules.service.MDRRuleGroupLocalServiceUtil;
039
040 import java.util.List;
041 import java.util.Map;
042
043
046 public class MDRRuleGroupInstanceStagedModelDataHandler
047 extends BaseStagedModelDataHandler<MDRRuleGroupInstance> {
048
049 public static final String[] CLASS_NAMES =
050 {MDRRuleGroupInstance.class.getName()};
051
052 @Override
053 public void deleteStagedModel(
054 String uuid, long groupId, String className, String extraData) {
055
056 MDRRuleGroupInstance ruleGroupInstance =
057 fetchStagedModelByUuidAndGroupId(uuid, groupId);
058
059 if (ruleGroupInstance != null) {
060 MDRRuleGroupInstanceLocalServiceUtil.deleteRuleGroupInstance(
061 ruleGroupInstance);
062 }
063 }
064
065 @Override
066 public MDRRuleGroupInstance fetchStagedModelByUuidAndCompanyId(
067 String uuid, long companyId) {
068
069 List<MDRRuleGroupInstance> ruleGroupInstances =
070 MDRRuleGroupInstanceLocalServiceUtil.
071 getMDRRuleGroupInstancesByUuidAndCompanyId(
072 uuid, companyId, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
073 new StagedModelModifiedDateComparator
074 <MDRRuleGroupInstance>());
075
076 if (ListUtil.isEmpty(ruleGroupInstances)) {
077 return null;
078 }
079
080 return ruleGroupInstances.get(0);
081 }
082
083 @Override
084 public MDRRuleGroupInstance fetchStagedModelByUuidAndGroupId(
085 String uuid, long groupId) {
086
087 return MDRRuleGroupInstanceLocalServiceUtil.
088 fetchMDRRuleGroupInstanceByUuidAndGroupId(uuid, groupId);
089 }
090
091 @Override
092 public String[] getClassNames() {
093 return CLASS_NAMES;
094 }
095
096 @Override
097 protected void doExportStagedModel(
098 PortletDataContext portletDataContext,
099 MDRRuleGroupInstance ruleGroupInstance)
100 throws Exception {
101
102 MDRRuleGroup ruleGroup = MDRRuleGroupLocalServiceUtil.getRuleGroup(
103 ruleGroupInstance.getRuleGroupId());
104
105 StagedModelDataHandlerUtil.exportReferenceStagedModel(
106 portletDataContext, ruleGroupInstance, ruleGroup,
107 PortletDataContext.REFERENCE_TYPE_PARENT);
108
109 Element ruleGroupInstanceElement =
110 portletDataContext.getExportDataElement(ruleGroupInstance);
111
112 String className = ruleGroupInstance.getClassName();
113
114 if (className.equals(Layout.class.getName())) {
115 Layout layout = LayoutLocalServiceUtil.getLayout(
116 ruleGroupInstance.getClassPK());
117
118 ruleGroupInstanceElement.addAttribute(
119 "layout-uuid", layout.getUuid());
120 }
121
122 portletDataContext.addClassedModel(
123 ruleGroupInstanceElement,
124 ExportImportPathUtil.getModelPath(ruleGroupInstance),
125 ruleGroupInstance);
126 }
127
128 @Override
129 protected void doImportStagedModel(
130 PortletDataContext portletDataContext,
131 MDRRuleGroupInstance ruleGroupInstance)
132 throws Exception {
133
134 long userId = portletDataContext.getUserId(
135 ruleGroupInstance.getUserUuid());
136
137 Map<Long, Long> ruleGroupIds =
138 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
139 MDRRuleGroup.class);
140
141 Long ruleGroupId = MapUtil.getLong(
142 ruleGroupIds, ruleGroupInstance.getRuleGroupId(),
143 ruleGroupInstance.getRuleGroupId());
144
145 long classPK = 0;
146
147 Element ruleGroupInstanceElement =
148 portletDataContext.getImportDataStagedModelElement(
149 ruleGroupInstance);
150
151 String layoutUuid = ruleGroupInstanceElement.attributeValue(
152 "layout-uuid");
153
154 try {
155 if (Validator.isNotNull(layoutUuid)) {
156 Layout layout =
157 LayoutLocalServiceUtil.getLayoutByUuidAndGroupId(
158 layoutUuid, portletDataContext.getScopeGroupId(),
159 portletDataContext.isPrivateLayout());
160
161 classPK = layout.getPrimaryKey();
162 }
163 else {
164 LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
165 portletDataContext.getScopeGroupId(),
166 portletDataContext.isPrivateLayout());
167
168 classPK = layoutSet.getLayoutSetId();
169 }
170 }
171 catch (Exception e) {
172 if (_log.isWarnEnabled()) {
173 StringBundler sb = new StringBundler(5);
174
175 sb.append("Layout ");
176 sb.append(layoutUuid);
177 sb.append(" is missing for rule group instance ");
178 sb.append(ruleGroupInstance.getRuleGroupInstanceId());
179 sb.append(", skipping this rule group instance.");
180
181 _log.warn(sb.toString());
182 }
183
184 return;
185 }
186
187 ServiceContext serviceContext = portletDataContext.createServiceContext(
188 ruleGroupInstance);
189
190 serviceContext.setUserId(userId);
191
192 MDRRuleGroupInstance importedRuleGroupInstance = null;
193
194 if (portletDataContext.isDataStrategyMirror()) {
195 MDRRuleGroupInstance existingMDRRuleGroupInstance =
196 fetchStagedModelByUuidAndGroupId(
197 ruleGroupInstance.getUuid(),
198 portletDataContext.getScopeGroupId());
199
200 if (existingMDRRuleGroupInstance == null) {
201 serviceContext.setUuid(ruleGroupInstance.getUuid());
202
203 importedRuleGroupInstance =
204 MDRRuleGroupInstanceLocalServiceUtil.addRuleGroupInstance(
205 portletDataContext.getScopeGroupId(),
206 ruleGroupInstance.getClassName(), classPK, ruleGroupId,
207 ruleGroupInstance.getPriority(), serviceContext);
208 }
209 else {
210 importedRuleGroupInstance =
211 MDRRuleGroupInstanceLocalServiceUtil.
212 updateRuleGroupInstance(
213 existingMDRRuleGroupInstance.
214 getRuleGroupInstanceId(),
215 ruleGroupInstance.getPriority());
216 }
217 }
218 else {
219 importedRuleGroupInstance =
220 MDRRuleGroupInstanceLocalServiceUtil.addRuleGroupInstance(
221 portletDataContext.getScopeGroupId(),
222 ruleGroupInstance.getClassName(), classPK, ruleGroupId,
223 ruleGroupInstance.getPriority(), serviceContext);
224 }
225
226 portletDataContext.importClassedModel(
227 ruleGroupInstance, importedRuleGroupInstance);
228 }
229
230 private static final Log _log = LogFactoryUtil.getLog(
231 MDRRuleGroupInstanceStagedModelDataHandler.class);
232
233 }