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