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