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