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