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 String ruleGroupPath = ExportImportPathUtil.getModelPath(
111 portletDataContext, MDRRuleGroup.class.getName(),
112 ruleGroupInstance.getRuleGroupId());
113
114 MDRRuleGroup ruleGroup =
115 (MDRRuleGroup)portletDataContext.getZipEntryAsObject(ruleGroupPath);
116
117 StagedModelDataHandlerUtil.importReferenceStagedModel(
118 portletDataContext, ruleGroup);
119
120 Map<Long, Long> ruleGroupIds =
121 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
122 MDRRuleGroup.class);
123
124 Long ruleGroupId = MapUtil.getLong(
125 ruleGroupIds, ruleGroupInstance.getRuleGroupId(),
126 ruleGroupInstance.getRuleGroupId());
127
128 long classPK = 0;
129
130 Element ruleGroupInstanceElement =
131 portletDataContext.getImportDataStagedModelElement(
132 ruleGroupInstance);
133
134 String layoutUuid = ruleGroupInstanceElement.attributeValue(
135 "layout-uuid");
136
137 try {
138 if (Validator.isNotNull(layoutUuid)) {
139 Layout layout =
140 LayoutLocalServiceUtil.getLayoutByUuidAndGroupId(
141 layoutUuid, portletDataContext.getScopeGroupId(),
142 portletDataContext.isPrivateLayout());
143
144 classPK = layout.getPrimaryKey();
145 }
146 else {
147 LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
148 portletDataContext.getScopeGroupId(),
149 portletDataContext.isPrivateLayout());
150
151 classPK = layoutSet.getLayoutSetId();
152 }
153 }
154 catch (Exception e) {
155 if (_log.isWarnEnabled()) {
156 StringBundler sb = new StringBundler(5);
157
158 sb.append("Layout ");
159 sb.append(layoutUuid);
160 sb.append(" is missing for rule group instance ");
161 sb.append(ruleGroupInstance.getRuleGroupInstanceId());
162 sb.append(", skipping this rule group instance.");
163
164 _log.warn(sb.toString());
165 }
166
167 return;
168 }
169
170 ServiceContext serviceContext = portletDataContext.createServiceContext(
171 ruleGroupInstance);
172
173 serviceContext.setUserId(userId);
174
175 MDRRuleGroupInstance importedRuleGroupInstance = null;
176
177 if (portletDataContext.isDataStrategyMirror()) {
178 MDRRuleGroupInstance existingMDRRuleGroupInstance =
179 MDRRuleGroupInstanceLocalServiceUtil.
180 fetchMDRRuleGroupInstanceByUuidAndGroupId(
181 ruleGroupInstance.getUuid(),
182 portletDataContext.getScopeGroupId());
183
184 if (existingMDRRuleGroupInstance == null) {
185 serviceContext.setUuid(ruleGroupInstance.getUuid());
186
187 importedRuleGroupInstance =
188 MDRRuleGroupInstanceLocalServiceUtil.addRuleGroupInstance(
189 portletDataContext.getScopeGroupId(),
190 ruleGroupInstance.getClassName(), classPK, ruleGroupId,
191 ruleGroupInstance.getPriority(), serviceContext);
192 }
193 else {
194 importedRuleGroupInstance =
195 MDRRuleGroupInstanceLocalServiceUtil.
196 updateRuleGroupInstance(
197 existingMDRRuleGroupInstance.
198 getRuleGroupInstanceId(),
199 ruleGroupInstance.getPriority());
200 }
201 }
202 else {
203 importedRuleGroupInstance =
204 MDRRuleGroupInstanceLocalServiceUtil.addRuleGroupInstance(
205 portletDataContext.getScopeGroupId(),
206 ruleGroupInstance.getClassName(), classPK, ruleGroupId,
207 ruleGroupInstance.getPriority(), serviceContext);
208 }
209
210 portletDataContext.importClassedModel(
211 ruleGroupInstance, importedRuleGroupInstance);
212 }
213
214 private static Log _log = LogFactoryUtil.getLog(
215 MDRRuleGroupInstanceStagedModelDataHandler.class);
216
217 }