001    /**
002     * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
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.NoSuchRuleGroupInstanceException;
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            public MDRRuleGroupInstance addRuleGroupInstance(
040                            long groupId, String className, long classPK, long ruleGroupId,
041                            int priority, ServiceContext serviceContext)
042                    throws PortalException, SystemException {
043    
044                    User user = userPersistence.findByPrimaryKey(
045                            serviceContext.getUserId());
046                    long classNameId = PortalUtil.getClassNameId(className);
047                    Date now = new Date();
048    
049                    validate(classNameId, classPK, ruleGroupId);
050    
051                    long ruleGroupInstanceId = counterLocalService.increment();
052    
053                    MDRRuleGroupInstance ruleGroupInstance =
054                            mdrRuleGroupInstanceLocalService.createMDRRuleGroupInstance(
055                                    ruleGroupInstanceId);
056    
057                    ruleGroupInstance.setUuid(serviceContext.getUuid());
058                    ruleGroupInstance.setGroupId(groupId);
059                    ruleGroupInstance.setCompanyId(serviceContext.getCompanyId());
060                    ruleGroupInstance.setCreateDate(serviceContext.getCreateDate(now));
061                    ruleGroupInstance.setModifiedDate(serviceContext.getModifiedDate(now));
062                    ruleGroupInstance.setUserId(serviceContext.getUserId());
063                    ruleGroupInstance.setUserName(user.getFullName());
064                    ruleGroupInstance.setClassNameId(classNameId);
065                    ruleGroupInstance.setClassPK(classPK);
066                    ruleGroupInstance.setRuleGroupId(ruleGroupId);
067                    ruleGroupInstance.setPriority(priority);
068    
069                    return updateMDRRuleGroupInstance(ruleGroupInstance, false);
070            }
071    
072            public MDRRuleGroupInstance addRuleGroupInstance(
073                            long groupId, String className, long classPK, long ruleGroupId,
074                            ServiceContext serviceContext)
075                    throws PortalException, SystemException {
076    
077                    List<MDRRuleGroupInstance> ruleGroupInstances = getRuleGroupInstances(
078                            className, classPK, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
079                            new RuleGroupInstancePriorityComparator());
080    
081                    int priority = 0;
082    
083                    if (!ruleGroupInstances.isEmpty()) {
084                            MDRRuleGroupInstance highestPriorityRuleGroupInstance =
085                                    ruleGroupInstances.get(ruleGroupInstances.size() - 1);
086    
087                            priority = highestPriorityRuleGroupInstance.getPriority() + 1;
088                    }
089    
090                    return addRuleGroupInstance(
091                            groupId, className, classPK, ruleGroupId, priority, serviceContext);
092            }
093    
094            public void deleteRuleGroupInstance(long ruleGroupInstanceId)
095                    throws SystemException {
096    
097                    MDRRuleGroupInstance ruleGroupInstance =
098                            mdrRuleGroupInstancePersistence.fetchByPrimaryKey(
099                                    ruleGroupInstanceId);
100    
101                    deleteRuleGroupInstance(ruleGroupInstance);
102            }
103    
104            public void deleteRuleGroupInstance(MDRRuleGroupInstance ruleGroupInstance)
105                    throws SystemException {
106    
107                    // Rule group instance
108    
109                    mdrRuleGroupInstancePersistence.remove(ruleGroupInstance);
110    
111                    // Rule actions
112    
113                    mdrActionLocalService.deleteActions(
114                            ruleGroupInstance.getRuleGroupInstanceId());
115            }
116    
117            public void deleteRuleGroupInstances(long ruleGroupId)
118                    throws SystemException {
119    
120                    List<MDRRuleGroupInstance> ruleGroupInstances =
121                            mdrRuleGroupInstancePersistence.findByRuleGroupId(ruleGroupId);
122    
123                    for (MDRRuleGroupInstance ruleGroupInstance : ruleGroupInstances) {
124                            deleteRuleGroupInstance(ruleGroupInstance);
125                    }
126            }
127    
128            public MDRRuleGroupInstance fetchRuleGroupInstance(long ruleGroupInstanceId)
129                    throws SystemException {
130    
131                    return mdrRuleGroupInstancePersistence.fetchByPrimaryKey(
132                            ruleGroupInstanceId);
133            }
134    
135            public MDRRuleGroupInstance fetchRuleGroupInstance(
136                            String className, long classPK, long ruleGroupId)
137                    throws SystemException {
138    
139                    long classNameId = PortalUtil.getClassNameId(className);
140    
141                    return mdrRuleGroupInstancePersistence.fetchByC_C_R(
142                            classNameId, classPK, ruleGroupId);
143            }
144    
145            public MDRRuleGroupInstance getRuleGroupInstance(
146                            String className, long classPK, long ruleGroupId)
147                    throws NoSuchRuleGroupInstanceException, SystemException {
148    
149                    long classNameId = PortalUtil.getClassNameId(className);
150    
151                    return mdrRuleGroupInstancePersistence.findByC_C_R(
152                            classNameId, classPK, ruleGroupId);
153            }
154    
155            public List<MDRRuleGroupInstance> getRuleGroupInstances(long ruleGroupId)
156                    throws SystemException {
157    
158                    return mdrRuleGroupInstancePersistence.findByRuleGroupId(ruleGroupId);
159            }
160    
161            public List<MDRRuleGroupInstance> getRuleGroupInstances(
162                            long ruleGroupId, int start, int end)
163                    throws SystemException {
164    
165                    return mdrRuleGroupInstancePersistence.findByRuleGroupId(
166                            ruleGroupId, start, end);
167            }
168    
169            public List<MDRRuleGroupInstance> getRuleGroupInstances(
170                            String className, long classPK)
171                    throws SystemException {
172    
173                    long classNameId = PortalUtil.getClassNameId(className);
174    
175                    return mdrRuleGroupInstancePersistence.findByC_C(classNameId, classPK);
176            }
177    
178            public List<MDRRuleGroupInstance> getRuleGroupInstances(
179                            String className, long classPK, int start, int end,
180                            OrderByComparator orderByComparator)
181                    throws SystemException {
182    
183                    long classNameId = PortalUtil.getClassNameId(className);
184    
185                    return mdrRuleGroupInstancePersistence.findByC_C(
186                            classNameId, classPK, start, end, orderByComparator);
187            }
188    
189            public int getRuleGroupInstancesCount(long ruleGroupId)
190                    throws SystemException {
191    
192                    return mdrRuleGroupInstancePersistence.countByRuleGroupId(ruleGroupId);
193            }
194    
195            public int getRuleGroupInstancesCount(String className, long classPK)
196                    throws SystemException {
197    
198                    long classNameId = PortalUtil.getClassNameId(className);
199    
200                    return mdrRuleGroupInstancePersistence.countByC_C(classNameId, classPK);
201            }
202    
203            public MDRRuleGroupInstance updateRuleGroupInstance(
204                            long ruleGroupInstanceId, int priority)
205                    throws PortalException, SystemException {
206    
207                    MDRRuleGroupInstance ruleGroupInstance =
208                            mdrRuleGroupInstancePersistence.findByPrimaryKey(
209                                    ruleGroupInstanceId);
210    
211                    ruleGroupInstance.setPriority(priority);
212    
213                    mdrRuleGroupInstancePersistence.update(ruleGroupInstance, false);
214    
215                    return ruleGroupInstance;
216            }
217    
218            protected void validate(long classNameId, long classPK, long ruleGroupId)
219                    throws PortalException, SystemException {
220    
221                    MDRRuleGroupInstance ruleGroupInstance =
222                            mdrRuleGroupInstancePersistence.fetchByC_C_R(
223                                    classNameId, classPK, ruleGroupId);
224    
225                    if (ruleGroupInstance != null) {
226                            throw new DuplicateRuleGroupInstanceException();
227                    }
228    
229                    mdrRuleGroupLocalService.getMDRRuleGroup(ruleGroupId);
230            }
231    
232    }