ForumsWeeklyStatisticJob.java
/**
* Copyright (C) ${year} eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.platform.gadget.services.ForumStatistics;
import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* Job service with a periodic action in order to store Forums Weekly Statistics in JCR.
*
* @author <a href="tung.do@exoplatform.com">Do Thanh Tung </a>
* @version 1.0
*/
public class ForumsWeeklyStatisticJob implements Job {
private static final Log LOG = ExoLogger.getLogger(ForumsWeeklyStatisticJob.class);
public ForumsWeeklyStatisticJob() {
}
/**
*
* @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
*/
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
ExoContainer containerContext = ExoContainerContext.getCurrentContainer();
ForumsWeeklyStatisticService service = (ForumsWeeklyStatisticService) containerContext.getComponentInstanceOfType(ForumsWeeklyStatisticService.class);
ForumsWeeklyStatistic weeklyStatistic = service.getLastForumsWeeklyStatistic();
if (isAddNew(weeklyStatistic)) {
weeklyStatistic = new ForumsWeeklyStatistic();
weeklyStatistic.setStartDate(new Date());
weeklyStatistic.setLastStatEntry(new Date());
weeklyStatistic.setPostsCountOfWeek(service.getPostCountForumStatistic());
weeklyStatistic.setStartPostsCountOfWeek(service.getPostCountForumStatistic());
} else {
weeklyStatistic.setLastStatEntry(new Date());
weeklyStatistic.setPostsCountOfWeek((service.getPostCountForumStatistic() > weeklyStatistic.getStartPostsCountOfWeek()) ?
service.getPostCountForumStatistic() - weeklyStatistic.getStartPostsCountOfWeek() : 0);
}
service.saveForumsWeeklyStatistic(weeklyStatistic);
} catch (Exception e) {
LOG.error("Failed to update ForumsWeeklyStatistic", e);
}
}
/**
* Check if a Forums Week Statistic the one that begin the week.
* Forums Week Statistics are new if the current date/time is the beginning of new week.
*
* @param weeklyStatistic
* @return true if the Forums Week statistic is the beginning of the week, wrong if not.
*/
private boolean isAddNew(ForumsWeeklyStatistic weeklyStatistic) {
if (weeklyStatistic == null)
return true;
Calendar now = GregorianCalendar.getInstance();
Calendar startDate = GregorianCalendar.getInstance();
startDate.setTime(weeklyStatistic.getStartDate());
return (now.get(Calendar.WEEK_OF_YEAR) != startDate.get(Calendar.WEEK_OF_YEAR));
}
}