001    /**
002     * Copyright (c) 2000-2013 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.exception.SystemException;
020    import com.liferay.portal.kernel.util.OrderByComparator;
021    import com.liferay.portal.model.User;
022    import com.liferay.portal.service.ServiceContext;
023    import com.liferay.portal.util.PortalUtil;
024    import com.liferay.portlet.mobiledevicerules.DuplicateRuleGroupInstanceException;
025    import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
026    import com.liferay.portlet.mobiledevicerules.service.base.MDRRuleGroupInstanceLocalServiceBaseImpl;
027    import com.liferay.portlet.mobiledevicerules.util.RuleGroupInstancePriorityComparator;
028    
029    import java.util.Date;
030    import java.util.List;
031    
032    /**
033     * @author Edward C. Han
034     */
035    public class MDRRuleGroupInstanceLocalServiceImpl
036            extends MDRRuleGroupInstanceLocalServiceBaseImpl {
037    
038            public MDRRuleGroupInstance addRuleGroupInstance(
039                            long groupId, String className, long classPK, long ruleGroupId,
040                            int priority, ServiceContext serviceContext)
041                    throws PortalException, SystemException {
042    
043                    User user = userPersistence.findByPrimaryKey(
044                            serviceContext.getUserId());
045                    long classNameId = PortalUtil.getClassNameId(className);
046                    Date now = new Date();
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.setCreateDate(serviceContext.getCreateDate(now));
060                    ruleGroupInstance.setModifiedDate(serviceContext.getModifiedDate(now));
061                    ruleGroupInstance.setUserId(serviceContext.getUserId());
062                    ruleGroupInstance.setUserName(user.getFullName());
063                    ruleGroupInstance.setClassNameId(classNameId);
064                    ruleGroupInstance.setClassPK(classPK);
065                    ruleGroupInstance.setRuleGroupId(ruleGroupId);
066                    ruleGroupInstance.setPriority(priority);
067    
068                    return updateMDRRuleGroupInstance(ruleGroupInstance);
069            }
070    
071            public MDRRuleGroupInstance addRuleGroupInstance(
072                            long groupId, String className, long classPK, long ruleGroupId,
073                            ServiceContext serviceContext)
074                    throws PortalException, SystemException {
075    
076                    List<MDRRuleGroupInstance> ruleGroupInstances = getRuleGroupInstances(
077                            className, classPK, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
078                            new RuleGroupInstancePriorityComparator());
079    
080                    int priority = 0;
081    
082                    if (!ruleGroupInstances.isEmpty()) {
083                            MDRRuleGroupInstance highestPriorityRuleGroupInstance =
084                                    ruleGroupInstances.get(ruleGroupInstances.size() - 1);
085    
086                            priority = highestPriorityRuleGroupInstance.getPriority() + 1;
087                    }
088    
089                    return addRuleGroupInstance(
090                            groupId, className, classPK, ruleGroupId, priority, serviceContext);
091            }
092    
093            public void deleteGroupRuleGroupInstances(long groupId)
094                    throws SystemException {
095    
096                    List<MDRRuleGroupInstance> ruleGroupInstances =
097                            mdrRuleGroupInstancePersistence.findByGroupId(groupId);
098    
099                    for (MDRRuleGroupInstance ruleGroupInstance : ruleGroupInstances) {
100                            deleteRuleGroupInstance(ruleGroupInstance);
101                    }
102            }
103    
104            public void deleteRuleGroupInstance(long ruleGroupInstanceId)
105                    throws SystemException {
106    
107                    MDRRuleGroupInstance ruleGroupInstance =
108                            mdrRuleGroupInstancePersistence.fetchByPrimaryKey(
109                                    ruleGroupInstanceId);
110    
111                    deleteRuleGroupInstance(ruleGroupInstance);
112            }
113    
114            public void deleteRuleGroupInstance(MDRRuleGroupInstance ruleGroupInstance)
115                    throws SystemException {
116    
117                    // Rule group instance
118    
119                    mdrRuleGroupInstancePersistence.remove(ruleGroupInstance);
120    
121                    // Rule actions
122    
123                    mdrActionLocalService.deleteActions(
124                            ruleGroupInstance.getRuleGroupInstanceId());
125            }
126    
127            public void deleteRuleGroupInstances(long ruleGroupId)
128                    throws SystemException {
129    
130                    List<MDRRuleGroupInstance> ruleGroupInstances =
131                            mdrRuleGroupInstancePersistence.findByRuleGroupId(ruleGroupId);
132    
133                    for (MDRRuleGroupInstance ruleGroupInstance : ruleGroupInstances) {
134                            deleteRuleGroupInstance(ruleGroupInstance);
135                    }
136            }
137    
138            public MDRRuleGroupInstance fetchRuleGroupInstance(long ruleGroupInstanceId)
139                    throws SystemException {
140    
141                    return mdrRuleGroupInstancePersistence.fetchByPrimaryKey(
142                            ruleGroupInstanceId);
143            }
144    
145            public MDRRuleGroupInstance fetchRuleGroupInstance(
146                            String className, long classPK, long ruleGroupId)
147                    throws SystemException {
148    
149                    long classNameId = PortalUtil.getClassNameId(className);
150    
151                    return mdrRuleGroupInstancePersistence.fetchByC_C_R(
152                            classNameId, classPK, ruleGroupId);
153            }
154    
155            public MDRRuleGroupInstance getRuleGroupInstance(long ruleGroupInstanceId)
156                    throws PortalException, SystemException {
157    
158                    return mdrRuleGroupInstancePersistence.findByPrimaryKey(
159                            ruleGroupInstanceId);
160            }
161    
162            public MDRRuleGroupInstance getRuleGroupInstance(
163                            String className, long classPK, long ruleGroupId)
164                    throws PortalException, SystemException {
165    
166                    long classNameId = PortalUtil.getClassNameId(className);
167    
168                    return mdrRuleGroupInstancePersistence.findByC_C_R(
169                            classNameId, classPK, ruleGroupId);
170            }
171    
172            public List<MDRRuleGroupInstance> getRuleGroupInstances(long ruleGroupId)
173                    throws SystemException {
174    
175                    return mdrRuleGroupInstancePersistence.findByRuleGroupId(ruleGroupId);
176            }
177    
178            public List<MDRRuleGroupInstance> getRuleGroupInstances(
179                            long ruleGroupId, int start, int end)
180                    throws SystemException {
181    
182                    return mdrRuleGroupInstancePersistence.findByRuleGroupId(
183                            ruleGroupId, start, end);
184            }
185    
186            public List<MDRRuleGroupInstance> getRuleGroupInstances(
187                            String className, long classPK)
188                    throws SystemException {
189    
190                    long classNameId = PortalUtil.getClassNameId(className);
191    
192                    return mdrRuleGroupInstancePersistence.findByC_C(classNameId, classPK);
193            }
194    
195            public List<MDRRuleGroupInstance> getRuleGroupInstances(
196                            String className, long classPK, int start, int end,
197                            OrderByComparator orderByComparator)
198                    throws SystemException {
199    
200                    long classNameId = PortalUtil.getClassNameId(className);
201    
202                    return mdrRuleGroupInstancePersistence.findByC_C(
203                            classNameId, classPK, start, end, orderByComparator);
204            }
205    
206            public int getRuleGroupInstancesCount(long ruleGroupId)
207                    throws SystemException {
208    
209                    return mdrRuleGroupInstancePersistence.countByRuleGroupId(ruleGroupId);
210            }
211    
212            public int getRuleGroupInstancesCount(String className, long classPK)
213                    throws SystemException {
214    
215                    long classNameId = PortalUtil.getClassNameId(className);
216    
217                    return mdrRuleGroupInstancePersistence.countByC_C(classNameId, classPK);
218            }
219    
220            public MDRRuleGroupInstance updateRuleGroupInstance(
221                            long ruleGroupInstanceId, int priority)
222                    throws PortalException, SystemException {
223    
224                    MDRRuleGroupInstance ruleGroupInstance =
225                            mdrRuleGroupInstancePersistence.findByPrimaryKey(
226                                    ruleGroupInstanceId);
227    
228                    ruleGroupInstance.setPriority(priority);
229    
230                    mdrRuleGroupInstancePersistence.update(ruleGroupInstance);
231    
232                    return ruleGroupInstance;
233            }
234    
235            protected void validate(long classNameId, long classPK, long ruleGroupId)
236                    throws PortalException, SystemException {
237    
238                    MDRRuleGroupInstance ruleGroupInstance =
239                            mdrRuleGroupInstancePersistence.fetchByC_C_R(
240                                    classNameId, classPK, ruleGroupId);
241    
242                    if (ruleGroupInstance != null) {
243                            throw new DuplicateRuleGroupInstanceException();
244                    }
245    
246                    mdrRuleGroupLocalService.getMDRRuleGroup(ruleGroupId);
247            }
248    
249    }