package org.codehaus.mojo.dashboard.report.plugin.chart.time;
/*
* Copyright 2007 David Vicente
*
* Licensed under the Apache 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.apache.org/licenses/LICENSE-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.
*/
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import org.codehaus.mojo.dashboard.report.plugin.chart.AbstractChartStrategy;
import org.codehaus.mojo.dashboard.report.plugin.utils.TimePeriod;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.labels.XYItemLabelGenerator;
import org.jfree.data.general.Dataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.Hour;
import org.jfree.data.time.Minute;
import org.jfree.data.time.Month;
import org.jfree.data.time.RegularTimePeriod;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.Week;
public abstract class AbstractTimeChartStrategy extends AbstractChartStrategy
{
/**
* Date axis label
*/
public static String xAxisLabel = "Date";
/**
* Value axis label
*/
public static String yAxisLabel = "Values";
/**
* dataset used to store graph datas
*/
protected TimeSeriesCollection defaultdataset = new TimeSeriesCollection();
/**
* Resource bundle
*/
protected ResourceBundle bundle;
/**
* datas
*/
protected List mResults;
/**
* Time thick unit
*/
protected TimePeriod timePeriod;
/**
* period class
*/
protected Class periodClass;
/**
* start date of generated graph
*/
private Date startDate;
/**
* end date of generated graph
*/
private Date endDate;
/**
* Default constructor
*
* @param bundle
* @param title
* @param results
* @param timeUnit
* @param startDate
* @param endDate
*/
public AbstractTimeChartStrategy( ResourceBundle bundle, String title, List results, String timeUnit,
Date startDate, Date endDate )
{
this.setTitle( title );
this.bundle = bundle;
this.mResults = results;
this.startDate = startDate;
this.endDate = endDate;
retreivePeriodClass( timeUnit );
}
/**
*
* @see org.codehaus.mojo.dashboard.report.plugin.chart.IChartStrategy#getDataset()
*/
public Dataset getDataset()
{
fillDataset();
if ( defaultdataset.getSeriesCount() > 0 )
{
this.setDatasetEmpty( false );
}
return defaultdataset;
}
/**
* retreive XAxis label : Date
*/
public String getXAxisLabel()
{
return AbstractTimeChartStrategy.xAxisLabel;
}
/**
* retreive YAxil label : value
*/
public String getYAxisLabel()
{
return AbstractTimeChartStrategy.yAxisLabel;
}
/**
*
* @param timeUnit
*/
private void retreivePeriodClass( String timeUnit )
{
this.timePeriod = TimePeriod.getPeriod( timeUnit );
periodClass = null;
if ( timePeriod.equals( TimePeriod.MINUTE ) )
{
periodClass = Minute.class;
}
else if ( timePeriod.equals( TimePeriod.HOUR ) )
{
periodClass = Hour.class;
}
else if ( timePeriod.equals( TimePeriod.DAY ) )
{
periodClass = Day.class;
}
else if ( timePeriod.equals( TimePeriod.WEEK ) )
{
periodClass = Week.class;
}
else if ( timePeriod.equals( TimePeriod.MONTH ) )
{
periodClass = Month.class;
}
else
{
periodClass = Day.class;
}
}
/**
*
* @param keyDate
* @return
*/
protected RegularTimePeriod getChartDate( Date keyDate )
{
RegularTimePeriod chartDate = null;
if ( timePeriod.equals( TimePeriod.MINUTE ) )
{
chartDate = new Minute( keyDate );
}
else if ( timePeriod.equals( TimePeriod.HOUR ) )
{
chartDate = new Hour( keyDate );
}
else if ( timePeriod.equals( TimePeriod.DAY ) )
{
chartDate = new Day( keyDate );
}
else if ( timePeriod.equals( TimePeriod.WEEK ) )
{
chartDate = new Week( keyDate );
}
else if ( timePeriod.equals( TimePeriod.MONTH ) )
{
chartDate = new Month( keyDate );
}
else
{
chartDate = new Hour( keyDate );
}
return chartDate;
}
/**
*
* @return
*/
public TimePeriod getTimePeriod()
{
return timePeriod;
}
/**
*
* @return
*/
public NumberAxis getRangeAxis()
{
NumberAxis valueaxis = new NumberAxis();
valueaxis.setLowerMargin( 0.0D );
valueaxis.setUpperMargin( 0.25D );
valueaxis.setLabel( this.getYAxisLabel() );
return valueaxis;
}
/**
*
* @return
*/
public Date getEndDate()
{
return endDate;
}
/**
*
* @return
*/
public Date getStartDate()
{
return startDate;
}
/**
*
* @return
*/
public XYItemLabelGenerator getLabelGenerator()
{
return new StandardXYItemLabelGenerator();
}
}