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