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