001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.mobiledevicerules.service.impl;
016    
017    import com.liferay.portal.kernel.dao.orm.QueryUtil;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.systemevent.SystemEvent;
020    import com.liferay.portal.kernel.util.OrderByComparator;
021    import com.liferay.portal.kernel.util.StringBundler;
022    import com.liferay.portal.model.SystemEventConstants;
023    import com.liferay.portal.model.User;
024    import com.liferay.portal.service.ServiceContext;
025    import com.liferay.portlet.mobiledevicerules.DuplicateRuleGroupInstanceException;
026    import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
027    import com.liferay.portlet.mobiledevicerules.service.base.MDRRuleGroupInstanceLocalServiceBaseImpl;
028    import com.liferay.portlet.mobiledevicerules.util.RuleGroupInstancePriorityComparator;
029    
030    import java.util.Date;
031    import java.util.List;
032    
033    /**
034     * @author Edward C. Han
035     */
036    public class MDRRuleGroupInstanceLocalServiceImpl
037            extends MDRRuleGroupInstanceLocalServiceBaseImpl {
038    
039            @Override
040            public MDRRuleGroupInstance addRuleGroupInstance(
041                            long groupId, String className, long classPK, long ruleGroupId,
042                            int priority, ServiceContext serviceContext)
043                    throws PortalException {
044    
045                    User user = userPersistence.findByPrimaryKey(
046                            serviceContext.getUserId());
047                    long classNameId = classNameLocalService.getClassNameId(className);
048                    Date now = new Date();
049    
050                    validate(classNameId, classPK, ruleGroupId);
051    
052                    long ruleGroupInstanceId = counterLocalService.increment();
053    
054                    MDRRuleGroupInstance ruleGroupInstance =
055                            mdrRuleGroupInstanceLocalService.createMDRRuleGroupInstance(
056                                    ruleGroupInstanceId);
057    
058                    ruleGroupInstance.setUuid(serviceContext.getUuid());
059                    ruleGroupInstance.setGroupId(groupId);
060                    ruleGroupInstance.setCompanyId(serviceContext.getCompanyId());
061                    ruleGroupInstance.setCreateDate(serviceContext.getCreateDate(now));
062                    ruleGroupInstance.setModifiedDate(serviceContext.getModifiedDate(now));
063                    ruleGroupInstance.setUserId(serviceContext.getUserId());
064                    ruleGroupInstance.setUserName(user.getFullName());
065                    ruleGroupInstance.setClassNameId(classNameId);
066                    ruleGroupInstance.setClassPK(classPK);
067                    ruleGroupInstance.setRuleGroupId(ruleGroupId);
068                    ruleGroupInstance.setPriority(priority);
069    
070                    return updateMDRRuleGroupInstance(ruleGroupInstance);
071            }
072    
073            @Override
074            public MDRRuleGroupInstance addRuleGroupInstance(
075                            long groupId, String className, long classPK, long ruleGroupId,
076                            ServiceContext serviceContext)
077                    throws PortalException {
078    
079                    List<MDRRuleGroupInstance> ruleGroupInstances = getRuleGroupInstances(
080                            className, classPK, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
081                            new RuleGroupInstancePriorityComparator());
082    
083                    int priority = 0;
084    
085                    if (!ruleGroupInstances.isEmpty()) {
086                            MDRRuleGroupInstance highestPriorityRuleGroupInstance =
087                                    ruleGroupInstances.get(ruleGroupInstances.size() - 1);
088    
089                            priority = highestPriorityRuleGroupInstance.getPriority() + 1;
090                    }
091    
092                    return addRuleGroupInstance(
093                            groupId, className, classPK, ruleGroupId, priority, serviceContext);
094            }
095    
096            @Override
097            public void deleteGroupRuleGroupInstances(long groupId) {
098                    List<MDRRuleGroupInstance> ruleGroupInstances =
099                            mdrRuleGroupInstancePersistence.findByGroupId(groupId);
100    
101                    for (MDRRuleGroupInstance ruleGroupInstance : ruleGroupInstances) {
102                            mdrRuleGroupInstanceLocalService.deleteRuleGroupInstance(
103                                    ruleGroupInstance);
104                    }
105            }
106    
107            @Override
108            public void deleteRuleGroupInstance(long ruleGroupInstanceId) {
109                    MDRRuleGroupInstance ruleGroupInstance =
110                            mdrRuleGroupInstancePersistence.fetchByPrimaryKey(
111                                    ruleGroupInstanceId);
112    
113                    mdrRuleGroupInstanceLocalService.deleteRuleGroupInstance(
114                            ruleGroupInstance);
115            }
116    
117            @Override
118            @SystemEvent(
119                    action = SystemEventConstants.ACTION_SKIP,
120                    type = SystemEventConstants.TYPE_DELETE)
121            public void deleteRuleGroupInstance(
122                    MDRRuleGroupInstance ruleGroupInstance) {
123    
124                    // Rule group instance
125    
126                    mdrRuleGroupInstancePersistence.remove(ruleGroupInstance);
127    
128                    // Rule actions
129    
130                    mdrActionLocalService.deleteActions(
131                            ruleGroupInstance.getRuleGroupInstanceId());
132            }
133    
134            @Override
135            public void deleteRuleGroupInstances(long ruleGroupId) {
136                    List<MDRRuleGroupInstance> ruleGroupInstances =
137                            mdrRuleGroupInstancePersistence.findByRuleGroupId(ruleGroupId);
138    
139                    for (MDRRuleGroupInstance ruleGroupInstance : ruleGroupInstances) {
140                            mdrRuleGroupInstanceLocalService.deleteRuleGroupInstance(
141                                    ruleGroupInstance);
142                    }
143            }
144    
145            @Override
146            public MDRRuleGroupInstance fetchRuleGroupInstance(
147                    long ruleGroupInstanceId) {
148    
149                    return mdrRuleGroupInstancePersistence.fetchByPrimaryKey(
150                            ruleGroupInstanceId);
151            }
152    
153            @Override
154            public MDRRuleGroupInstance fetchRuleGroupInstance(
155                    String className, long classPK, long ruleGroupId) {
156    
157                    long classNameId = classNameLocalService.getClassNameId(className);
158    
159                    return mdrRuleGroupInstancePersistence.fetchByC_C_R(
160                            classNameId, classPK, ruleGroupId);
161            }
162    
163            @Override
164            public MDRRuleGroupInstance getRuleGroupInstance(long ruleGroupInstanceId)
165                    throws PortalException {
166    
167                    return mdrRuleGroupInstancePersistence.findByPrimaryKey(
168                            ruleGroupInstanceId);
169            }
170    
171            @Override
172            public MDRRuleGroupInstance getRuleGroupInstance(
173                            String className, long classPK, long ruleGroupId)
174                    throws PortalException {
175    
176                    long classNameId = classNameLocalService.getClassNameId(className);
177    
178                    return mdrRuleGroupInstancePersistence.findByC_C_R(
179                            classNameId, classPK, ruleGroupId);
180            }
181    
182            @Override
183            public List<MDRRuleGroupInstance> getRuleGroupInstances(long ruleGroupId) {
184                    return mdrRuleGroupInstancePersistence.findByRuleGroupId(ruleGroupId);
185            }
186    
187            @Override
188            public List<MDRRuleGroupInstance> getRuleGroupInstances(
189                    long ruleGroupId, int start, int end) {
190    
191                    return mdrRuleGroupInstancePersistence.findByRuleGroupId(
192                            ruleGroupId, start, end);
193            }
194    
195            @Override
196            public List<MDRRuleGroupInstance> getRuleGroupInstances(
197                    String className, long classPK) {
198    
199                    long classNameId = classNameLocalService.getClassNameId(className);
200    
201                    return mdrRuleGroupInstancePersistence.findByC_C(classNameId, classPK);
202            }
203    
204            @Override
205            public List<MDRRuleGroupInstance> getRuleGroupInstances(
206                    String className, long classPK, int start, int end,
207                    OrderByComparator<MDRRuleGroupInstance> orderByComparator) {
208    
209                    long classNameId = classNameLocalService.getClassNameId(className);
210    
211                    return mdrRuleGroupInstancePersistence.findByC_C(
212                            classNameId, classPK, start, end, orderByComparator);
213            }
214    
215            @Override
216            public int getRuleGroupInstancesCount(long ruleGroupId) {
217                    return mdrRuleGroupInstancePersistence.countByRuleGroupId(ruleGroupId);
218            }
219    
220            @Override
221            public int getRuleGroupInstancesCount(String className, long classPK) {
222                    long classNameId = classNameLocalService.getClassNameId(className);
223    
224                    return mdrRuleGroupInstancePersistence.countByC_C(classNameId, classPK);
225            }
226    
227            @Override
228            public MDRRuleGroupInstance updateRuleGroupInstance(
229                            long ruleGroupInstanceId, int priority)
230                    throws PortalException {
231    
232                    MDRRuleGroupInstance ruleGroupInstance =
233                            mdrRuleGroupInstancePersistence.findByPrimaryKey(
234                                    ruleGroupInstanceId);
235    
236                    ruleGroupInstance.setPriority(priority);
237    
238                    mdrRuleGroupInstancePersistence.update(ruleGroupInstance);
239    
240                    return ruleGroupInstance;
241            }
242    
243            protected void validate(long classNameId, long classPK, long ruleGroupId)
244                    throws PortalException {
245    
246                    MDRRuleGroupInstance ruleGroupInstance =
247                            mdrRuleGroupInstancePersistence.fetchByC_C_R(
248                                    classNameId, classPK, ruleGroupId);
249    
250                    if (ruleGroupInstance != null) {
251                            StringBundler sb = new StringBundler(7);
252    
253                            sb.append("{classNameId=");
254                            sb.append(classNameId);
255                            sb.append(", classPK=");
256                            sb.append(classPK);
257                            sb.append(", ruleGroupId=");
258                            sb.append(ruleGroupId);
259                            sb.append("}");
260    
261                            throw new DuplicateRuleGroupInstanceException(sb.toString());
262                    }
263    
264                    mdrRuleGroupLocalService.getMDRRuleGroup(ruleGroupId);
265            }
266    
267    }