package jfreechart;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import org.jfree.data.gantt.TaskSeriesCollection;
import org.jfree.data.time.SimpleTimePeriod;

/**
* ガントチャートのサンプル
*/
public class GanttChartSample {
public static void main(String[] args) {
TaskSeries s1 = new TaskSeries("予定");
// 4/1 〜 4/30
s1.add(new Task("設計", new SimpleTimePeriod(
date(1, Calendar.APRIL, 2004), date(30, Calendar.APRIL, 2004))));
// 5/1 〜 7/31
s1.add(new Task("開発", new SimpleTimePeriod(
date(1, Calendar.MAY, 2004), date(31, Calendar.JULY, 2004))));
// 8/1 〜 9/30
s1.add(new Task("テスト", new SimpleTimePeriod(date(1, Calendar.AUGUST,
2004), date(30, Calendar.SEPTEMBER, 2004))));

TaskSeries s2 = new TaskSeries("実績");
// 4/1 〜 4/20
s2.add(new Task("設計", new SimpleTimePeriod(
date(1, Calendar.APRIL, 2004), date(20, Calendar.APRIL, 2004))));
// 4/21 〜 7/31
s2.add(new Task("開発", new SimpleTimePeriod(
date(21, Calendar.APRIL, 2004), date(31, Calendar.JULY, 2004))));
// 8/1 〜 9/15
s2.add(new Task("テスト", new SimpleTimePeriod(date(1, Calendar.AUGUST,
2004), date(15, Calendar.SEPTEMBER, 2004))));

TaskSeriesCollection taskSeriesCollec = new TaskSeriesCollection();
taskSeriesCollec.add(s1);
taskSeriesCollec.add(s2);

// (2)JFreeChartオブジェクトの生成
JFreeChart chart = ChartFactory.createGanttChart("Sample Gantt Chart",
"フェーズ", "日付", taskSeriesCollec, true, true, false);

// (3)グラフの出力
File outputFile = new File("./output/SampleGanttChart.png");
try {
ChartUtilities.saveChartAsPNG(outputFile, chart, 500, 500);
} catch (IOException ioEx) {
ioEx.printStackTrace();
}
}

private static Date date(int day, int month, int year) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
Date result = calendar.getTime();
return result;
}
}