2010年8月31日火曜日

JFreeChartにapplication.getRealPath("")を渡す方法

page5.jspでグラフクラスを呼び出す
//==========================================================================================
//¥(円マーク)を¥¥(円円)に置き換える
BarChart2 chart = new BarChart2(application.getRealPath("").replace("\\", "\\\\"));
chart.setAppPath(application.getRealPath("").replace("\\", "\\\\"));
chart.setGraphData(gb1.graphData);
chart.DrawGraph();
//==========================================================================================



//==========================================================================================
//グラフ作成クラス本体
//==========================================================================================
package chart;

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.channels.FileChannel;
import javax.imageio.ImageIO;

import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
//import org.jfree.chart.title.*;
import org.jfree.data.category.DefaultCategoryDataset;

/**
* 棒グラフのサンプル
*/
public class BarChart2 {
String x;
String appPath;
//データ作成
public String[][] graphData;

public static void main(String[] args) {
//new BarChart2();
}

public BarChart2(String aPath){
appPath = aPath;
}

public void DrawGraph(){
// 表示するデータの作成
String series1 = "第一";
String series2 = "第二";
String series3 = "第三";
// カテゴリーの設定
String category1 = "カテゴリー 1";
String category2 = "カテゴリー 2";
String category3 = "カテゴリー 3";

//レガシーテーマを設定する
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for(int i=0;i<31;i++){
if((!graphData[0][i].equals("")) && (!graphData[1][i].equals(""))){
dataset.addValue(Integer.parseInt(graphData[0][i]), graphData[1][i], category1);
}
}
// JFreeChartオブジェクトの生成(タイトル、項目名など)
JFreeChart chart = ChartFactory.createBarChart("日付別売上状況",
null, ".", dataset, PlotOrientation.VERTICAL, true, true, false);


try {
x = ServletUtilities.saveChartAsJPEG(chart, 500, 500,null);
String sFile = System.getProperty("java.io.tmpdir") + "\\" + x;
String dFile = this.appPath + "\\" + x;
copyTransfer(sFile,dFile);
} catch (Exception e) {
//e.printStackTrace();
}
}

public void setGraphData(String[][] values){
graphData = new String[100][100];
graphData = values;
}

public String getName(){
return x;
}

public void setAppPath(String value_path){
this.appPath = value_path;
}

/**
* コピー元のパス[srcPath]から、コピー先のパス[destPath]へ
* ファイルのコピーを行います。
* コピー処理にはFileChannel#transferToメソッドを利用します。
* 尚、コピー処理終了後、入力・出力のチャネルをクローズします。
* @param srcPath コピー元のパス
* @param destPath コピー先のパス
* @throws IOException 何らかの入出力処理例外が発生した場合
*/
public static void copyTransfer(String srcPath, String destPath)
throws IOException {

FileChannel srcChannel = new
FileInputStream(srcPath).getChannel();
FileChannel destChannel = new
FileOutputStream(destPath).getChannel();
try {
srcChannel.transferTo(0, srcChannel.size(), destChannel);
} finally {
srcChannel.close();
destChannel.close();
}

}


public BarChart2(){
// 表示するデータの作成
String series1 = "第一";
String series2 = "第二";
String series3 = "第三";
// カテゴリーの設定
String category1 = "カテゴリー 1";
String category2 = "カテゴリー 2";
String category3 = "カテゴリー 3";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, series1, category1);
dataset.addValue(4.0, series1, category2);
dataset.addValue(5.0, series1, category3);

dataset.addValue(5.0, series2, category1);
dataset.addValue(7.0, series2, category2);
dataset.addValue(7.0, series2, category3);

dataset.addValue(6.0, series3, category1);
dataset.addValue(8.0, series3, category2);
dataset.addValue(8.0, series3, category3);

// JFreeChartオブジェクトの生成(タイトル、項目名など)
JFreeChart chart = ChartFactory.createBarChart("棒グラフのサンプル",
null, "値", dataset, PlotOrientation.VERTICAL, true, true, false);



FileOutputStream jpg = null;


try {
//x = ".\\test.jpg";
//jpg = new FileOutputStream(x);
x = ServletUtilities.saveChartAsJPEG(chart, 500, 500,null);
String sFile = System.getProperty("java.io.tmpdir") + "\\" + x;
String dFile = this.appPath + "\\" + x;
copyTransfer(sFile,dFile);
//dFile = "C:\\MyWork\\pgUriage011\\Upp011\\build\\web" + "\\" + x;
//copyTransfer(sFile,dFile);
//dFile = "C:\\MyWork\\pgUriage011\\Upp011\\web" + "\\" + x;
//copyTransfer(sFile,dFile);
//ChartUtilities.writeChartAsJPEG(jpg,chart, 500, 500,null);
} catch (Exception e) {
//e.printStackTrace();
}
// グラフの出力(png,jpgで出力できます)
//File outputFile = new File("e:/temp/SampleBarChart.png");
//try {
// ChartUtilities.saveChartAsPNG(outputFile, chart, 500, 500);
//} catch (IOException ioEx) {
// //ioEx.printStackTrace();
//}
// バイナリ出力ストリームにJPEG形式で画像を出力
}
}

0 件のコメント:

コメントを投稿