001    /**
002     * Copyright (c) 2000-present 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.blogs.service.impl;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.log.Log;
019    import com.liferay.portal.kernel.log.LogFactoryUtil;
020    import com.liferay.portal.kernel.util.OrderByComparator;
021    import com.liferay.portal.kernel.workflow.WorkflowConstants;
022    import com.liferay.portal.model.Group;
023    import com.liferay.portlet.blogs.exception.NoSuchStatsUserException;
024    import com.liferay.portlet.blogs.model.BlogsEntry;
025    import com.liferay.portlet.blogs.model.BlogsStatsUser;
026    import com.liferay.portlet.blogs.service.base.BlogsStatsUserLocalServiceBaseImpl;
027    import com.liferay.portlet.blogs.util.comparator.EntryDisplayDateComparator;
028    import com.liferay.portlet.blogs.util.comparator.StatsUserLastPostDateComparator;
029    
030    import java.util.Date;
031    import java.util.List;
032    
033    /**
034     * @author Brian Wing Shun Chan
035     * @author Mate Thurzo
036     */
037    public class BlogsStatsUserLocalServiceImpl
038            extends BlogsStatsUserLocalServiceBaseImpl {
039    
040            @Override
041            public void deleteStatsUser(BlogsStatsUser statsUsers) {
042                    blogsStatsUserPersistence.remove(statsUsers);
043            }
044    
045            @Override
046            public void deleteStatsUser(long statsUserId) throws PortalException {
047                    BlogsStatsUser statsUsers = blogsStatsUserPersistence.findByPrimaryKey(
048                            statsUserId);
049    
050                    deleteStatsUser(statsUsers);
051            }
052    
053            @Override
054            public void deleteStatsUserByGroupId(long groupId) {
055                    List<BlogsStatsUser> statsUsers =
056                            blogsStatsUserPersistence.findByGroupId(groupId);
057    
058                    for (BlogsStatsUser statsUser : statsUsers) {
059                            deleteStatsUser(statsUser);
060                    }
061            }
062    
063            @Override
064            public void deleteStatsUserByUserId(long userId) {
065                    List<BlogsStatsUser> statsUsers =
066                            blogsStatsUserPersistence.findByUserId(userId);
067    
068                    for (BlogsStatsUser statsUser : statsUsers) {
069                            deleteStatsUser(statsUser);
070                    }
071            }
072    
073            @Override
074            public List<BlogsStatsUser> getCompanyStatsUsers(
075                    long companyId, int start, int end) {
076    
077                    return blogsStatsUserPersistence.findByC_NotE(
078                            companyId, 0, start, end, new StatsUserLastPostDateComparator());
079            }
080    
081            @Override
082            public List<BlogsStatsUser> getCompanyStatsUsers(
083                    long companyId, int start, int end,
084                    OrderByComparator<BlogsStatsUser> obc) {
085    
086                    return blogsStatsUserPersistence.findByC_NotE(
087                            companyId, 0, start, end, obc);
088            }
089    
090            @Override
091            public int getCompanyStatsUsersCount(long companyId) {
092                    return blogsStatsUserPersistence.countByC_NotE(companyId, 0);
093            }
094    
095            @Override
096            public List<BlogsStatsUser> getGroupsStatsUsers(
097                    long companyId, long groupId, int start, int end) {
098    
099                    return blogsStatsUserFinder.findByGroupIds(
100                            companyId, groupId, start, end);
101            }
102    
103            @Override
104            public List<BlogsStatsUser> getGroupStatsUsers(
105                    long groupId, int start, int end) {
106    
107                    return blogsStatsUserPersistence.findByG_NotE(
108                            groupId, 0, start, end, new StatsUserLastPostDateComparator());
109            }
110    
111            @Override
112            public List<BlogsStatsUser> getGroupStatsUsers(
113                    long groupId, int start, int end,
114                    OrderByComparator<BlogsStatsUser> obc) {
115    
116                    return blogsStatsUserPersistence.findByG_NotE(
117                            groupId, 0, start, end, obc);
118            }
119    
120            @Override
121            public int getGroupStatsUsersCount(long groupId) {
122                    return blogsStatsUserPersistence.countByG_NotE(groupId, 0);
123            }
124    
125            @Override
126            public List<BlogsStatsUser> getOrganizationStatsUsers(
127                    long organizationId, int start, int end) {
128    
129                    return blogsStatsUserFinder.findByOrganizationId(
130                            organizationId, start, end, new StatsUserLastPostDateComparator());
131            }
132    
133            @Override
134            public List<BlogsStatsUser> getOrganizationStatsUsers(
135                    long organizationId, int start, int end,
136                    OrderByComparator<BlogsStatsUser> obc) {
137    
138                    return blogsStatsUserFinder.findByOrganizationId(
139                            organizationId, start, end, obc);
140            }
141    
142            @Override
143            public int getOrganizationStatsUsersCount(long organizationId) {
144                    return blogsStatsUserFinder.countByOrganizationId(organizationId);
145            }
146    
147            @Override
148            public BlogsStatsUser getStatsUser(long groupId, long userId)
149                    throws PortalException {
150    
151                    BlogsStatsUser statsUser = blogsStatsUserPersistence.fetchByG_U(
152                            groupId, userId);
153    
154                    if (statsUser == null) {
155                            Group group = groupPersistence.findByPrimaryKey(groupId);
156    
157                            long statsUserId = counterLocalService.increment();
158    
159                            statsUser = blogsStatsUserPersistence.create(statsUserId);
160    
161                            statsUser.setCompanyId(group.getCompanyId());
162                            statsUser.setGroupId(groupId);
163                            statsUser.setUserId(userId);
164    
165                            blogsStatsUserPersistence.update(statsUser);
166                    }
167    
168                    return statsUser;
169            }
170    
171            @Override
172            public void updateStatsUser(long groupId, long userId)
173                    throws PortalException {
174    
175                    updateStatsUser(groupId, userId, null);
176            }
177    
178            @Override
179            public void updateStatsUser(long groupId, long userId, Date displayDate)
180                    throws PortalException {
181    
182                    Date now = new Date();
183    
184                    int entryCount = blogsEntryPersistence.countByG_U_LtD_S(
185                            groupId, userId, now, WorkflowConstants.STATUS_APPROVED);
186    
187                    if (entryCount == 0) {
188                            try {
189                                    blogsStatsUserPersistence.removeByG_U(groupId, userId);
190                            }
191                            catch (NoSuchStatsUserException nssue) {
192                                    if (_log.isWarnEnabled()) {
193                                            _log.warn(nssue, nssue);
194                                    }
195                            }
196    
197                            return;
198                    }
199    
200                    BlogsStatsUser statsUser = getStatsUser(groupId, userId);
201    
202                    statsUser.setEntryCount(entryCount);
203    
204                    BlogsEntry blogsEntry = blogsEntryPersistence.findByG_U_LtD_S_First(
205                            groupId, userId, now, WorkflowConstants.STATUS_APPROVED,
206                            new EntryDisplayDateComparator());
207    
208                    Date lastDisplayDate = blogsEntry.getDisplayDate();
209    
210                    Date lastPostDate = statsUser.getLastPostDate();
211    
212                    if ((displayDate != null) && displayDate.before(now)) {
213                            if (lastPostDate == null) {
214                                    statsUser.setLastPostDate(displayDate);
215                            }
216                            else if (displayDate.after(lastPostDate)) {
217                                    statsUser.setLastPostDate(displayDate);
218                            }
219                            else if (lastDisplayDate.before(lastPostDate)) {
220                                    statsUser.setLastPostDate(lastDisplayDate);
221                            }
222                    }
223                    else if ((lastPostDate == null) ||
224                                     lastPostDate.before(lastDisplayDate)) {
225    
226                            statsUser.setLastPostDate(lastDisplayDate);
227                    }
228    
229                    blogsStatsUserPersistence.update(statsUser);
230            }
231    
232            private static final Log _log = LogFactoryUtil.getLog(
233                    BlogsStatsUserLocalServiceImpl.class);
234    
235    }