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