/**
* $URL: https://source.sakaiproject.org/svn/sitestats/trunk/sitestats-impl/src/java/org/sakaiproject/sitestats/impl/SummaryVisitsChartDataImpl.java $
* $Id: SummaryVisitsChartDataImpl.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.util.Calendar;
import java.util.Date;
import java.util.List;
import org.sakaiproject.sitestats.api.SiteVisits;
import org.sakaiproject.sitestats.api.StatsManager;
import org.sakaiproject.sitestats.api.SummaryVisitsChartData;
public class SummaryVisitsChartDataImpl implements SummaryVisitsChartData {
private String viewType = null;
private Date firstDay = null;
private long[] visits = null;
private long[] uniqueVisits = null;
private List<SiteVisits> siteVisits = null;
public SummaryVisitsChartDataImpl(String viewType) {
this.viewType = viewType;
}
/* (non-Javadoc)
* @see org.sakaiproject.sitestats.impl.SummaryVisitsChartData#getSiteVisits()
*/
public List<SiteVisits> getSiteVisits() {
return siteVisits;
}
/* (non-Javadoc)
* @see org.sakaiproject.sitestats.impl.SummaryVisitsChartData#setSiteVisits(java.util.List)
*/
public void setSiteVisits(List<SiteVisits> siteVisits) {
this.siteVisits = siteVisits;
}
/* (non-Javadoc)
* @see org.sakaiproject.sitestats.impl.SummaryVisitsChartData#getUniqueVisits()
*/
public long[] getUniqueVisits() {
if(uniqueVisits == null && siteVisits.size() > 0)
fillData();
return uniqueVisits;
}
/* (non-Javadoc)
* @see org.sakaiproject.sitestats.impl.SummaryVisitsChartData#getVisits()
*/
public long[] getVisits() {
if(visits == null && siteVisits.size() > 0)
fillData();
return visits;
}
/* (non-Javadoc)
* @see org.sakaiproject.sitestats.impl.SummaryVisitsChartData#getFirstDay()
*/
public Date getFirstDay() {
if(firstDay == null && siteVisits.size() > 0)
fillData();
return firstDay;
}
private void fillData() {
if(viewType == null || siteVisits == 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();
visits = new long[timeSlots];
uniqueVisits = new long[timeSlots];
for(int i = timeSlots - 1; i >= 0; i--){
SiteVisits sv = null;
if(StatsManager.VIEW_YEAR.equals(viewType))
sv = getDataForMonth(cal);
else
sv = getDataForDay(cal);
if(sv == null){
visits[i] = 0;
uniqueVisits[i] = 0;
}else{
visits[i] = sv.getTotalVisits();
uniqueVisits[i] = sv.getTotalUnique();
}
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();
}
private SiteVisits getDataForDay(Calendar cal_) {
Calendar cal = (Calendar) cal_.clone();
int desiredDay = cal.get(Calendar.DAY_OF_YEAR);
for(int i = siteVisits.size() - 1; i >= 0; i--){
SiteVisits sv = siteVisits.get(i);
cal.setTime(sv.getDate());
int thisDay = cal.get(Calendar.DAY_OF_YEAR);
if(desiredDay == thisDay){
//System.out.println("SummaryVisitsChartDataImpl.getDataForDay: "+(new Date(dateInMs).toGMTString()) +" matches "+sv.getDate().toGMTString()+" => "+sv.getTotalVisits()+" / "+sv.getTotalUnique());
return sv;
}
}
return null;
}
private SiteVisits getDataForMonth(Calendar cal_) {
Calendar cal = (Calendar) cal_.clone();
int desiredMonth = cal.get(Calendar.MONTH);
for(int i = siteVisits.size() - 1; i >= 0; i--){
SiteVisits sv = siteVisits.get(i);
cal.setTime(sv.getDate());
int thisMonth = cal.get(Calendar.MONTH);
if(desiredMonth == thisMonth){
//System.out.println("SummaryVisitsChartDataImpl.getDataForMonth: "+(new Date(dateInMs).toGMTString()) +" matches "+sv.getDate().toGMTString()+" => "+sv.getTotalVisits()+" / "+sv.getTotalUnique());
return sv;
}
}
return null;
}
}