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