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.List;
031    
032    /**
033     * @author Edward C. Han
034     */
035    public class MDRRuleGroupInstanceLocalServiceImpl
036            extends MDRRuleGroupInstanceLocalServiceBaseImpl {
037    
038            @Override
039            public MDRRuleGroupInstance addRuleGroupInstance(
040                            long groupId, String className, long classPK, long ruleGroupId,
041                            int priority, ServiceContext serviceContext)
042                    throws PortalException {
043    
044                    User user = userPersistence.findByPrimaryKey(
045                            serviceContext.getUserId());
046                    long classNameId = classNameLocalService.getClassNameId(className);
047    
048                    validate(classNameId, classPK, ruleGroupId);
049    
050                    long ruleGroupInstanceId = counterLocalService.increment();
051    
052                    MDRRuleGroupInstance ruleGroupInstance =
053                            mdrRuleGroupInstanceLocalService.createMDRRuleGroupInstance(
054                                    ruleGroupInstanceId);
055    
056                    ruleGroupInstance.setUuid(serviceContext.getUuid());
057                    ruleGroupInstance.setGroupId(groupId);
058                    ruleGroupInstance.setCompanyId(serviceContext.getCompanyId());
059                    ruleGroupInstance.setUserId(serviceContext.getUserId());
060                    ruleGroupInstance.setUserName(user.getFullName());
061                    ruleGroupInstance.setClassNameId(classNameId);
062                    ruleGroupInstance.setClassPK(classPK);
063                    ruleGroupInstance.setRuleGroupId(ruleGroupId);
064                    ruleGroupInstance.setPriority(priority);
065    
066                    return updateMDRRuleGroupInstance(ruleGroupInstance);
067            }
068    
069            @Override
070            public MDRRuleGroupInstance addRuleGroupInstance(
071                            long groupId, String className, long classPK, long ruleGroupId,
072                            ServiceContext serviceContext)
073                    throws PortalException {
074    
075                    List<MDRRuleGroupInstance> ruleGroupInstances = getRuleGroupInstances(
076                            className, classPK, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
077                            new RuleGroupInstancePriorityComparator());
078    
079                    int priority = 0;
080    
081                    if (!ruleGroupInstances.isEmpty()) {
082                            MDRRuleGroupInstance highestPriorityRuleGroupInstance =
083                                    ruleGroupInstances.get(ruleGroupInstances.size() - 1);
084    
085                            priority = highestPriorityRuleGroupInstance.getPriority() + 1;
086                    }
087    
088                    return addRuleGroupInstance(
089                            groupId, className, classPK, ruleGroupId, priority, serviceContext);
090            }
091    
092            @Override
093            public void deleteGroupRuleGroupInstances(long groupId) {
094                    List<MDRRuleGroupInstance> ruleGroupInstances =
095                            mdrRuleGroupInstancePersistence.findByGroupId(groupId);
096    
097                    for (MDRRuleGroupInstance ruleGroupInstance : ruleGroupInstances) {
098                            mdrRuleGroupInstanceLocalService.deleteRuleGroupInstance(
099                                    ruleGroupInstance);
100                    }
101            }
102    
103            @Override
104            public void deleteRuleGroupInstance(long ruleGroupInstanceId) {
105                    MDRRuleGroupInstance ruleGroupInstance =
106                            mdrRuleGroupInstancePersistence.fetchByPrimaryKey(
107                                    ruleGroupInstanceId);
108    
109                    mdrRuleGroupInstanceLocalService.deleteRuleGroupInstance(
110                            ruleGroupInstance);
111            }
112    
113            @Override
114            @SystemEvent(
115                    action = SystemEventConstants.ACTION_SKIP,
116                    type = SystemEventConstants.TYPE_DELETE
117            )
118            public void deleteRuleGroupInstance(
119                    MDRRuleGroupInstance ruleGroupInstance) {
120    
121                    // Rule group instance
122    
123                    mdrRuleGroupInstancePersistence.remove(ruleGroupInstance);
124    
125                    // Rule actions
126    
127                    mdrActionLocalService.deleteActions(
128                            ruleGroupInstance.getRuleGroupInstanceId());
129            }
130    
131            @Override
132            public void deleteRuleGroupInstances(long ruleGroupId) {
133                    List<MDRRuleGroupInstance> ruleGroupInstances =
134                            mdrRuleGroupInstancePersistence.findByRuleGroupId(ruleGroupId);
135    
136                    for (MDRRuleGroupInstance ruleGroupInstance : ruleGroupInstances) {
137                            mdrRuleGroupInstanceLocalService.deleteRuleGroupInstance(
138                                    ruleGroupInstance);
139                    }
140            }
141    
142            @Override
143            public MDRRuleGroupInstance fetchRuleGroupInstance(
144                    long ruleGroupInstanceId) {
145    
146                    return mdrRuleGroupInstancePersistence.fetchByPrimaryKey(
147                            ruleGroupInstanceId);
148            }
149    
150            @Override
151            public MDRRuleGroupInstance fetchRuleGroupInstance(
152                    String className, long classPK, long ruleGroupId) {
153    
154                    long classNameId = classNameLocalService.getClassNameId(className);
155    
156                    return mdrRuleGroupInstancePersistence.fetchByC_C_R(
157                            classNameId, classPK, ruleGroupId);
158            }
159    
160            @Override
161            public MDRRuleGroupInstance getRuleGroupInstance(long ruleGroupInstanceId)
162                    throws PortalException {
163    
164                    return mdrRuleGroupInstancePersistence.findByPrimaryKey(
165                            ruleGroupInstanceId);
166            }
167    
168            @Override
169            public MDRRuleGroupInstance getRuleGroupInstance(
170                            String className, long classPK, long ruleGroupId)
171                    throws PortalException {
172    
173                    long classNameId = classNameLocalService.getClassNameId(className);
174    
175                    return mdrRuleGroupInstancePersistence.findByC_C_R(
176                            classNameId, classPK, ruleGroupId);
177            }
178    
179            @Override
180            public List<MDRRuleGroupInstance> getRuleGroupInstances(long ruleGroupId) {
181                    return mdrRuleGroupInstancePersistence.findByRuleGroupId(ruleGroupId);
182            }
183    
184            @Override
185            public List<MDRRuleGroupInstance> getRuleGroupInstances(
186                    long ruleGroupId, int start, int end) {
187    
188                    return mdrRuleGroupInstancePersistence.findByRuleGroupId(
189                            ruleGroupId, start, end);
190            }
191    
192            @Override
193            public List<MDRRuleGroupInstance> getRuleGroupInstances(
194                    String className, long classPK) {
195    
196                    long classNameId = classNameLocalService.getClassNameId(className);
197    
198                    return mdrRuleGroupInstancePersistence.findByC_C(classNameId, classPK);
199            }
200    
201            @Override
202            public List<MDRRuleGroupInstance> getRuleGroupInstances(
203                    String className, long classPK, int start, int end,
204                    OrderByComparator<MDRRuleGroupInstance> orderByComparator) {
205    
206                    long classNameId = classNameLocalService.getClassNameId(className);
207    
208                    return mdrRuleGroupInstancePersistence.findByC_C(
209                            classNameId, classPK, start, end, orderByComparator);
210            }
211    
212            @Override
213            public int getRuleGroupInstancesCount(long ruleGroupId) {
214                    return mdrRuleGroupInstancePersistence.countByRuleGroupId(ruleGroupId);
215            }
216    
217            @Override
218            public int getRuleGroupInstancesCount(String className, long classPK) {
219                    long classNameId = classNameLocalService.getClassNameId(className);
220    
221                    return mdrRuleGroupInstancePersistence.countByC_C(classNameId, classPK);
222            }
223    
224            @Override
225            public MDRRuleGroupInstance updateRuleGroupInstance(
226                            long ruleGroupInstanceId, int priority)
227                    throws PortalException {
228    
229                    MDRRuleGroupInstance ruleGroupInstance =
230                            mdrRuleGroupInstancePersistence.findByPrimaryKey(
231                                    ruleGroupInstanceId);
232    
233                    ruleGroupInstance.setPriority(priority);
234    
235                    mdrRuleGroupInstancePersistence.update(ruleGroupInstance);
236    
237                    return ruleGroupInstance;
238            }
239    
240            protected void validate(long classNameId, long classPK, long ruleGroupId)
241                    throws PortalException {
242    
243                    MDRRuleGroupInstance ruleGroupInstance =
244                            mdrRuleGroupInstancePersistence.fetchByC_C_R(
245                                    classNameId, classPK, ruleGroupId);
246    
247                    if (ruleGroupInstance != null) {
248                            StringBundler sb = new StringBundler(7);
249    
250                            sb.append("{classNameId=");
251                            sb.append(classNameId);
252                            sb.append(", classPK=");
253                            sb.append(classPK);
254                            sb.append(", ruleGroupId=");
255                            sb.append(ruleGroupId);
256                            sb.append("}");
257    
258                            throw new DuplicateRuleGroupInstanceException(sb.toString());
259                    }
260    
261                    mdrRuleGroupLocalService.getMDRRuleGroup(ruleGroupId);
262            }
263    
264    }