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