/** * $URL: https://source.sakaiproject.org/svn/sitestats/trunk/sitestats-impl/src/java/org/sakaiproject/sitestats/impl/SummaryActivityChartDataImpl.java $ * $Id: SummaryActivityChartDataImpl.java 105078 2012-02-24 23:00:38Z ottenhoff@longsight.com $ * * Copyright (c) 2006-2009 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sakaiproject.sitestats.impl; import java.io.Serializable; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import org.sakaiproject.sitestats.api.SiteActivity; import org.sakaiproject.sitestats.api.SiteActivityByTool; import org.sakaiproject.sitestats.api.StatsManager; import org.sakaiproject.sitestats.api.SummaryActivityChartData; public class SummaryActivityChartDataImpl implements SummaryActivityChartData { private String viewType = null; private String chartType = null; private Date firstDay = null; private long[] activity = null; private int activityByToolTotal = 0; private List<SiteActivity> siteActivity = null; private List<SiteActivityByTool> siteActivityByTool = null; public SummaryActivityChartDataImpl(String viewType, String chartType) { this.viewType = viewType; this.chartType = chartType; } /* (non-Javadoc) * @see org.sakaiproject.sitestats.impl.SummaryActivityChartData#setSiteActivity(java.util.List) */ public void setSiteActivity(List<SiteActivity> siteActivity) { this.siteActivity = siteActivity; } /* (non-Javadoc) * @see org.sakaiproject.sitestats.api.SummaryActivityChartData#setSiteActivityByTool(java.util.List) */ public void setSiteActivityByTool(List<SiteActivityByTool> siteActivityByTool){ this.siteActivityByTool = siteActivityByTool; } /* (non-Javadoc) * @see org.sakaiproject.sitestats.impl.SummaryActivityChartData#getActivity() */ public long[] getActivity() { if(activity == null && siteActivity.size() > 0) fillBarChartData(); return activity; } public List<SiteActivityByTool> getActivityByTool(){ fillPieChartData(); if(siteActivityByTool.size() > 0) return siteActivityByTool; else return null; // return siteActivityByTool; } public int getActivityByToolTotal(){ fillPieChartData(); return activityByToolTotal; } /* (non-Javadoc) * @see org.sakaiproject.sitestats.impl.SummaryActivityChartData#getFirstDay() */ public Date getFirstDay() { if(firstDay == null && siteActivity.size() > 0) fillBarChartData(); return firstDay; } private void fillPieChartData() { if(viewType == null || chartType == null || siteActivityByTool == null) return; // sort by count Collections.sort(siteActivityByTool, new SiteActivityByToolComparator()); // get total activity count activityByToolTotal = 0; for(int i=0; i<siteActivityByTool.size(); i++){ activityByToolTotal += siteActivityByTool.get(i).getCount(); } } private void fillBarChartData() { if(viewType == null || chartType == null || siteActivity == null) return; // set first and last day data int timeSlots = 0; // fill arrays if(StatsManager.VIEW_WEEK.equals(viewType)){ timeSlots = 7; }else if(StatsManager.VIEW_MONTH.equals(viewType)){ timeSlots = 30; }else if(StatsManager.VIEW_YEAR.equals(viewType)){ timeSlots = 12; } // fill with data, backwards Calendar cal = Calendar.getInstance(); activity = new long[timeSlots]; for(int i = timeSlots - 1; i >= 0; i--){ SiteActivity sa = null; //System.out.println("SummaryActivityChartDataImpl.fillData: i="+i+" date="+cal.getTime().toGMTString()); if(StatsManager.VIEW_YEAR.equals(viewType)) sa = getDataForMonth(cal); else sa = getDataForDay(cal); if(sa == null){ activity[i] = 0; }else{ activity[i] = sa.getCount(); } if(i > 0) { if(StatsManager.VIEW_WEEK.equals(viewType) || StatsManager.VIEW_MONTH.equals(viewType)){ cal.add(Calendar.DATE, -1); }else if(StatsManager.VIEW_YEAR.equals(viewType)){ cal.add(Calendar.MONTH, -1); } } } firstDay = cal.getTime(); //System.out.println("SummaryActivityChartDataImpl.firstDay: "+firstDay.toGMTString()); } private SiteActivity getDataForDay(Calendar cal_) { Calendar cal = (Calendar) cal_.clone(); int desiredDay = cal.get(Calendar.DAY_OF_YEAR); for(int i = siteActivity.size() - 1; i >= 0; i--){ SiteActivity sa = siteActivity.get(i); cal.setTime(sa.getDate()); int thisDay = cal.get(Calendar.DAY_OF_YEAR); if(desiredDay == thisDay){ //System.out.println("SummaryActivityChartDataImpl.getDataForDay: "+(cal.getTime().toGMTString()) +" matches "+sa.getDate().toGMTString()+" => "+sa.getCount()); return sa; } } return null; } private SiteActivity getDataForMonth(Calendar cal_) { Calendar cal = (Calendar) cal_.clone(); int desiredMonth = cal.get(Calendar.MONTH); for(int i = siteActivity.size() - 1; i >= 0; i--){ SiteActivity sa = siteActivity.get(i); cal.setTime(sa.getDate()); int thisMonth = cal.get(Calendar.MONTH); if(desiredMonth == thisMonth){ //System.out.println("SummaryActivityChartDataImpl.getDataForMonth: "+(cal.getTime().toGMTString()) +" matches "+sa.getDate().toGMTString()+" => "+sa.getCount()); return sa; } } return null; } static class SiteActivityByToolComparator implements Comparator<SiteActivityByTool>, Serializable { private static final long serialVersionUID = 1L; public int compare(SiteActivityByTool o1, SiteActivityByTool o2) { if(o1.getCount() < o2.getCount()) return +1; else if(o1.getCount() == o2.getCount()) return 0; else return -1; } } }