001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.taglib; 017 018import static org.opengion.fukurou.util.StringUtil.nval ; 019import org.opengion.hayabusa.common.HybsSystem; 020import org.opengion.hayabusa.common.HybsSystemException; 021import org.opengion.hayabusa.io.ChartCreate; 022import org.opengion.hayabusa.io.ChartDataset; 023import org.opengion.hayabusa.io.HybsURLTagFragmentGenerator; 024 025import java.io.File; 026import java.io.IOException; 027import java.io.ObjectOutputStream; 028import java.io.ObjectInputStream; 029import java.util.List; 030import java.util.ArrayList; 031import java.util.Map ; 032import java.util.HashMap ; 033 034import org.jfree.chart.JFreeChart; 035import org.jfree.chart.ChartUtilities; 036 037import org.jfree.chart.ChartRenderingInfo; 038import org.jfree.chart.entity.StandardEntityCollection; 039import org.jfree.chart.imagemap.ImageMapUtilities; 040import org.jfree.chart.imagemap.StandardToolTipTagFragmentGenerator; 041import org.jfree.chart.imagemap.ToolTipTagFragmentGenerator; 042import org.jfree.chart.imagemap.URLTagFragmentGenerator; 043 044/** 045 * BODY部に指定のSQLの検索結果をチャート(円、棒、線)で表示するタグです。 046 * 047 * チャート化には、JFreeChart (http://www.jfree.org/jfreechart/) を使用しています。 048 * チャートの種類は、chartDataset タグで指定します。これは、複数の異なるチャートを 049 * 合成表示する機能が、JFreeChart にある為です。ただし、専門的には、CategoryDataset のみ 050 * いまは、合成が可能です。 051 * 処理の実行にあたり、キャッシュが有効(useCache="true")であれば、キャッシュデータを 052 * 使用します。キャッシュは、masterKey 属性で指定されたキーワード毎に、JFreeChart 053 * オブジェクトをキャッシュします。また、seriesPikup 違いの場合は、再検索せずに、 054 * キャッシュが使用できます。さらに、seriesPikup が同じ場合(masterKey も同じ)は、 055 * すでに画像ファイルが作成済みなので、画像ファイルのみを返します。 056 * 057 * 各属性は、{@XXXX} 変数が使用できます。 058 * これは、ServletRequest から、XXXX をキーに値を取り出し,この変数に割り当てます。 059 * つまり、このXXXXをキーにリクエストすれば、この変数に値をセットすることができます。 060 * 061 * @og.formSample 062 * ●形式:<og:chartCreate title="…" … /> 063 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 064 * 065 * ●Tag定義: 066 * <og:chartCreate 067 * title 【TAG】チャートのタイトルをセットします 068 * width 【TAG】チャートの横幅をセットします(初期値:200) 069 * height 【TAG】チャートの縦幅をセットします(初期値:200) 070 * domainLabel 【TAG】チャートのドメインラベルを指定します 071 * showLegend 【TAG】チャートの凡例の表示可否[true/false]をセットします(初期値:true[表示する]) 072 * rectangleEdge 【TAG】チャートの表示箇所を、[TOP/BOTTOM/RIGHT/LEFT]で指定します(初期値:BOTTOM) 073 * plotOrientation 【TAG】チャートのプロット(Plot)表示方向を、[VERTICAL(or V),HORIZONTAL(or H)]で指定します 074 * chartBackColor 【TAG】チャートの背景色を指定します 075 * plotBackColor 【TAG】チャートの描画領域の色を指定します 076 * rotationLabel 【TAG】チャートのカテゴリーラベルの方向を指定します[1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ ](初期値:3:60度) 077 * useVerticalLabels 【TAG】横軸ラベルの表示向きを縦にするかどうか[false/true]を指定します(初期値:false) 078 * domainMarker 【TAG】チャートの横軸の値(ドメイン)に合致する位置にマーカーラインを設定します 079 * useDomainLabel 【TAG】横軸ラベルのラベルを表示するかどうか[true/false]を指定します(初期値:true) 080 * useMarkerLabel 【TAG】マーカーラインに、その設定値を表示するかどうか[true/false]を指定します(初期値:true) 081 * useCache 【TAG】JFreeChart オブジェクトをキャッシュするかどうか[true/false]を指定します(初期値:false) 082 * masterKey 【TAG】キャッシュ用マスタキーを指定します 083 * seriesPikup 【TAG】複数シリーズのピックアップを行う場合のシリーズ番号を指定します 084 * imageMapUrl 【TAG】クリッカブル・マップ用URLを指定します 085 * imageMapTarget 【TAG】クリッカブル・マップ用TARGETを指定します 086 * categoryMargin 【TAG】カテゴリマージン(0.0~1.0)を指定します 087 * lowerMargin 【TAG】下方マージン(0.0~1.0)を指定します 088 * upperMargin 【TAG】上方マージン(0.0~1.0)を指定します 089 * useDomainLine 【TAG】横軸のグリッド表示有無(垂直線)を指定します(初期値:false) 090 * domainLineColor 【TAG】横軸のグリッド線の色を指定します 091 * categorySkip 【TAG】横軸ラベルをスキップする間隔を指定します 092 * categoryCutNo 【TAG】横軸ラベルの文字位置指定のキーブレイクを指定します 093 * categoryAnchor 【TAG】横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END)を指定します 094 * useRangeLine 【TAG】縦軸のグリッド表示有無(水平線)を指定します(初期値:true) 095 * useToolTip 【TAG】ツールチップスの使用可否[true:利用する/false:利用しない]を指定します(初期値:false) 096 * rangeLineColor 【TAG】縦軸のグリッド線の色を指定します 097 * rangeSkip 【TAG】縦軸のグリッド線(水平線)をスキップする間隔を指定します 098 * dateAxisFormat 【TAG】Time,XYTime Polt関係の時間軸を表す場合のフォーマットを指定します(初期値:MM/dd) 099 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 100 * > ... Body ... 101 * </og:chartCreate> 102 * 103 * ●使用例 104 * <og:chartCreate 105 * title = "JFreeChart Test" チャートタイトル 106 * domainLabel = "ドメインラベル" 横軸ラベル 107 * width = "200" チャート表示幅 108 * height = "200" チャート表示高さ 109 * showLegend = "[true/false]" 凡例の表示可否[true/false] 110 * rectangleEdge = "[TOP|BOTTOM|RIGHT|LEFT]" 凡例の表示箇所 111 * plotOrientation = "[VERTICAL|HORIZONTAL]" チャートの軸表示方向 112 * chartBackColor = "WHITE" 背景色 113 * plotBackColor = "LIGHT_GRAY" 描画領域色 114 * rotationLabel = "3" 横軸ラベルの傾き 115 * useVerticalLabels = "false" 横軸ラベルの向き(true:縦/false:横) 116 * domainMarker = "KING" 横軸のマーカーライン(縦棒) 117 * useMarkerLabel = "[true/false]" マーカーラインの文字有無 118 * useDomainLabel = "[true/false]" 横軸ラベルの表示有無 119 * categorySkip = "3" 横軸ラベルをスキップする間隔 120 * categoryCutNo = "6" 横軸ラベルの文字位置指定のキーブレイク 121 * categoryAnchor = "[START|MIDDLE|END]" 横軸のグリッド(垂直線)の書き出し位置 122 * useDomainLine = "[false/true]" 横軸のグリッド表示有無(垂直線) 123 * domainLineColor = "LIGHT_GRAY" 横軸のグリッド線の色 124 * useRangeLine = "[true/false]" 縦軸のグリッド表示有無(水平線) 125 * rangeLineColor = "LIGHT_GRAY" 縦軸のグリッド線の色 126 * rangeSkip = "-5" 縦軸のグリッド(水平線)をスキップする間隔 127 * useCache = "[false|true]" キャッシュの有無 128 * masterKey = "{@XXXX}" キャッシュ用マスタキー 129 * seriesPikup = "2" ピックアップするシリーズNo 130 * imageMapUrl = "link.jsp,BLOCK" クリッカブル・マップ用URL 131 * imageMapTarget = "CONTENTS" クリッカブル・マップ用TARGET 132 * categoryMargin = "[0.0~1.0]" カテゴリマージン(0.0~1.0) 133 * lowerMargin = "[0.0~1.0]" 下方マージン(0.0~1.0) 134 * upperMargin = "[0.0~1.0]" 上方マージン(0.0~1.0) 135 * > 136 * <og:chartDataset 137 * chartType = "{@chartType}" 138 * valueLabel = "{@valueLabel}" 139 * lowerBound = "{@lowerBound}" 140 * upperBound = "{@upperBound}" 141 * markValues = "{@markValues}" 142 * markColors = "{@markColors}" 143 * useGradient = "{@useGradient}" 144 * shapesVisible = "{@shapesVisible}" 145 * useDottedLine = "{@useDottedLine}" 146 * seriesColors = "{@seriesColors}" 147 * valueLabelsVisible = "[true|false]" 148 * valueMarksVisible = "[true|false]" 149 * > 150 * {@SQL} 151 * </og:chartDataset> 152 * </og:chartCreate> 153 * 154 * 複数のグラフを重ね合わせる場合は、chartDataset タグを chartCreate のBODY部に 155 * 複数記述します。 156 * <og:chartCreate 157 * title = "{@title}" 158 * domainLabel = "{@domainLabel}" 159 * width = "{@width}" 160 * height = "{@height}" > 161 * <og:chartDataset 162 * chartType = "{@chartType1}" 163 * valueLabel = "{@valueLabel1}" 164 * lowerBound = "{@lowerBound1}" 165 * upperBound = "{@upperBound1}" 166 * markValues = "{@markValues1}" 167 * markColors = "{@markColors1}" 168 * > 169 * {@SQL1} 170 * </og:chartDataset> 171 * <og:chartDataset 172 * chartType = "{@chartType2}" 173 * valueLabel = "{@valueLabel2}" 174 * lowerBound = "{@lowerBound2}" 175 * upperBound = "{@upperBound2}" 176 * markValues = "{@markValues2}" 177 * markColors = "{@markColors2}" 178 * > 179 * {@SQL2} 180 * </og:chartDataset> 181 * </og:chartCreate> 182 * 183 * rectangleEdge属性 は、凡例の表示箇所を示す、RectangleEdge クラスの値を設定します。 184 * [rectangleEdge属性] 185 * TOP 上側 186 * BOTTOM 下側 187 * RIGHT 右側 188 * LEFT 左側 189 * 190 * plotOrientation属性 は、チャートの軸表示方向を設定します。 191 * [renderer属性] 192 * VERTICAL 縦方向 193 * HORIZONTAL 横方向 194 * 195 * @og.group 画面表示 196 * 197 * @version 0.9.0 2007/06/19 198 * @author Nakamura 199 * @since JDK1.4, 200 */ 201public class ChartCreateTag extends CommonTagSupport { 202 //* このプログラムのVERSION文字列を設定します。 {@value} */ 203 private static final String VERSION = "5.6.4.3 (2013/05/24)" ; 204 205 private static final long serialVersionUID = 564320130524L ; 206 207 private static final String FILE_URL = HybsSystem.sys( "CHART_TEMP_DIR" ); 208 209 private List<ChartDataset> chartDataset = null; 210 211 private static final String CHART_CACHE_KEY = HybsSystem.JF_CHART_CACHE_KEY; 212 213 private String title = null; 214 private int width = 200; 215 private int height = 200; 216 private String domainLabel = null; 217 private boolean showLegend = true; 218 private String rectangleEdge = "BOTTOM"; 219 private String plotOrientation = "VERTICAL"; 220 private String chartBackColor = null; // 背景色の設定 221 private String plotBackColor = null; // 描画領域の設定 222 private int rotationLabel = 3; // 横軸ラベルの傾き(1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ ) 223 private boolean useVerticalLabels = false; // 5.6.4.3 (2013/05/24) 横軸ラベルの表示向き(横書き:false/縦書き:true) 224 private String domainMarker = null; // 横軸のマーカーライン 225 private boolean useDomainLabel = true; // 横軸ラベルの表示有無 226 private boolean useMarkerLabel = true; // マーカーライン時の文字有無 227 private boolean useCache = false; // JFreeChart オブジェクトをキャッシュするかどうか 228 private int seriesPikup = -1; // ピックアップするシリーズ番号 229 private String masterKey = null; // キャッシュ用マスタキー 230 private transient Map<String,ChartCache> map = null; // キャッシュ用マップ 231 private transient ChartCache cache = null; // キャッシュ 232 private String imgTag = null; // キャッシュ用画像ファイル 233 private String imageMapUrl = null; // クリッカブル・マップ用URL 234 private String imageMapTarget = null; // クリッカブル・マップ用TARGET 235 // 3.5.4.7 (2004/02/06) 実行時間測定用のDIV要素を出力します。 236 private long dyStart = 0; 237 238 // 4.0.2.0 (2007/12/20) 239 private String categoryMargin = null; // カテゴリマージン(0.0~1.0) 240 private String lowerMargin = null; // 下方マージン(0.0~1.0) 241 private String upperMargin = null; // 上方マージン(0.0~1.0) 242 243 private boolean useDomainLine = false; // 4.0.3.0 (2008/01/07) 横軸のグリッド表示有無(垂直線) 244 private String domainLineColor = null; // 4.0.3.0 (2008/01/07) 横軸のグリッド線の色 245 private boolean useRangeLine = true; // 4.0.3.0 (2008/01/07) 縦軸のグリッド表示有無(水平線) 246 private String rangeLineColor = null; // 4.0.3.0 (2008/01/07) 縦軸のグリッド線の色 247 private int categorySkip = 1; // 4.0.3.0 (2008/01/07) 横軸ラベルをスキップする間隔 248 private int categoryCutNo = -1; // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク 249 private String categoryAnchor = null; // 4.1.1.0 (2008/02/14) 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END) 250 private int rangeSkip = 1; // 4.1.1.0 (2008/02/04) 縦軸のグリッドをスキップする間隔 251 private boolean useToolTip = false; // 4.3.1.0 (2008/08/09) ツールチップスを利用するか 252 253 private String dateAxisFormat = "MM/dd"; // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係の時間軸を表す場合のフォーマット 254 255 /** 256 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 257 * 258 * @return 後続処理の指示 259 */ 260 @SuppressWarnings(value={"unchecked"}) 261 @Override 262 public int doStartTag() { 263 dyStart = System.currentTimeMillis(); 264 265 if( useCache ) { 266 // キャッシュから、取り出す。 267 map = (Map<String,ChartCache>)getSessionAttribute( CHART_CACHE_KEY ); 268 if( map != null ) { 269 cache = map.get( masterKey ); 270 if( cache != null && cache.isAvailable() ) { // キャッシュ有効 271 String subKey = String.valueOf( seriesPikup ); 272 // キャッシュから、イメージを取り出す。存在しなければ、null 273 imgTag = cache.getFileAddress( subKey ); 274 return SKIP_BODY ; // キャッシュ使用 275 } 276 } 277 } 278 279 return EVAL_BODY_BUFFERED; 280 } 281 282 /** 283 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 284 * 285 * @og.rev 5.2.1.0 (2010/10/01) debugPrint() メソッドの処理条件見直し 286 * 287 * @return 後続処理の指示 288 */ 289 @Override 290 public int doEndTag() { 291 debugPrint(); // 5.2.1.0 (2010/10/01) debugPrint() メソッド自体に、isDebug() が組み込まれている。 292 293 long queryEnd = System.currentTimeMillis(); 294 jspPrint( "<div id=\"queryTime\" value=\"" + (queryEnd-dyStart) + "\"></div>" ); // 3.5.6.3 (2004/07/12) 295 296 // 画像ファイルのキャッシュがあれば、それを返す。 297 if( imgTag != null ) { 298 jspPrint( imgTag ); 299 } 300 else { 301 JFreeChart chart ; 302 if( cache != null ) { 303 // キャッシュがあれば、チャートを取り出す。 304 chart = cache.getJFreeChart() ; 305 // チャートは、変更(modifying)のみ行う。 306 chart = ChartCreate.modifying( chart,seriesPikup ); 307 } 308 else { 309 // チャートがない、または、無効になっている場合は、新規作成する。 310 ChartCreate chartCreate = create(); 311 chart = chartCreate.getChart(); 312 } 313 314 File file = getTempFile( FILE_URL ); 315 try { 316 // クリッカブル・マップ 317 String fname = file.getName(); 318 String filename = getContextPath() + "/" + FILE_URL + fname; 319 String keyword = fname.substring( 0, fname.length() - 4 ); // ".png" 分を削除 320 ToolTipTagFragmentGenerator toolTipGen = null; 321 URLTagFragmentGenerator urlGen = null; 322 // 4.3.1.0 (2008/08/09) ツールチップスのマップ情報取得 323 if( useToolTip ) { 324 toolTipGen = new StandardToolTipTagFragmentGenerator(); 325 } 326 if( imageMapUrl != null ) { 327 urlGen = new HybsURLTagFragmentGenerator( imageMapTarget ); 328 } 329 if( imageMapUrl != null || useToolTip ) { 330 ChartRenderingInfo objCri = new ChartRenderingInfo( new StandardEntityCollection() ); 331 ChartUtilities.saveChartAsPNG( file, chart, width, height, objCri ); 332 imgTag = ImageMapUtilities.getImageMap( keyword, objCri, toolTipGen, urlGen ) + makeTag2( filename, keyword ); 333 } 334 else { 335 ChartUtilities.saveChartAsPNG( file, chart, width, height ); 336 imgTag = makeTag2( filename, null ); 337 } 338 } 339 catch(IOException ex) { 340 String errMsg = "ファイル I/O が実行できませんでした。" 341 + HybsSystem.CR + file + HybsSystem.CR 342 + ex.getMessage(); 343 throw new HybsSystemException( errMsg,ex ); 344 } 345 346 jspPrint( imgTag ); 347 348 // キャッシュ時にセーブする。 349 if( useCache ) { 350 if( cache == null ) { 351 cache = new ChartCache( masterKey ); 352 cache.setJFreeChart( chart ); 353 } 354 String subKey = String.valueOf( seriesPikup ); 355 cache.putFileAddress( subKey,imgTag ); 356 if( map == null ) { 357 map = new HashMap<String,ChartCache>(); 358 } 359 map.put( masterKey,cache ); 360 setSessionAttribute( CHART_CACHE_KEY,map ); 361 } 362 else { 363 // map = (Map<String,ChartCache>)getSessionAttribute( CHART_CACHE_KEY ); 364 // if( map != null ) { map.clear() ; } 365 removeSessionAttribute( CHART_CACHE_KEY ); 366 } 367 } 368 369 // 3.5.4.7 (2004/02/06) 370 long dyEnd = System.currentTimeMillis(); 371 jspPrint( "<div id=\"viewTime\" value=\"" + (dyEnd-dyStart) + "\"></div>" ); // 3.5.6.3 (2004/07/12) 372 return EVAL_PAGE; 373 } 374 375 /** 376 * タグリブオブジェクトをリリースします。 377 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 378 * 379 * @og.rev 4.0.1.0 (2007/12/13) categoryMargin、lowerMargin、upperMargin 属性を追加 380 * @og.rev 4.1.1.0 (2008/02/04) categoryCutNo , categoryAnchor , rangeSkip 属性を追加 381 * @og.rev 5.6.1.0 (2013/02/01) dateAxisFormat 属性を追加 382 * @og.rev 5.6.4.3 (2013/05/24) useVerticalLabels 属性を追加 383 */ 384 @Override 385 protected void release2() { 386 super.release2(); 387 chartDataset = null; 388 title = null; 389 width = 200; 390 height = 200; 391 domainLabel = null; 392 showLegend = true; 393 rectangleEdge = "BOTTOM"; 394 plotOrientation = "VERTICAL"; 395 chartBackColor = null; // 背景色の設定 396 plotBackColor = null; // 描画領域の設定 397 rotationLabel = 3; // 横軸ラベルの傾き(1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ ) 398 useVerticalLabels = false; // 5.6.4.3 (2013/05/24) 横軸ラベルの表示向き(横書き:false/縦書き:true) 399 domainMarker = null; // 横軸のマーカーライン 400 useDomainLabel = true; // 横軸ラベルの表示有無 401 useMarkerLabel = true; // マーカーライン時の文字有無 402 useCache = false; // キャッシュするかどうか 403 seriesPikup = -1; // ピックアップするシリーズ番号 404 masterKey = null; // キャッシュ用マスタキー 405 map = null; // キャッシュ用マップ 406 cache = null; // キャッシュ 407 imgTag = null; // キャッシュ用画像ファイル 408 imageMapUrl = null; // クリッカブル・マップ 409 imageMapTarget = null; // クリッカブル・マップ用TARGET 410 categoryMargin = null; // 4.0.2.0 (2007/12/20) カテゴリマージン(0.0~1.0) 411 lowerMargin = null; // 4.0.2.0 (2007/12/20) 下方マージン(0.0~1.0) 412 upperMargin = null; // 4.0.2.0 (2007/12/20) 上方マージン(0.0~1.0) 413 useDomainLine = false; // 4.0.3.0 (2008/01/07) 横軸のグリッド表示有無(垂直線) 414 domainLineColor = null; // 4.0.3.0 (2008/01/07) 横軸のグリッド線の色 415 useRangeLine = true; // 4.0.3.0 (2008/01/07) 縦軸のグリッド表示有無(水平線) 416 rangeLineColor = null; // 4.0.3.0 (2008/01/07) 縦軸のグリッド線の色 417 categorySkip = 1; // 4.0.3.0 (2008/01/07) 横軸ラベルをスキップする間隔 418 categoryCutNo = -1; // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク 419 categoryAnchor = null; // 4.1.1.0 (2008/02/14) 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END) 420 rangeSkip = 1; // 4.1.1.0 (2008/02/04) 縦軸のグリッドをスキップする間隔 421 dateAxisFormat = "MM/dd"; // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係の時間軸を表す場合のフォーマット 422 } 423 424 /** 425 * チャートを表示するためのタグを作成します。 426 * 427 * @param filename 画像ファイル 428 * @param keyword クリッカブル・マップの対応づける為のキーワード 429 * 430 * @return タグ文字列 431 */ 432 private String makeTag2( final String filename,final String keyword ) { 433 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 434 435 rtn.append( "<img" ); 436 if( keyword != null ) { 437 rtn.append( " usemap=\"#").append( keyword ).append( "\""); 438 } 439 rtn.append( " width=\"" ).append( width ).append( "px\""); 440 rtn.append( " height=\"" ).append( height ).append( "px\""); 441 rtn.append( " src=\"" ).append( filename ).append( "\" /> "); 442 443 return rtn.toString(); 444 } 445 446 /** 447 * ChartCreate のオブジェクトを生成します。 448 * 449 * @og.rev 4.1.1.0 (2008/02/04) categoryCutNo , categoryAnchor 属性を追加 450 * @og.rev 5.6.1.0 (2013/02/01) dateAxisFormat 属性を追加 451 * @og.rev 5.6.1.0 (2013/02/01) useVerticalLabels 属性を追加 452 * 453 * @return ChartCreateオブジェクト 454 */ 455 private ChartCreate create() { 456 ChartCreate tempCreate = new ChartCreate(); 457 458 tempCreate.setTitle( title ); 459 tempCreate.setDomainLabel( domainLabel ); 460 tempCreate.setShowLegend( showLegend ); 461 tempCreate.setRectangleEdge( rectangleEdge ); 462 tempCreate.setPlotOrientation( plotOrientation ); 463 tempCreate.setChartBackColor( chartBackColor ); // 背景色の設定 464 tempCreate.setPlotBackColor( plotBackColor ); // 描画領域の設定 465 tempCreate.setRotationLabel( rotationLabel ); // 横軸ラベルの傾き 466 tempCreate.setUseVerticalLabels( useVerticalLabels ); // 5.6.4.3 (2013/05/24)) ラベルの表示向き 467 tempCreate.setDomainMarker( domainMarker ); // ドメインマーカー 468 tempCreate.setUseDomainLabel( useDomainLabel ); // 横軸ラベルの表示有無 469 tempCreate.setUseMarkerLabel( useMarkerLabel ); // マーカーの設定値表示 470 tempCreate.setSeriesPikup( seriesPikup ); // ピックアップするシリーズ番号 471 tempCreate.setImageMapUrl( imageMapUrl ); // クリッカブル・マップ用URL 472 tempCreate.setCategoryMargin( categoryMargin ); // 4.0.2.0 (2007/12/20) カテゴリマージン(0.0~1.0) 473 tempCreate.setLowerMargin( lowerMargin ); // 4.0.2.0 (2007/12/20) 下方マージン(0.0~1.0) 474 tempCreate.setUpperMargin( upperMargin ); // 4.0.2.0 (2007/12/20) 上方マージン(0.0~1.0) 475 tempCreate.setUseDomainLine( useDomainLine ); // 4.0.3.0 (2008/01/07) 横軸のグリッド表示有無(垂直線) 476 tempCreate.setDomainLineColor( domainLineColor ); // 4.0.3.0 (2008/01/07) 横軸のグリッド線の色 477 tempCreate.setUseRangeLine( useRangeLine ); // 4.0.3.0 (2008/01/07) 縦軸のグリッド表示有無(水平線) 478 tempCreate.setRangeLineColor( rangeLineColor ); // 4.0.3.0 (2008/01/07) 縦軸のグリッド線の色 479 tempCreate.setCategorySkip( categorySkip ); // 4.0.3.0 (2008/01/07) 横軸ラベルをスキップする間隔 480 tempCreate.setCategoryCutNo( categoryCutNo ); // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク 481 tempCreate.setCategoryAnchor( categoryAnchor ); // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク 482 tempCreate.setRangeSkip( rangeSkip ); // 4.1.1.0 (2008/02/04) 縦軸のグリッド線(水平線)をスキップする間隔 483 tempCreate.setUseToolTip( useToolTip ); // 4.3.1.0 (2008/08/09) ツールチップスの利用 484 tempCreate.setDateAxisFormat( dateAxisFormat ); // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係の時間軸を表す場合のフォーマット指定 485 486 if( isDebug() ) { tempCreate.setDebug( true ); } // 4.0.2.0 (2007/12/20) 487 488 tempCreate.setDatasetList( chartDataset ); 489 490 return tempCreate ; 491 } 492 493 /** 494 * テンポラリFile を取得します。 495 * 496 * ここでは、一般的なファイル出力を考慮した テンポラリFile を作成します。 497 * 498 * @param fileURL ファイルを作成するディレクトリ 499 * 500 * @return テンポラリFile 501 */ 502 private File getTempFile( final String fileURL ) { 503 final File file ; 504 505 String directory = HybsSystem.url2dir( fileURL ); 506 File dir = new File( directory ); 507 if( ! dir.exists() && ! dir.mkdirs() ) { 508 String errMsg = "ディレクトリの作成に失敗しました。[" + directory + "]"; 509 throw new HybsSystemException( errMsg ); 510 } 511 512 try { 513 file = File.createTempFile( "JFree",".png",dir ); 514 file.deleteOnExit(); 515 } 516 catch( IOException ex ) { 517 String errMsg = "ファイル名がオープン出来ませんでした。" 518 + HybsSystem.CR 519 + "Url:" + fileURL ; 520 throw new HybsSystemException( errMsg,ex ); 521 } 522 523 return file ; 524 } 525 526 /** 527 * 【TAG】チャートのタイトルをセットします。 528 * 529 * @og.tag チャートのタイトルをセットします。 530 * 531 * @param ttl タイトル 532 */ 533 public void setTitle( final String ttl ) { 534 title = nval( getRequestParameter( ttl ),title ); 535 } 536 537 /** 538 * 【TAG】チャートの横幅をセットします(初期値:200)。 539 * 540 * @og.tag 541 * タイトルや凡例も含んだ大きさです。データ領域は自動計算されます。 542 * 543 * @og.rev 4.0.1.0 (2007/12/13) 引数に "px" を使用できるようにする。 544 * 545 * @param wd 横幅 546 */ 547 public void setWidth( final String wd ) { 548 // 引数に、"px" が使用されていた場合は、それを取り除く。 549 if( wd != null && wd.length() >= 3 && wd.endsWith( "px" ) ) { 550 width = Integer.valueOf( wd.substring( 0,wd.length()-2 ) ); 551 } 552 else { 553 width = nval( getRequestParameter( wd ),width ); 554 } 555 } 556 557 /** 558 * 【TAG】チャートの縦幅をセットします(初期値:200)。 559 * 560 * @og.tag 561 * タイトルや凡例も含んだ大きさです。データ領域は自動計算されます。 562 * 563 * @og.rev 4.0.1.0 (2007/12/13) 引数に "px" を使用できるようにする。 564 * 565 * @param ht 縦幅 566 */ 567 public void setHeight( final String ht ) { 568 // 引数に、"px" が使用されていた場合は、それを取り除く。 569 if( ht != null && ht.length() >= 3 && ht.endsWith( "px" ) ) { 570 height = Integer.valueOf( ht.substring( 0,ht.length()-2 ) ); 571 } 572 else { 573 height = nval( getRequestParameter( ht ),height ); 574 } 575 } 576 577 /** 578 * 【TAG】チャートのドメインラベルを指定します。 579 * 580 * @og.tag 581 * チャートのドメインラベルを指定します。 582 * 583 * @param dmLbl チャートのドメインラベル 584 */ 585 public void setDomainLabel( final String dmLbl ) { 586 domainLabel = nval( getRequestParameter( dmLbl ),domainLabel ); 587 } 588 589 /** 590 * 【TAG】チャートの凡例の表示可否[true/false]をセットします(初期値:true[表示する])。 591 * 592 * @og.tag 593 * 初期値は、表示する(true) です。 594 * 595 * @param swLegend 凡例の表示可否 [true:表示する/それ以外:しない] 596 */ 597 public void setShowLegend( final String swLegend ) { 598 showLegend = nval( getRequestParameter( swLegend ),showLegend ); 599 } 600 601 /** 602 * 【TAG】チャートの表示箇所を、[TOP/BOTTOM/RIGHT/LEFT]で指定します(初期値:BOTTOM)。 603 * 604 * @og.tag 605 * 表示箇所は、org.jfree.ui.RectangleEdge クラスの設定値を使用します。 606 * 指定できるのは、TOP、BOTTOM、RIGHT、LEFT で、各文字の頭一文字で 607 * 判定してます。つまり、T,B,R,L で、判定を行い、それ以外はエラーになります。 608 * 初期値は、BOTTOM です。 609 * 610 * @param rectEdge 凡例表示方向 : (TOP、BOTTOM、RIGHT、LEFT) 611 */ 612 public void setRectangleEdge( final String rectEdge ) { 613 rectangleEdge = nval( getRequestParameter( rectEdge ),rectangleEdge ); 614 } 615 616 /** 617 * 【TAG】チャートのプロット(Plot)表示方向を、[VERTICAL(or V),HORIZONTAL(or H)]で指定します(初期値:VERTICAL)。 618 * 619 * @og.tag 620 * 軸表示方向は、org.jfree.chart.plot.PlotOrientation クラスの設定値を使用します。 621 * 指定できるのは、VERTICAL、HORIZONTALで、各文字の頭一文字で 622 * 判定してます。つまり、V,H で、判定を行い、それ以外はエラーになります。 623 * 初期値は、VERTICAL です。 624 * 625 * @param orientation プロット表示方向 : VERTICAL(or V) , HORIZONTAL(or H) 626 */ 627 public void setPlotOrientation( final String orientation ) { 628 plotOrientation = nval( getRequestParameter( orientation ),plotOrientation ); 629 } 630 631 /** 632 * 【TAG】チャートの背景色を指定します。 633 * 634 * @og.tag 635 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 636 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 637 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 638 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 639 * 640 * @param chBackClr チャートの背景色 641 * @see java.awt.Color#BLACK 642 */ 643 public void setChartBackColor( final String chBackClr ) { 644 chartBackColor = nval( getRequestParameter( chBackClr ),chartBackColor ); 645 } 646 647 /** 648 * 【TAG】チャートの描画領域の色を指定します。 649 * 650 * @og.tag 651 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 652 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 653 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 654 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 655 * 656 * @param plBackClr チャートの描画領域色 657 * @see java.awt.Color#BLACK 658 */ 659 public void setPlotBackColor( final String plBackClr ) { 660 plotBackColor = nval( getRequestParameter( plBackClr ),plotBackColor ); 661 } 662 663 /** 664 * 【TAG】チャートのカテゴリーラベルの方向を指定します(3:60度)。 665 * 666 * @og.tag 667 * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。 668 * この指示数に相当する値を設定します。 669 * 1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ 670 * マイナスは、した方向に回転させます。 671 * 0 を指定した場合は、何も設定しません。 672 * 初期値は、3:60度です。 673 * 674 * @param rttLabel カテゴリーラベルの方向 675 */ 676 public void setRotationLabel( final String rttLabel ) { 677 rotationLabel = nval( getRequestParameter( rttLabel ),rotationLabel ); 678 } 679 680 /** 681 * 【TAG】ラベルの表示向きを縦にするかどうか[false/true]を指定します(初期値:false)。 682 * 683 * @og.tag 684 * ChartCreate の rotationLabel は、角度を指定できましたが、NumberAxis,DateAxis では、 685 * 縦にするかどうかの指定しかできません。 686 * ここでは、true を指定するとラベルは、縦書きになります。 687 * 初期値は、false(横書き)です。 688 * 689 * @og.rev 5.6.4.3 (2013/05/24)) 新規追加 690 * 691 * @param useVLavels ラベルの表示向き [false:横書き/true:縦書き] 692 */ 693 public void setUseVerticalLabels( final String useVLavels ) { 694 useVerticalLabels = nval( getRequestParameter( useVLavels ),useVerticalLabels ); 695 } 696 697 /** 698 * 【TAG】チャートの横軸の値(ドメイン)に合致する位置にマーカーラインを設定します。 699 * 700 * @og.tag 701 * この属性には、マーカーラインを設定する値を記述します。 702 * 703 * @param marker ドメインのマーカーライン 704 */ 705 public void setDomainMarker( final String marker ) { 706 domainMarker = nval( getRequestParameter( marker ),domainMarker ); 707 } 708 709 /** 710 * 【TAG】横軸ラベルのラベルを表示するかどうか[true/false]を指定します(初期値:true)。 711 * 712 * @og.tag 713 * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えにくくなります。 714 * そのようなケースで、横軸のラベルそのものを表示しない場合に、false を 715 * 設定します。 716 * 初期値は、表示する(true)です。 717 * 718 * @param flag 横軸ラベルの表示有無 [true:表示する/false:表示しない] 719 */ 720 public void setUseDomainLabel( final String flag ) { 721 useDomainLabel = nval( getRequestParameter( flag ),useDomainLabel ); 722 } 723 724 /** 725 * 【TAG】マーカーラインに、その設定値を表示するかどうか[true/false]を指定します(初期値:true)。 726 * 727 * @og.tag 728 * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えない場合があります。 729 * そのようなケースで、見たい値にマーカーラインを設定し、その横に、ドメインラベル 730 * を表示する事で、ピックアップしている軸の値を容易に知ることが可能です。 731 * 初期値は、表示する(true)です。 732 * 733 * @param flag マーカーラインの設定値表示 true:表示する/false:表示しない] 734 */ 735 public void setUseMarkerLabel( final String flag ) { 736 useMarkerLabel = nval( getRequestParameter( flag ),useMarkerLabel ); 737 } 738 739 /** 740 * 【TAG】JFreeChart オブジェクトをキャッシュするかどうか[true/false]を指定します(初期値:false)。 741 * 742 * @og.tag 743 * useCache="true" を設定すると、session に、HybsSystem.JF_CHART_CACHE_KEY 744 * キーで、キャッシュされます。 745 * そのときに、domainMarker 属性と、seriesPikup 属性だけ、再設定可能になっています。 746 * 747 * 初期値は、キャッシュしない(false)です。 748 * 749 * @param flag JFreeChartをキャッシュするかどうか true:キャッシュする/false:キャッシュしない] 750 * @see #setDomainMarker( String ) 751 * @see #setSeriesPikup( String ) 752 */ 753 public void setUseCache( final String flag ) { 754 useCache = nval( getRequestParameter( flag ),useCache ); 755 } 756 757 /** 758 * 【TAG】複数シリーズのピックアップを行う場合のシリーズ番号を指定します。 759 * 760 * @og.tag 761 * 複数シリーズ(検索時に複数項目を同時に検索する場合)では、チャート上に 762 * 複数のグラフが表示されますが、その中の一つをピックアップする場合に、 763 * シリーズ番号を指定します。 764 * シリーズ番号は、0 から始まる数字です。 765 * ここでは、ピックアップされたシリーズは、赤色で表示されます。 766 * それ以外は、グレー色での表示になります。 767 * seriesPikup を使用すると、chartDataset タグの useValueVisible 属性が 768 * 影響を受けます。この属性は、データの値(itemText)を表示しますが、 769 * seriesPikup が指定された場合は、そのシリーズのみにラベル表示します。 770 * 771 * @param pikup シリーズ番号 772 */ 773 public void setSeriesPikup( final String pikup ) { 774 seriesPikup = nval( getRequestParameter( pikup ),seriesPikup ); 775 } 776 777 /** 778 * 【TAG】キャッシュ用マスタキーを指定します。 779 * 780 * @og.tag 781 * useCache="true" に設定した場合、キャッシュを使用できるか確認します。 782 * この場合、seriesPikup 違いの場合は、JFreeChart オブジェクトそのものを 783 * キャッシュしておけば、データベースアクセスなしで、グラフを再描画 784 * させることが可能です。 785 * この、同一 JFreeChart を指定するためのキーを、ここで設定します。 786 * このキーの個数だけ、JFreeChart がキャッシュされます。 787 * なお、キャッシュ保持時間は、5分固定です。 788 * 789 * @param mkey キャッシュ用マスタキー 790 */ 791 public void setMasterKey( final String mkey ) { 792 masterKey = nval( getRequestParameter( mkey ),masterKey ); 793 } 794 795 /** 796 * 【TAG】クリッカブル・マップ用URLを指定します。 797 * 798 * @og.tag 799 * 画像に、クリッカブル・マップを作成する場合の、URL を指定します。 800 * これは、画像上にエリア指定でリンク引数を作成することが可能です。 801 * URL 自身は、? 付きで固定値の引数を連結することが可能です。 802 * クリックしたエリアのカテゴリやインデックスの値(引数)は、自動的に 803 * 設定されます。(指定しない場合はチャートによって異なります) 804 * <pre> 805 * ・Pie :category、pieIndex 806 * ・XY :series、item 807 * ・Category :series、category 808 * </pre> 809 * この引数の URL の名称を変更したい場合は、URL に続けて、カンマ(,) で、 810 * 名称を記述してください。 811 * 例:link.jsp,BLOCK 812 * 813 * @param imap クリッカブル・マップ用URL 814 * @see #setImageMapTarget( String ) 815 */ 816 public void setImageMapUrl( final String imap ) { 817 imageMapUrl = nval( getRequestParameter( imap ),imageMapUrl ); 818 } 819 820 /** 821 * 【TAG】クリッカブル・マップ用TARGETを指定します。 822 * 823 * @og.tag 824 * 画像に、クリッカブル・マップを作成する場合の、TARGET を指定します。 825 * これは、画像上にエリア指定でリンクを作成する場合のフレーム指定です。 826 * 827 * @param target クリッカブル・マップ用TARGET 828 * @see #setImageMapUrl( String ) 829 */ 830 public void setImageMapTarget( final String target ) { 831 imageMapTarget = nval( getRequestParameter( target ),imageMapTarget ); 832 } 833 834 /** 835 * 【TAG】カテゴリマージン(0.0~1.0)を指定します。 836 * 837 * @og.tag 838 * カテゴリ(グラフの横軸に相当)の表示間隔(マージン)の比率を指定します。 839 * この比率は、% ではなく、数字(double)での設定になります。 840 * 何も指定しない場合は、デフォルトで自動調整されます。 841 * 842 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 843 * 844 * @param margin カテゴリマージン(0.0~1.0) 845 */ 846 public void setCategoryMargin( final String margin ) { 847 categoryMargin = nval( getRequestParameter( margin ),categoryMargin ); 848 } 849 850 /** 851 * 【TAG】下方マージン(0.0~1.0)を指定します。 852 * 853 * @og.tag 854 * カテゴリ(グラフの横軸に相当)の下方側(左側)のマージンの比率を指定します。 855 * この比率は、% ではなく、数字(double)での設定になります。 856 * 何も指定しない場合は、デフォルトで自動調整されます。 857 * 858 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 859 * 860 * @param margin 下方マージン(0.0~1.0) 861 */ 862 public void setLowerMargin( final String margin ) { 863 lowerMargin = nval( getRequestParameter( margin ),lowerMargin ); 864 } 865 866 /** 867 * 【TAG】上方マージン(0.0~1.0)を指定します。 868 * 869 * @og.tag 870 * カテゴリ(グラフの横軸に相当)の上方側(右側)のマージンの比率を指定します。 871 * この比率は、% ではなく、数字(double)での設定になります。 872 * 何も指定しない場合は、デフォルトで自動調整されます。 873 * 874 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 875 * 876 * @param margin 上方マージン(0.0~1.0) 877 */ 878 public void setUpperMargin( final String margin ) { 879 upperMargin = nval( getRequestParameter( margin ),upperMargin ); 880 } 881 882 /** 883 * 【TAG】横軸のグリッド表示有無(垂直線)を指定します(初期値:false)。 884 * 885 * @og.tag 886 * ドメイン(横軸)に対する、グリッドラインを表示するかどうか指定します。 887 * 888 * 何も指定しない場合は、表示しません。(false) 889 * 890 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 891 * 892 * @param useLine 横軸のグリッド表示有無(垂直線) 893 */ 894 public void setUseDomainLine( final String useLine ) { 895 useDomainLine = nval( getRequestParameter( useLine ),useDomainLine ); 896 } 897 898 /** 899 * 【TAG】横軸のグリッド線の色を指定します。 900 * 901 * @og.tag 902 * ドメイン(横軸)に対する、グリッドラインの表示色を指定します。 903 * 何も指定しない場合は、デフォルトで自動設定されます。 904 * 905 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 906 * 907 * @param color 横軸のグリッド線の色 908 */ 909 public void setDomainLineColor( final String color ) { 910 domainLineColor = nval( getRequestParameter( color ),domainLineColor ); 911 } 912 913 /** 914 * 【TAG】横軸ラベルをスキップする間隔を指定します。 915 * 916 * @og.tag 917 * 横軸ラベル(カテゴリラベル表示)する際に、スキップする間隔を指定します。 918 * "1" (初期値)では、1つづつ表示(つまり、すべて表示する)します。 919 * "2" とすると、1つおきに、"3" とすると、2つおきに表示します。 920 * 初期値は、"1" (すべて表示)です。 921 * なお、先頭から表示を開始します。 922 * 923 * 注意:これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。 924 * また、categoryCutNo が指定された場合は、categorySkip は使用されません。 925 * 926 * @param step スキップする間隔 927 * @see #setCategoryCutNo( String ) 928 */ 929 public void setCategorySkip( final String step ) { 930 categorySkip = nval( getRequestParameter( step ),categorySkip ); 931 } 932 933 /** 934 * 【TAG】横軸ラベルの文字位置指定のキーブレイクを指定します。 935 * 936 * @og.tag 937 * 横軸ラベル(カテゴリラベル表示)する際に、ラベルの先頭から、この指定文字数だけ 938 * カットして、表示します。 939 * その際、前回作成したカットラベルと、同一ラベルの場合は、表示しません。 940 * 例えば、データは、年月日で、年と月のみ(先頭6文字)を指定すると、 941 * 日のデータは、ラベルが表示されません。 942 * 指定される数字は、1以上の整数としてください。 943 * 初期値は、すべて表示です。 944 * 945 * 注意:これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。 946 * 947 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 948 * 949 * @param cutNo キーブレイク位置 950 * @see #setCategorySkip( String ) 951 */ 952 public void setCategoryCutNo( final String cutNo ) { 953 categoryCutNo = nval( getRequestParameter( cutNo ),categoryCutNo ); 954 } 955 956 /** 957 * 【TAG】横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END)を指定します。 958 * 959 * @og.tag 960 * 横軸のグリッド(垂直線)を、グラフのどの位置に記述するかを指定します。 961 * 具体的な値は、CategoryAnchor オブジェクトの値になります。 962 * ここでは、文字列で(START,MIDDLE,END)を指定します。(先頭一文字で判定) 963 * 何も指定しない場合は、デフォルト(MIDDLE)です。 964 * 965 * @og.rev 4.1.1.0 (2008/02/14) 新規追加 966 * 967 * @param anchor 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END) 968 */ 969 public void setCategoryAnchor( final String anchor ) { 970 categoryAnchor = nval( getRequestParameter( anchor ),categoryAnchor ); 971 972 if( categoryAnchor != null && categoryAnchor.length() > 0 ) { 973 if( ! "START".equals( categoryAnchor ) && 974 ! "MIDDLE".equals( categoryAnchor ) && 975 ! "END".equals( categoryAnchor ) ) { 976 String errMsg = "指定のAnchorは適用できません。[" + anchor + "]" 977 + HybsSystem.CR 978 + "START,MIDDLE,END の中から、指定してください。" ; 979 throw new HybsSystemException( errMsg ); 980 } 981 } 982 } 983 984 /** 985 * 【TAG】縦軸のグリッド表示有無(水平線)を指定します(初期値:true)。 986 * 987 * @og.tag 988 * レンジ(縦軸)に対する、グリッドラインを表示するかどうか指定します。 989 * 990 * 何も指定しない場合は、表示しません。(false) 991 * 992 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 993 * 994 * @param useLine 横軸のグリッド表示有無(垂直線) 995 */ 996 public void setUseRangeLine( final String useLine ) { 997 useRangeLine = nval( getRequestParameter( useLine ),useRangeLine ); 998 } 999 1000 /** 1001 * 【TAG】縦軸のグリッド線の色を指定します。 1002 * 1003 * @og.tag 1004 * レンジ(縦軸)に対する、グリッドラインの表示色を指定します。 1005 * 何も指定しない場合は、デフォルトで自動設定されます。 1006 * 1007 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 1008 * 1009 * @param color 縦軸のグリッド線の色 1010 */ 1011 public void setRangeLineColor( final String color ) { 1012 rangeLineColor = nval( getRequestParameter( color ),rangeLineColor ); 1013 } 1014 1015 /** 1016 * 【TAG】縦軸のグリッド線(水平線)をスキップする間隔を指定します。 1017 * 1018 * @og.tag 1019 * 縦軸のグリッド線(水平線)を表示する際に、スキップする間隔を指定します。 1020 * 通常は、ラベルと同じだけのグリッド線が掛かれますが、ラベルよりも 1021 * 少ない数のグリッド線(例えば、2つおき)を出す場合に、値を設定します。 1022 * "1" (初期値)では、1つづつ表示(つまり、すべて表示する)します。 1023 * "2" とすると、1つおきに、"3" とすると、2つおきに表示します。 1024 * 初期値は、"1" (すべて表示)です。 1025 * なお、先頭から表示を開始します。 1026 * 1027 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 1028 * 1029 * @param rngSkip 縦軸のグリッド線(水平線)をスキップする間隔 1030 */ 1031 public void setRangeSkip( final String rngSkip ) { 1032 rangeSkip = nval( getRequestParameter( rngSkip ),rangeSkip ); 1033 } 1034 1035 /** 1036 * 【TAG】ツールチップスの使用可否[true:利用する/false:利用しない]を指定します(初期値:false)。 1037 * 1038 * @og.tag 1039 * ラベルを利用する際に、ラベルと図面、隣のラベル同士が重なることがあります。 1040 * この場合、ツールチップスの利用をお勧めします。 1041 * 初期値は'false'です。 1042 * 1043 * @og.rev 4.3.1.0 (2008/08/09) 新規追加 1044 * 1045 * @param toolTip ツールチップス [true:利用/false:利用しない] 1046 */ 1047 public void setUseToolTip( final String toolTip ) { 1048 useToolTip = nval( getRequestParameter( toolTip ), useToolTip ); 1049 } 1050 1051 /** 1052 * 【TAG】Time,XYTime Polt関係の時間軸を表す場合のフォーマットを指定します(初期値:MM/dd)。 1053 * 1054 * @og.tag 1055 * TimeSeries 関連のデータを扱う場合の横軸の日付フォーマットを指定します。 1056 * 日付フォーマットは、java.text.SimpleDateFormat で使われる yyyy/MM/dd HH:mm:ss 表記です。 1057 * 1058 * 初期値は、"MM/dd" です。 1059 * 1060 * @og.rev 5.6.1.0 (2013/02/01) 新規追加 1061 * @og.rev 5.6.1.0 (2013/02/01) 新規追加 1062 * 1063 * @param dtFormat Time,XYTime Polt関係の時間軸を表す場合のフォーマット 1064 */ 1065 public void setDateAxisFormat( final String dtFormat ) { 1066 dateAxisFormat = nval( getRequestParameter( dtFormat ), dateAxisFormat ); 1067 } 1068 1069 /** 1070 * BODY要素に記述した、chartDataset タグの属性設定クラスをListに追加します。 1071 * 1072 * BODY部に記述された、chartDataset タグの属性は、チャートのデータ取得Queryや、 1073 * チャートの種類などの情報を管理しています。 1074 * チャートの種類(Category系)によっては、チャートを合成して表示させることが可能です。 1075 * それらの複数のチャートの指定が、chartDataset タグ で行われます。 1076 * 1077 * @param chDataset chartDatasetタグの属性設定クラス 1078 */ 1079 protected void addChartDataset( final ChartDataset chDataset ) { 1080 if( chartDataset == null ) { chartDataset = new ArrayList<ChartDataset>(); } 1081 chartDataset.add( chDataset ); 1082 } 1083 1084 /** 1085 * シリアライズ用のカスタムシリアライズ書き込みメソッド 1086 * 1087 * @og.rev 4.0.0.0 (2007/11/29) 新規追加 1088 * @serialData 一部のオブジェクト(Map<String,ChartCache>,ChartCache)は、シリアライズされません。 1089 * 1090 * @param strm ObjectOutputStreamオブジェクト 1091 * @throws IOException シリアライズに関する入出力エラーが発生した場合 1092 */ 1093 private void writeObject( final ObjectOutputStream strm ) throws IOException { 1094 strm.defaultWriteObject(); 1095 } 1096 1097 /** 1098 * シリアライズ用のカスタムシリアライズ読み込みメソッド 1099 * 1100 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 1101 * 1102 * @og.rev 4.0.0.0 (2007/11/29) 新規追加 1103 * @serialData 一部のオブジェクト(Map<String,ChartCache>,ChartCache)は、読み込まれません。 1104 * 1105 * @param strm ObjectInputStreamオブジェクト 1106 * @see #release2() 1107 * @throws IOException シリアライズに関する入出力エラーが発生した場合 1108 * @throws ClassNotFoundException クラスを見つけることができなかった場合 1109 */ 1110 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 1111 strm.defaultReadObject(); 1112 } 1113 1114 /** 1115 * このオブジェクトの文字列表現を返します。 1116 * 基本的にデバッグ目的に使用します。 1117 * 1118 * @return このクラスの文字列表現 1119 */ 1120 @Override 1121 public String toString() { 1122 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 1123 1124 rtn.append( "[" ).append( this.getClass().getName() ).append( "]" ).append( HybsSystem.CR ); 1125 rtn.append( "title [" ).append( title ).append( "]" ).append( HybsSystem.CR ); 1126 rtn.append( "width [" ).append( width ).append( "]" ).append( HybsSystem.CR ); 1127 rtn.append( "height [" ).append( height ).append( "]" ).append( HybsSystem.CR ); 1128 rtn.append( "domainLabel [" ).append( domainLabel ).append( "]" ).append( HybsSystem.CR ); 1129 rtn.append( "showLegend [" ).append( showLegend ).append( "]" ).append( HybsSystem.CR ); 1130 rtn.append( "rectangleEdge [" ).append( rectangleEdge ).append( "]" ).append( HybsSystem.CR ); 1131 rtn.append( "plotOrientation [" ).append( plotOrientation ).append( "]" ).append( HybsSystem.CR ); 1132 rtn.append( "chartBackColor [" ).append( chartBackColor ).append( "]" ).append( HybsSystem.CR ); 1133 rtn.append( "plotBackColor [" ).append( plotBackColor ).append( "]" ).append( HybsSystem.CR ); 1134 1135 return rtn.toString(); 1136 } 1137 1138 /** 1139 * JFreeChart や 画像ファイルのアドレスをキャッシュするクラスです。 1140 * このキャッシュは、JFreeChart 単位に保持されます。 1141 * JFreeChart と、画像ファイルのキャッシュを行います。 1142 * JFreeChart オブジェクトをキャッシュしなおしたタイミングで、 1143 * 画像ファイルのキャッシュは初期化(クリア)されます。 1144 * キャッシュの有効期間は、システムリソースの CHART_CACHE_TIME で定義します。 1145 */ 1146 private static final class ChartCache { 1147 private static final int CACHE_TIME = HybsSystem.sysInt( "CHART_CACHE_TIME" ); 1148 private static final long MAX_CACHE_TIME = CACHE_TIME * 1000L; 1149 1150 private final Map<String,String> fileAdrs = new HashMap<String,String>(); 1151 private final String mkey ; 1152 private long createLimitTime = 0L; 1153 private JFreeChart chart = null ; 1154 1155 /** 1156 * コンストラクター 1157 * JFreeChart オブジェクトをキャッシュするキーを指定します。 1158 * 内部的には、このキー(mkey)で、比較や hashCode が計算されています。 1159 * 1160 * @param mkey キャッシュするキー 1161 */ 1162 public ChartCache( final String mkey ) { 1163 this.mkey = mkey; 1164 } 1165 1166 /** 1167 * JFreeChart オブジェクトをキャッシュします。 1168 * 画像ファイルのキャッシュは初期化(クリア)されます。 1169 * このキャッシュのタイミングで、キャッシュ時間を初期化します。 1170 * 1171 * @param chart JFreeChartオブジェクト 1172 */ 1173 public void setJFreeChart( final JFreeChart chart ) { 1174 this.chart = chart; 1175 fileAdrs.clear(); 1176 createLimitTime = System.currentTimeMillis() + MAX_CACHE_TIME; 1177 } 1178 1179 /** 1180 * JFreeChart オブジェクトを返します。 1181 * キャッシュされていれば、そのキャッシュを、そうでなければ、null を 1182 * 返します。 1183 * キャッシュの有効期間は、システムリソースの CHART_CACHE_TIME で定義します。 1184 * オブジェクトの作成時間が、それを超える場合は、キャッシュを初期化します。 1185 * 1186 * @return JFreeChart JFreeChartオブジェクト 1187 */ 1188 public JFreeChart getJFreeChart() { 1189 return chart; 1190 } 1191 1192 /** 1193 * 画像ファイルをキャッシュします。 1194 * 画像ファイルのキャッシュはサブキー単位に行われます。 1195 * つまり、このオブジェクトの中に、複数の画像ファイルのアドレスが 1196 * キャッシュされています。 1197 * 1198 * @param chart JFreeChartオブジェクト 1199 */ 1200 public void putFileAddress( final String skey,final String adrs ) { 1201 fileAdrs.put( skey,adrs ); 1202 } 1203 1204 /** 1205 * 画像ファイルのアドレスを返します。 1206 * キャッシュされていれば、そのキャッシュを、そうでなければ、null を 1207 * 返します。 1208 * キャッシュの有効期間は、システムリソースの CHART_CACHE_TIME で定義します。 1209 * オブジェクトの作成時間が、それを超える場合は、キャッシュを初期化します。 1210 * 1211 * @return JFreeChart JFreeChartオブジェクト 1212 */ 1213 public String getFileAddress( final String skey ) { 1214 return fileAdrs.get( skey ) ; 1215 } 1216 1217 /** 1218 * キャッシュが、有効かどうかを返します。(有効:true) 1219 * キャッシュは、システムリソースの CHART_CACHE_TIME (秒)パラメータ 1220 * 指定された時間が経過すると、無効と判断されます。 1221 * 有効であれば、true を返します。 1222 * 1223 * @return 有効かどうか(有効:true/無効:false) 1224 */ 1225 public boolean isAvailable() { 1226 return System.currentTimeMillis() < createLimitTime ; 1227 } 1228 1229 /** 1230 * このオブジェクトと他のオブジェクトが等しいかどうかを示します。 1231 * キャッシュのキーが等しいかどうかで判断します。 1232 * 1233 * @param object 比較対象の参照オブジェクト 1234 * @return obj 引数に指定されたオブジェクトとこのオブジェクトが等しい場合は true、そうでない場合は false 1235 */ 1236 public boolean equals( final Object object ) { 1237 if( object instanceof ChartCache ) { 1238 return this.mkey.equals( ((ChartCache)object).mkey ); 1239 } 1240 return false ; 1241 } 1242 1243 /** 1244 * オブジェクトのハッシュコード値を返します。 1245 * このメソッドは、java.util.Hashtable によって提供されるような 1246 * ハッシュテーブルで使用するために用意されています。 1247 * equals( Object ) メソッドをオーバーライトした場合は、hashCode() メソッドも 1248 * 必ず 記述する必要があります。 1249 * この実装では、mkey.hashCode() と同値を返します。 1250 * 1251 * @return このオブジェクトのハッシュコード値 1252 */ 1253 public int hashCode() { 1254 return mkey.hashCode() ; 1255 } 1256 } 1257}