001
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
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 }