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 = "6.9.7.0 (2018/05/14)" ; 230 private static final long serialVersionUID = 697020180514L ; 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 } 405 catch( final IOException ex ) { 406 final String errMsg = "ファイル I/O が実行できませんでした。" 407 + CR + file + CR 408 + ex.getMessage(); 409 throw new HybsSystemException( errMsg,ex ); 410 } 411 412 jspPrint( imgTag ); 413 414 // キャッシュ時にセーブする。 415 if( useCache ) { 416 final ChartCache cache = new ChartCache( imgTag,cacheTime ); 417 final String cacheKey = getGUIInfoAttri( "KEY" ) + masterKey ; 418 chrtMap.put( cacheKey,cache ); // 6.4.3.1 (2016/02/12) 変数名も変えておきます。 419 setObject( CHART_CACHE_KEY,chrtMap ); // 6.4.3.1 (2016/02/12) 変数名も変えておきます。 420 } 421 } 422 // イメージタグのキャッシュがあれば、それを返す。 423 else { 424 jspPrint( imgTag ); 425 } 426 427 // 6.3.5.1 (2015/08/16) 428 // ③ 直後の実行結果を、{@CHART.TAG} 変数で取得できます。(requestスコープ) 429 setRequestAttribute( "CHART.TAG" , imgTag ); 430 431 // 3.5.4.7 (2004/02/06) 432 if( useTimeView ) { // 6.3.6.0 (2015/08/16) 433 final long dyEnd = System.currentTimeMillis(); 434 jspPrint( "<div id=\"viewTime\" value=\"" + (dyEnd-queryEnd) + "\"></div>" ); // 6.3.6.0 (2015/08/16) 435 } 436 return EVAL_PAGE; 437 } 438 439 /** 440 * タグリブオブジェクトをリリースします。 441 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 442 * 443 * @og.rev 4.0.1.0 (2007/12/13) categoryMargin、lowerMargin、upperMargin 属性を追加 444 * @og.rev 4.1.1.0 (2008/02/04) categoryCutNo , categoryAnchor , rangeSkip 属性を追加 445 * @og.rev 5.6.1.0 (2013/02/01) dateAxisFormat 属性を追加 446 * @og.rev 5.6.4.3 (2013/05/24) useVerticalLabels 属性を追加 447 * @og.rev 6.0.2.0 (2014/09/19) rangeSkip 属性 の初期値を、-1(設定なし)に変更 448 * @og.rev 6.0.2.0 (2014/09/19) cacheTime 属性 の追加 449 * @og.rev 6.3.5.0 (2015/08/08) チャートの画像ファイル名指定に対応。 450 * @og.rev 6.3.5.1 (2015/08/16) cache は、ローカル変数とする。masterKey に、初期値指定。 451 * @og.rev 6.3.6.0 (2015/08/16) useTimeView の初期値を、VIEW_USE_TIMEBAR にする。 452 * @og.rev 6.4.3.1 (2016/02/12) PMD refactoring. HashMap → ConcurrentHashMap に置き換え。変数名も変えておきます。 453 * @og.rev 6.7.3.0 (2017/01/27) 日付軸(dateAxis)の指定で、dateSegSize,dateSegIncluded,dateSegExcluded,dateStartTime を追加します。 454 * @og.rev 6.9.7.0 (2018/05/14) stopZero,notfoundMsg 属性追加 455 */ 456 @Override 457 protected void release2() { 458 super.release2(); 459 chartDataset = null; 460 title = null; 461 width = 200; 462 height = 200; 463 domainLabel = null; 464 showLegend = true; 465 rectangleEdge = "BOTTOM"; 466 plotOrientation = "VERTICAL"; 467 chartBackColor = null; // 背景色の設定 468 plotBackColor = null; // 描画領域の設定 469 rotationLabel = 3; // 横軸ラベルの傾き(1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ ) 470 useVerticalLabels = false; // 5.6.4.3 (2013/05/24) 横軸ラベルの表示向き(横書き:false/縦書き:true) 471 domainMarker = null; // 横軸のマーカーライン 472 useDomainLabel = true; // 横軸ラベルの表示有無 473 useMarkerLabel = true; // マーカーライン時の文字有無 474 useCache = false; // キャッシュするかどうか 475 seriesPikup = -1; // ピックアップするシリーズ番号 476 masterKey = "imgTag"; // キャッシュ用マスタキー // 6.3.5.1 (2015/08/16) 初期値指定 477 cacheTime = HybsSystem.sysInt( "CHART_CACHE_TIME" ); // 6.0.2.0 (2014/09/19) キャッシュ時の制限時間を、秒で指定 478 chrtMap = null; // キャッシュ用マップ // 6.4.3.1 (2016/02/12) 変数名も変えておきます。 479 imgTag = null; // キャッシュ用イメージタグ 480 imageMapUrl = null; // クリッカブル・マップ 481 imageMapTarget = null; // クリッカブル・マップ用TARGET 482 categoryMargin = null; // 4.0.2.0 (2007/12/20) カテゴリマージン(0.0~1.0) 483 lowerMargin = null; // 4.0.2.0 (2007/12/20) 下方マージン(0.0~1.0) 484 upperMargin = null; // 4.0.2.0 (2007/12/20) 上方マージン(0.0~1.0) 485 useDomainLine = false; // 4.0.3.0 (2008/01/07) 横軸のグリッド表示有無(垂直線) 486 domainLineColor = null; // 4.0.3.0 (2008/01/07) 横軸のグリッド線の色 487 useRangeLine = true; // 4.0.3.0 (2008/01/07) 縦軸のグリッド表示有無(水平線) 488 rangeLineColor = null; // 4.0.3.0 (2008/01/07) 縦軸のグリッド線の色 489 categorySkip = 1; // 4.0.3.0 (2008/01/07) 横軸ラベルをスキップする間隔 490 categoryCutNo = -1; // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のカット文字数 491 categoryAnchor = null; // 4.1.1.0 (2008/02/14) 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END) 492 rangeSkip = -1; // 4.1.1.0 (2008/02/04) 縦軸のグリッドをスキップする間隔(初期値:-1) 493 dateAxisFormat = "MM/dd"; // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係の時間軸を表す場合のフォーマット 494 dateSegSize = 0; // 6.7.3.0 (2017/01/27) SegmentedTimelineのsegment size を、分単位で指定します。 495 dateSegIncluded = 0; // 6.7.3.0 (2017/01/27) SegmentedTimelineのincluded segments(スペース)を数値で指定します。 496 dateSegExcluded = 0; // 6.7.3.0 (2017/01/27) SegmentedTimelineのexcluded segments(EE)を数値で指定します。 497 dateStartTime = null; // 6.7.3.0 (2017/01/27) SegmentedTimelineのStartTime(segment groupの開始位置) を、yyyyMMddHHmmss形式で指定します。 498 chartFile = null; // 6.3.5.0 (2015/08/08) チャートの画像ファイル名 499 useTimeView = HybsSystem.sysBool( "VIEW_USE_TIMEBAR" ); // 6.3.6.0 (2015/08/16) 500 stopZero = false; // 6.9.7.0 (2018/05/14) 501 notfoundMsg = "MSG0077"; // 6.9.7.0 (2018/05/14) 対象データはありませんでした。 502 } 503 504 /** 505 * チャートを表示するためのタグを作成します。 506 * 507 * @param filename 画像ファイル 508 * @param keyword クリッカブル・マップの対応づける為のキーワード 509 * 510 * @return タグ文字列 511 * @og.rtnNotNull 512 */ 513 private String makeTag2( final String filename,final String keyword ) { 514 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ) 515 .append( "<img" ); 516 517 if( keyword != null ) { 518 rtn.append( " usemap=\"#").append( keyword ).append( '"'); // 6.0.2.5 (2014/10/31) char を append する。 519 } 520 rtn.append( " width=\"" ).append( width ) 521 .append( "px\" height=\"" ).append( height ) 522 .append( "px\" src=\"" ).append( filename ) 523 .append( "\" /> "); 524 525 return rtn.toString(); 526 } 527 528 /** 529 * ChartCreate のオブジェクトを生成します。 530 * 531 * @og.rev 4.1.1.0 (2008/02/04) categoryCutNo , categoryAnchor 属性を追加 532 * @og.rev 5.6.1.0 (2013/02/01) dateAxisFormat 属性を追加 533 * @og.rev 5.6.1.0 (2013/02/01) useVerticalLabels 属性を追加 534 * @og.rev 6.7.3.0 (2017/01/27) 日付軸(dateAxis)の指定で、dateSegSize,dateSegIncluded,dateSegExcluded,dateStartTime を追加します。 535 * 536 * @return ChartCreateオブジェクト 537 * @og.rtnNotNull 538 */ 539 private ChartCreate create() { 540 final ChartCreate tempCreate = new ChartCreate(); 541 542 tempCreate.setTitle( title ); 543 tempCreate.setDomainLabel( domainLabel ); 544 tempCreate.setShowLegend( showLegend ); 545 tempCreate.setRectangleEdge( rectangleEdge ); 546 tempCreate.setPlotOrientation( plotOrientation ); 547 tempCreate.setChartBackColor( chartBackColor ); // 背景色の設定 548 tempCreate.setPlotBackColor( plotBackColor ); // 描画領域の設定 549 tempCreate.setRotationLabel( rotationLabel ); // 横軸ラベルの傾き 550 tempCreate.setUseVerticalLabels( useVerticalLabels ); // 5.6.4.3 (2013/05/24)) ラベルの表示向き 551 tempCreate.setDomainMarker( domainMarker ); // ドメインマーカー 552 tempCreate.setUseDomainLabel( useDomainLabel ); // 横軸ラベルの表示有無 553 tempCreate.setUseMarkerLabel( useMarkerLabel ); // マーカーの設定値表示 554 tempCreate.setSeriesPikup( seriesPikup ); // ピックアップするシリーズ番号 555 tempCreate.setImageMapUrl( imageMapUrl ); // クリッカブル・マップ用URL 556 tempCreate.setCategoryMargin( categoryMargin ); // 4.0.2.0 (2007/12/20) カテゴリマージン(0.0~1.0) 557 tempCreate.setLowerMargin( lowerMargin ); // 4.0.2.0 (2007/12/20) 下方マージン(0.0~1.0) 558 tempCreate.setUpperMargin( upperMargin ); // 4.0.2.0 (2007/12/20) 上方マージン(0.0~1.0) 559 tempCreate.setUseDomainLine( useDomainLine ); // 4.0.3.0 (2008/01/07) 横軸のグリッド表示有無(垂直線) 560 tempCreate.setDomainLineColor( domainLineColor ); // 4.0.3.0 (2008/01/07) 横軸のグリッド線の色 561 tempCreate.setUseRangeLine( useRangeLine ); // 4.0.3.0 (2008/01/07) 縦軸のグリッド表示有無(水平線) 562 tempCreate.setRangeLineColor( rangeLineColor ); // 4.0.3.0 (2008/01/07) 縦軸のグリッド線の色 563 tempCreate.setCategorySkip( categorySkip ); // 4.0.3.0 (2008/01/07) 横軸ラベルをスキップする間隔 564 tempCreate.setCategoryCutNo( categoryCutNo ); // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のカット文字数 565 tempCreate.setCategoryAnchor( categoryAnchor ); // 4.1.1.0 (2008/02/04) 横軸のグリッド(垂直線)の書き出し位置 566 tempCreate.setRangeSkip( rangeSkip ); // 4.1.1.0 (2008/02/04) 縦軸のグリッド線(水平線)をスキップする間隔 567 tempCreate.setUseToolTip( useToolTip ); // 4.3.1.0 (2008/08/09) ツールチップスの利用 568 tempCreate.setDateAxisFormat( dateAxisFormat ); // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係の時間軸を表す場合のフォーマット指定 569 tempCreate.setSegmentedTimelineInfo( dateSegSize,dateSegIncluded,dateSegExcluded,dateStartTime ); // 6.7.3.0 (2017/01/27) SegmentedTimeline 関係 570 571 if( isDebug() ) { tempCreate.setDebug( true ); } // 4.0.2.0 (2007/12/20) 572 573 tempCreate.setDatasetList( chartDataset ); 574 575 return tempCreate ; 576 } 577 578 /** 579 * テンポラリFile を取得します。 580 * 581 * ここでは、一般的なファイル出力を考慮した テンポラリFile を作成します。 582 * 583 * ※ 6.3.5.0 (2015/08/08) で、chartFile属性を指定する事で、任意のファイルで 584 * 画像を作成できるようになりました。ただし、出力先フォルダは、CHART_TEMP_DIR 585 * です。 586 * (CHART_TEMP_DIR[={@og.value SystemData#CHART_TEMP_DIR}])。 587 * 588 * @og.rev 6.3.5.0 (2015/08/08) チャートの画像ファイル名指定に対応。 589 * 590 * @param fileURL ファイルを作成するディレクトリ 591 * 592 * @return テンポラリFile 593 * @og.rtnNotNull 594 */ 595 private File getTempFile( final String fileURL ) { 596 597 final String directory = HybsSystem.url2dir( fileURL ); 598 final File dir = new File( directory ); 599 if( ! dir.exists() && ! dir.mkdirs() ) { 600 final String errMsg = "ディレクトリの作成に失敗しました。[" + directory + "]"; 601 throw new HybsSystemException( errMsg ); 602 } 603 604 final File file ; 605 try { 606 // 6.3.5.0 (2015/08/08) チャートの画像ファイル名指定に対応。 607 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 608 if( chartFile == null ) { 609 file = File.createTempFile( "JFree",".png",dir ); 610 file.deleteOnExit(); 611 } 612 else { 613 file = new File( dir , chartFile ); 614 } 615 616 } 617 catch( final IOException ex ) { 618 final String errMsg = "ファイル名がオープン出来ませんでした。" 619 + CR 620 + "Url:" + fileURL ; 621 throw new HybsSystemException( errMsg,ex ); 622 } 623 624 return file ; 625 } 626 627 /** 628 * 【TAG】チャートのタイトルをセットします。 629 * 630 * @og.tag チャートのタイトルをセットします。 631 * 632 * @param ttl タイトル 633 */ 634 public void setTitle( final String ttl ) { 635 title = nval( getRequestParameter( ttl ),title ); 636 } 637 638 /** 639 * 【TAG】チャートの横幅をセットします(初期値:200)。 640 * 641 * @og.tag 642 * タイトルや凡例も含んだ大きさです。データ領域は自動計算されます。 643 * 644 * @og.rev 4.0.1.0 (2007/12/13) 引数に "px" を使用できるようにする。 645 * 646 * @param wd 横幅 647 */ 648 public void setWidth( final String wd ) { 649 // 引数に、"px" が使用されていた場合は、それを取り除く。 650 if( wd != null && wd.length() >= 3 && wd.endsWith( "px" ) ) { 651 width = Integer.parseInt( wd.substring( 0,wd.length()-2 ) ); // 6.0.2.4 (2014/10/17) メソッド間違い 652 } 653 else { 654 width = nval( getRequestParameter( wd ),width ); 655 } 656 } 657 658 /** 659 * 【TAG】チャートの縦幅をセットします(初期値:200)。 660 * 661 * @og.tag 662 * タイトルや凡例も含んだ大きさです。データ領域は自動計算されます。 663 * 664 * @og.rev 4.0.1.0 (2007/12/13) 引数に "px" を使用できるようにする。 665 * 666 * @param ht 縦幅 667 */ 668 public void setHeight( final String ht ) { 669 // 引数に、"px" が使用されていた場合は、それを取り除く。 670 if( ht != null && ht.length() >= 3 && ht.endsWith( "px" ) ) { 671 height = Integer.parseInt( ht.substring( 0,ht.length()-2 ) ); // 6.0.2.4 (2014/10/17) メソッド間違い 672 } 673 else { 674 height = nval( getRequestParameter( ht ),height ); 675 } 676 } 677 678 /** 679 * 【TAG】チャートのドメインラベルを指定します。 680 * 681 * @og.tag 682 * チャートのドメインラベルを指定します。 683 * 684 * @param dmLbl ドメインラベル 685 */ 686 public void setDomainLabel( final String dmLbl ) { 687 domainLabel = nval( getRequestParameter( dmLbl ),domainLabel ); 688 } 689 690 /** 691 * 【TAG】チャートの凡例の表示可否[true/false]をセットします(初期値:true[表示する])。 692 * 693 * @og.tag 694 * 初期値は、表示する(true) です。 695 * 696 * @param swLegend 凡例の表示可否 [true:表示する/それ以外:しない] 697 */ 698 public void setShowLegend( final String swLegend ) { 699 showLegend = nval( getRequestParameter( swLegend ),showLegend ); 700 } 701 702 /** 703 * 【TAG】チャートの表示箇所を、[TOP/BOTTOM/RIGHT/LEFT]で指定します(初期値:BOTTOM)。 704 * 705 * @og.tag 706 * 表示箇所は、org.jfree.ui.RectangleEdge クラスの設定値を使用します。 707 * 指定できるのは、TOP、BOTTOM、RIGHT、LEFT で、各文字の頭一文字で 708 * 判定してます。つまり、T,B,R,L で、判定を行い、それ以外はエラーになります。 709 * 初期値は、BOTTOM です。 710 * 711 * @param rectEdge 凡例表示方向 [TOP/BOTTOM/RIGHT/LEFT] 712 */ 713 public void setRectangleEdge( final String rectEdge ) { 714 rectangleEdge = nval( getRequestParameter( rectEdge ),rectangleEdge ); 715 } 716 717 /** 718 * 【TAG】チャートのプロット(Plot)表示方向を、[VERTICAL(or V)/HORIZONTAL(or H)]で指定します(初期値:VERTICAL)。 719 * 720 * @og.tag 721 * 軸表示方向は、org.jfree.chart.plot.PlotOrientation クラスの設定値を使用します。 722 * 指定できるのは、VERTICAL、HORIZONTALで、各文字の頭一文字で 723 * 判定してます。つまり、V,H で、判定を行い、それ以外はエラーになります。 724 * 初期値は、VERTICAL です。 725 * 726 * @param orientation 表示方向 [VERTICAL(or V)/HORIZONTAL(or H)] 727 */ 728 public void setPlotOrientation( final String orientation ) { 729 plotOrientation = nval( getRequestParameter( orientation ),plotOrientation ); 730 } 731 732 /** 733 * 【TAG】チャートの背景色を指定します。 734 * 735 * @og.tag 736 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 737 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 738 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 739 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 740 * 741 * @param chBackClr 背景色 742 * @see java.awt.Color#BLACK 743 */ 744 public void setChartBackColor( final String chBackClr ) { 745 chartBackColor = nval( getRequestParameter( chBackClr ),chartBackColor ); 746 } 747 748 /** 749 * 【TAG】チャートの描画領域の色を指定します。 750 * 751 * @og.tag 752 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 753 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 754 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 755 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 756 * 757 * @param plBackClr 描画領域色 758 * @see java.awt.Color#BLACK 759 */ 760 public void setPlotBackColor( final String plBackClr ) { 761 plotBackColor = nval( getRequestParameter( plBackClr ),plotBackColor ); 762 } 763 764 /** 765 * 【TAG】チャートのカテゴリーラベルの方向を指定します(初期値は、3:60度)。 766 * 767 * @og.tag 768 * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。 769 * この指示数に相当する値を設定します。 770 * 1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ 771 * マイナスは、下方向に回転させます。 772 * 0 を指定した場合は、何も設定しません。 773 * 初期値は、3:60度です。 774 * 775 * @param rttLabel ラベルの方向 (例:1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・) 776 */ 777 public void setRotationLabel( final String rttLabel ) { 778 rotationLabel = nval( getRequestParameter( rttLabel ),rotationLabel ); 779 } 780 781 /** 782 * 【TAG】ラベルの表示向きを縦にするかどうか[false/true]を指定します(初期値:false[横書き])。 783 * 784 * @og.tag 785 * ChartCreate の rotationLabel は、角度を指定できましたが、NumberAxis,DateAxis では、 786 * 縦にするかどうかの指定しかできません。 787 * ここでは、true を指定するとラベルは、縦書きになります。 788 * 初期値は、false(横書き)です。 789 * 790 * @og.rev 5.6.4.3 (2013/05/24)) 新規追加 791 * 792 * @param useVLavels ラベルの表示向き [false:横書き/true:縦書き] 793 */ 794 public void setUseVerticalLabels( final String useVLavels ) { 795 useVerticalLabels = nval( getRequestParameter( useVLavels ),useVerticalLabels ); 796 } 797 798 /** 799 * 【TAG】チャートの横軸の値(ドメイン)に合致する位置にマーカーラインを設定します。 800 * 801 * @og.tag 802 * この属性には、マーカーラインを設定する値を記述します。 803 * 804 * @param marker 横軸マーカーライン 805 */ 806 public void setDomainMarker( final String marker ) { 807 domainMarker = nval( getRequestParameter( marker ),domainMarker ); 808 } 809 810 /** 811 * 【TAG】横軸ラベルのラベルを表示するかどうか[true/false]を指定します(初期値:true)。 812 * 813 * @og.tag 814 * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えにくくなります。 815 * そのようなケースで、横軸のラベルそのものを表示しない場合に、false を 816 * 設定します。 817 * 初期値は、表示する(true)です。 818 * 819 * @param flag 横軸ラベルの表示有無 [true:表示する/false:表示しない] 820 */ 821 public void setUseDomainLabel( final String flag ) { 822 useDomainLabel = nval( getRequestParameter( flag ),useDomainLabel ); 823 } 824 825 /** 826 * 【TAG】マーカーラインに、その設定値を表示するかどうか[true/false]を指定します(初期値:true)。 827 * 828 * @og.tag 829 * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えない場合があります。 830 * そのようなケースで、見たい値にマーカーラインを設定し、その横に、ドメインラベル 831 * を表示する事で、ピックアップしている軸の値を容易に知ることが可能です。 832 * 初期値は、表示する(true)です。 833 * 834 * @param flag 設定値表示 [true:する/false:しない] 835 */ 836 public void setUseMarkerLabel( final String flag ) { 837 useMarkerLabel = nval( getRequestParameter( flag ),useMarkerLabel ); 838 } 839 840 /** 841 * 【TAG】JFreeChartで作成されたイメージタグをキャッシュするかどうか[true/false]を指定します(初期値:false)。 842 * 843 * @og.tag 844 * useCache="true" を設定すると、session に、HybsSystem.JF_CHART_CACHE_KEY 845 * キーで、Mapが、キャッシュされます。そのMap に、画面ID + masterKey 単位にキャッシュされます。 846 * 6.0.2.0 (2014/09/19) 以降は、イメージタグのみキャッシュしますので、 847 * domainMarker 属性と、seriesPikup 属性を再設定する場合は、画像を再作成する 848 * 必要がありますので、masterKey を変更する必要があります。 849 * (または、seriesPikup 属性をmasterKeyに含めてください。) 850 * 851 * 初期値は、キャッシュしない(false)です。 852 * 853 * @param flag キャッシュ可否 [true:する/false:しない] 854 * @see #setDomainMarker( String ) 855 * @see #setSeriesPikup( String ) 856 * @see #setCacheTime( String ) 857 */ 858 public void setUseCache( final String flag ) { 859 useCache = nval( getRequestParameter( flag ),useCache ); 860 } 861 862 /** 863 * 【TAG】キャッシュ時の制限時間を、秒で指定します 864 * (初期値:CHART_CACHE_TIME[={@og.value SystemData#CHART_CACHE_TIME}])。 865 * 866 * @og.tag 867 * useCache="true" に設定した場合、キャッシュを使用します。 868 * この場合、cacheTime で指定した時間は、キャッシュが使用されます。 869 * 制限時間を超えたキャッシュは破棄され、新しいキャッシュにセットされます。 870 * 871 * 初期値:システム定数のCHART_CACHE_TIME[={@og.value SystemData#CHART_CACHE_TIME}])。 872 * 873 * @og.rev 6.0.2.0 (2014/09/19) 新規追加 874 * 875 * @param ccTime キャッシュ時の制限時間(秒) 876 * @see #setMasterKey( String ) 877 * @see #setUseCache( String ) 878 */ 879 public void setCacheTime( final String ccTime ) { 880 cacheTime = nval( getRequestParameter( ccTime ),cacheTime ); 881 } 882 883 /** 884 * 【TAG】useCache="true" 時のキャッシュの保存先scopeを指定します(初期値:session)。 885 * 886 * @og.tag 887 * 通常のグラフのキャッシュは、ユーザー単位に行う(session)スコープに保管されます。 888 * 現状の JFreeChart でのグラフは、作成毎に、実イメージファイルを作成し、それを 889 * 返すため、ほとんど書き換えが無く、多くにユーザーがアクセスする様なケース・・例えば、 890 * トップメニューに月次損益のグラフを表示するなどの場合、無駄にファイルが作成されます。 891 * そこで、ユーザー間も共有する様なグラフには、cacheScope="application" とすることで、 892 * 全ユーザー共通のキャッシュにすることができます。 893 * 一応、スコープとしては、"request","page","session","application" が指定できます。 894 * 895 * @og.rev 6.3.5.1 (2015/08/16) キャッシュ処理のロジックを整理します。新規追加。 896 * 897 * @param scp スコープ [request/page/session/application] 898 * @see #getScope() 899 */ 900 public void setCacheScope( final String scp ) { 901 setScope( scp ); 902 } 903 904 /** 905 * 【TAG】キャッシュ用マスタキーを指定します(初期値:imgTag)。 906 * 907 * @og.tag 908 * useCache="true" に設定した場合、このキーを用いて、キャッシュします。 909 * 実際のキャッシュは、画面ID + masterKey になります。 910 * 911 * ※ 6.0.2.0 (2014/09/19) 以降は、イメージタグのみキャッシュしますので、 912 * 従来の様に、seriesPikup 違いに応じた処理は行いません。 913 * よって、useCache="true" で、seriesPikup 違いの場合は、再検索させる 914 * 必要がありますので、masterKey を変更する必要があります。 915 * (または、seriesPikup 属性をmasterKeyに含めてください。) 916 * なお、キャッシュ保持時間は、#setCacheTime( String ) で指定できます。 917 * 918 * @og.rev 6.3.5.1 (2015/08/16) masterKey に、初期値指定。 919 * 920 * @param mkey キャッシュ用マスタキー 921 * @see #setUseCache( String ) 922 * @see #setCacheTime( String ) 923 */ 924 public void setMasterKey( final String mkey ) { 925 masterKey = nval( getRequestParameter( mkey ),masterKey ); 926 } 927 928 /** 929 * 【TAG】複数シリーズのピックアップを行う場合のシリーズ番号を指定します。 930 * 931 * @og.tag 932 * 複数シリーズ(検索時に複数項目を同時に検索する場合)では、チャート上に 933 * 複数のグラフが表示されますが、その中の一つをピックアップする場合に、 934 * シリーズ番号を指定します。 935 * シリーズ番号は、0 から始まる数字です。 936 * ここでは、ピックアップされたシリーズは、赤色で表示されます。 937 * それ以外は、グレー色での表示になります。 938 * seriesPikup を使用すると、chartDataset タグの useValueVisible 属性が 939 * 影響を受けます。この属性は、データの値(itemText)を表示しますが、 940 * seriesPikup が指定された場合は、そのシリーズのみにラベル表示します。 941 * 942 * @param pikup シリーズ番号 943 */ 944 public void setSeriesPikup( final String pikup ) { 945 seriesPikup = nval( getRequestParameter( pikup ),seriesPikup ); 946 } 947 948 /** 949 * 【TAG】クリッカブル・マップ用URLを指定します。 950 * 951 * @og.tag 952 * 画像に、クリッカブル・マップを作成する場合の、URL を指定します。 953 * これは、画像上にエリア指定でリンク引数を作成することが可能です。 954 * URL 自身は、? 付きで固定値の引数を連結することが可能です。 955 * クリックしたエリアのカテゴリやインデックスの値(引数)は、自動的に 956 * 設定されます。(指定しない場合はチャートによって異なります) 957 * <pre> 958 * ・Pie :category、pieIndex 959 * ・XY :series、item 960 * ・Category :series、category 961 * </pre> 962 * この引数の URL の名称を変更したい場合は、URL に続けて、カンマ(,) で、 963 * 名称を記述してください。 964 * 例:link.jsp,BLOCK 965 * 966 * @param imap クリッカブル・マップ用URL 967 * @see #setImageMapTarget( String ) 968 */ 969 public void setImageMapUrl( final String imap ) { 970 imageMapUrl = nval( getRequestParameter( imap ),imageMapUrl ); 971 } 972 973 /** 974 * 【TAG】クリッカブル・マップ用TARGETを指定します。 975 * 976 * @og.tag 977 * 画像に、クリッカブル・マップを作成する場合の、TARGET を指定します。 978 * これは、画像上にエリア指定でリンクを作成する場合のフレーム指定です。 979 * 980 * @param target クリッカブル・マップ用TARGET 981 * @see #setImageMapUrl( String ) 982 */ 983 public void setImageMapTarget( final String target ) { 984 imageMapTarget = nval( getRequestParameter( target ),imageMapTarget ); 985 } 986 987 /** 988 * 【TAG】カテゴリマージン(0.0~1.0)を指定します(初期値:null 自動調整)。 989 * 990 * @og.tag 991 * カテゴリ(グラフの横軸に相当)の表示間隔(マージン)の比率を指定します。 992 * この比率は、% ではなく、数字(double)での設定になります。 993 * 何も指定しない場合は、デフォルトで自動調整されます。 994 * 995 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 996 * 997 * @param margin カテゴリマージン(0.0~1.0) 998 */ 999 public void setCategoryMargin( final String margin ) { 1000 categoryMargin = nval( getRequestParameter( margin ),categoryMargin ); 1001 } 1002 1003 /** 1004 * 【TAG】下方マージン(0.0~1.0)を指定します(初期値:null 自動調整)。 1005 * 1006 * @og.tag 1007 * カテゴリ(グラフの横軸に相当)の下方側(左側)のマージンの比率を指定します。 1008 * この比率は、% ではなく、数字(double)での設定になります。 1009 * 何も指定しない場合は、デフォルトで自動調整されます。 1010 * 1011 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 1012 * 1013 * @param margin 下方マージン(0.0~1.0) 1014 */ 1015 public void setLowerMargin( final String margin ) { 1016 lowerMargin = nval( getRequestParameter( margin ),lowerMargin ); 1017 } 1018 1019 /** 1020 * 【TAG】上方マージン(0.0~1.0)を指定します(初期値:null 自動調整)。 1021 * 1022 * @og.tag 1023 * カテゴリ(グラフの横軸に相当)の上方側(右側)のマージンの比率を指定します。 1024 * この比率は、% ではなく、数字(double)での設定になります。 1025 * 何も指定しない場合は、デフォルトで自動調整されます。 1026 * 1027 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 1028 * 1029 * @param margin 上方マージン(0.0~1.0) 1030 */ 1031 public void setUpperMargin( final String margin ) { 1032 upperMargin = nval( getRequestParameter( margin ),upperMargin ); 1033 } 1034 1035 /** 1036 * 【TAG】横軸のグリッド表示有無(垂直線)を指定します(初期値:false)。 1037 * 1038 * @og.tag 1039 * ドメイン(横軸)に対する、グリッドライン(垂直線)を表示するかどうか指定します。 1040 * 1041 * 何も指定しない場合は、表示しません。(false) 1042 * 1043 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 1044 * 1045 * @param useLine 横軸のグリッド表示有無 [true:する/false:しない] 1046 */ 1047 public void setUseDomainLine( final String useLine ) { 1048 useDomainLine = nval( getRequestParameter( useLine ),useDomainLine ); 1049 } 1050 1051 /** 1052 * 【TAG】横軸のグリッド線の色を指定します。 1053 * 1054 * @og.tag 1055 * ドメイン(横軸)に対する、グリッドラインの表示色を指定します。 1056 * 何も指定しない場合は、デフォルトで自動設定されます。 1057 * 1058 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 1059 * 1060 * @param color 横軸のグリッド線の色 1061 */ 1062 public void setDomainLineColor( final String color ) { 1063 domainLineColor = nval( getRequestParameter( color ),domainLineColor ); 1064 } 1065 1066 /** 1067 * 【TAG】横軸ラベルをスキップする間隔を指定します(初期値:1 すべて表示)。 1068 * 1069 * @og.tag 1070 * 横軸ラベル(カテゴリラベル表示)する際に、スキップする間隔を指定します。 1071 * "1" (初期値)では、1つづつ表示(つまり、すべて表示する)します。 1072 * "2" とすると、1つおきに、"3" とすると、2つおきに表示します。 1073 * 初期値は、"1" (すべて表示)です。 1074 * なお、先頭から表示を開始します。 1075 * 1076 * 注意:これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。 1077 * また、categoryCutNo が指定された場合は、categorySkip は使用されません。 1078 * 1079 * @param step スキップする間隔 1080 * @see #setCategoryCutNo( String ) 1081 */ 1082 public void setCategorySkip( final String step ) { 1083 categorySkip = nval( getRequestParameter( step ),categorySkip ); 1084 } 1085 1086 /** 1087 * 【TAG】横軸ラベルの文字位置指定のカット文字数を指定します(初期値:-1 すべて表示)。 1088 * 1089 * @og.tag 1090 * 横軸ラベル(カテゴリラベル表示)する際に、ラベルの先頭から、この指定文字数だけ 1091 * カットして、表示します。 1092 * その際、前回作成したカットラベルと、同一ラベルの場合は、表示しません。 1093 * 例えば、データは、年月日で、年と月のみ(先頭6文字)を指定すると、 1094 * 日のデータは、ラベルが表示されません。 1095 * 指定される数字は、1以上の整数としてください。 1096 * 初期値は、すべて表示です。 1097 * 1098 * 注意:これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。 1099 * 1100 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 1101 * 1102 * @param cutNo カット文字数位置 1103 * @see #setCategorySkip( String ) 1104 */ 1105 public void setCategoryCutNo( final String cutNo ) { 1106 categoryCutNo = nval( getRequestParameter( cutNo ),categoryCutNo ); 1107 } 1108 1109 /** 1110 * 【TAG】横軸のグリッド(垂直線)の書き出し位置[START/MIDDLE/END]を指定します(初期値:null)。 1111 * 1112 * @og.tag 1113 * 横軸のグリッド(垂直線)を、グラフのどの位置に記述するかを指定します。 1114 * 具体的な値は、CategoryAnchor オブジェクトの値になります。 1115 * ここでは、文字列で(START,MIDDLE,END)を指定します。(先頭一文字で判定) 1116 * 何も指定しない場合は、デフォルト(MIDDLE)です。 1117 * 1118 * @og.rev 4.1.1.0 (2008/02/14) 新規追加 1119 * 1120 * @param anchor 書き出し位置 [START/MIDDLE/END] 1121 */ 1122 public void setCategoryAnchor( final String anchor ) { 1123 categoryAnchor = nval( getRequestParameter( anchor ),categoryAnchor ); 1124 1125 // 6.9.7.0 (2018/05/14) PMD These nested if statements could be combined 1126// if( categoryAnchor != null && categoryAnchor.length() > 0 ) { 1127// if( ! "START".equals( categoryAnchor ) && 1128 if( categoryAnchor != null && categoryAnchor.length() > 0 && 1129 ! "START".equals( categoryAnchor ) && 1130 ! "MIDDLE".equals( categoryAnchor ) && 1131 ! "END".equals( categoryAnchor ) ) { 1132 final String errMsg = "指定のAnchorは適用できません。[" + anchor + "]" 1133 + CR 1134 + "START,MIDDLE,END の中から、指定してください。" ; 1135 throw new HybsSystemException( errMsg ); 1136// } 1137 } 1138 } 1139 1140 /** 1141 * 【TAG】縦軸のグリッド表示有無(水平線)を指定します(初期値:true)。 1142 * 1143 * @og.tag 1144 * レンジ(縦軸)に対する、グリッドライン(垂直線)を表示するかどうか指定します。 1145 * 1146 * 何も指定しない場合は、表示しません。(false) 1147 * 1148 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 1149 * 1150 * @param useLine グリッド表示有無 [true:する/false:しない] 1151 */ 1152 public void setUseRangeLine( final String useLine ) { 1153 useRangeLine = nval( getRequestParameter( useLine ),useRangeLine ); 1154 } 1155 1156 /** 1157 * 【TAG】縦軸のグリッド線(水平線)の色を指定します(初期値:null 自動設定)。 1158 * 1159 * @og.tag 1160 * レンジ(縦軸)に対する、グリッドラインの表示色を指定します。 1161 * 何も指定しない場合は、デフォルトで自動設定されます。 1162 * 1163 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 1164 * 1165 * @param color 縦軸のグリッド線(水平線)の色 1166 */ 1167 public void setRangeLineColor( final String color ) { 1168 rangeLineColor = nval( getRequestParameter( color ),rangeLineColor ); 1169 } 1170 1171 /** 1172 * 【TAG】縦軸のグリッド線(水平線)をスキップする間隔を指定します(初期値:-1)。 1173 * 1174 * @og.tag 1175 * 縦軸のグリッド線(水平線)を表示する際に、スキップする間隔を指定します。 1176 * 通常は、ラベルと同じだけのグリッド線が掛かれますが、ラベルよりも 1177 * 少ない数のグリッド線(例えば、2つおき)を出す場合に、値を設定します。 1178 * "1" (初期値)では、1つづつ表示(つまり、すべて表示する)します。 1179 * "2" とすると、1つおきに、"3" とすると、2つおきに表示します。 1180 * なお、先頭から表示を開始します。 1181 * 1182 * 6.0.2.0 (2014/09/19) 前回の JFreeChart のVerUpで、グリッド線の表示が 1183 * 5個おきに変わったようです。設定する値を マイナスにすると、初期設定の値を 1184 * 使用するように変更します。微調整は、個々にお願いします。 1185 * 1186 * 初期値は、"-1" (設定しない)です。 1187 * 1188 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 1189 * @og.rev 6.0.2.0 (2014/09/19) rangeSkip 属性 の初期値を、-1(設定なし)に変更 1190 * 1191 * @param rngSkip 縦軸のグリッド線(水平線)をスキップする間隔 1192 */ 1193 public void setRangeSkip( final String rngSkip ) { 1194 rangeSkip = nval( getRequestParameter( rngSkip ),rangeSkip ); 1195 } 1196 1197 /** 1198 * 【TAG】ツールチップスの使用可否[true:利用する/false:利用しない]を指定します(初期値:false)。 1199 * 1200 * @og.tag 1201 * ラベルを利用する際に、ラベルと図面、隣のラベル同士が重なることがあります。 1202 * この場合、ツールチップスの利用をお勧めします。 1203 * 初期値は'false'です。 1204 * 1205 * @og.rev 4.3.1.0 (2008/08/09) 新規追加 1206 * 1207 * @param toolTip ツールチップス [true:利用/false:利用しない] 1208 */ 1209 public void setUseToolTip( final String toolTip ) { 1210 useToolTip = nval( getRequestParameter( toolTip ), useToolTip ); 1211 } 1212 1213 /** 1214 * 【TAG】Time,XYTime Polt関係の時間軸を表す場合のフォーマットを指定します(初期値:MM/dd)。 1215 * 1216 * @og.tag 1217 * TimeSeries 関連のデータを扱う場合の横軸の日付フォーマットを指定します。 1218 * 日付フォーマットは、java.text.SimpleDateFormat で使われる yyyy/MM/dd HH:mm:ss 表記です。 1219 * 1220 * 初期値は、"MM/dd" です。 1221 * 1222 * @og.rev 5.6.1.0 (2013/02/01) 新規追加 1223 * 1224 * @param dtFormat 時間軸を表すフォーマット 1225 */ 1226 public void setDateAxisFormat( final String dtFormat ) { 1227 dateAxisFormat = nval( getRequestParameter( dtFormat ), dateAxisFormat ); 1228 } 1229 1230 /** 1231 * 【TAG】Time,XYTime Polt関係の時間軸で、SegmentedTimelineのsegment size を、分単位で指定します。 1232 * 1233 * @og.tag 1234 * 日単位を指定する場合は、24*60 = 1440 を指定します。 1235 * 0 または、何も指定しない場合は、SegmentedTimeline を使用しません。 1236 * <pre> 1237 * start time 1238 * | 1239 * v 1240 * 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 1241 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+... 1242 * | | | | | |EE|EE| | | | | |EE|EE| | | | | |EE|EE| 1243 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+... 1244 * [_____________] [___] [_] 1245 * | | | 1246 * included excluded segment 1247 * segments segments size 1248 * [___________________] 1249 * | 1250 * segment group 1251 * </pre> 1252 * 1253 * @og.rev 6.7.3.0 (2017/01/27) 新規追加 1254 * 1255 * @param segSize SegmentedTimelineのsegment size を、分単位で指定 1256 */ 1257 public void setDateSegSize( final String segSize ) { 1258 dateSegSize = nval( getRequestParameter( segSize ), dateSegSize ); 1259 } 1260 1261 /** 1262 * 【TAG】Time,XYTime Polt関係の時間軸で、SegmentedTimelineのincluded segments(スペース)を数値で指定します。 1263 * 1264 * @og.tag 1265 * segment group内で、スペース(空ける) になる segment数 を指定します。 1266 * この値は、dateSegSize を指定しない限り、使用されません。 1267 * 1268 * @og.rev 6.7.3.0 (2017/01/27) 新規追加 1269 * 1270 * @param segIncluded SegmentedTimelineのincluded segments(スペース)を数値で指定 1271 * @see #setDateSegSize( String ) 1272 */ 1273 public void setDateSegIncluded( final String segIncluded ) { 1274 dateSegIncluded = nval( getRequestParameter( segIncluded ), dateSegIncluded ); 1275 } 1276 1277 /** 1278 * 【TAG】Time,XYTime Polt関係の時間軸で、SegmentedTimelineのexcluded segments(EE)を数値で指定します。 1279 * 1280 * @og.tag 1281 * segment group内で、excluded する segment数 を指定します。 1282 * この値は、dateSegSize を指定しない限り、使用されません。 1283 * 1284 * @og.rev 6.7.3.0 (2017/01/27) 新規追加 1285 * 1286 * @param segExcluded SegmentedTimelineのexcluded segments(EE)を数値で指定 1287 * @see #setDateSegSize( String ) 1288 */ 1289 public void setDateSegExcluded( final String segExcluded ) { 1290 dateSegExcluded = nval( getRequestParameter( segExcluded ), dateSegExcluded ); 1291 } 1292 1293 /** 1294 * 【TAG】Time,XYTime Polt関係の時間軸で、SegmentedTimelineのStartTime(segment groupの開始位置) を、yyyyMMddHHmmss形式で指定します。 1295 * 1296 * @og.tag 1297 * TimeSeries 関連のデータを扱う場合の横軸に、SegmentedTimelineを指定します。 1298 * 日付フォーマットは、yyyyMMddHHmmss形式で指定します。 1299 * 1300 * この値は、dateSegSize を指定しない限り、使用されません。 1301 * 初期値は、null(自動設定) です。 1302 * 1303 * @og.rev 6.7.3.0 (2017/01/27) 新規追加 1304 * 1305 * @param startTime SegmentedTimelineのStartTime(segment groupの開始位置) 1306 * @see #setDateSegSize( String ) 1307 */ 1308 public void setDateStartTime( final String startTime ) { 1309 dateStartTime = nval( getRequestParameter( startTime ), dateStartTime ); 1310 } 1311 1312 /** 1313 * 【TAG】チャートの画像ファイル名を指定します(初期値:自動)。 1314 * 1315 * @og.tag 1316 * チャートは、png 形式のファイルとして作成されます。そのファイル名を指定します。 1317 * ファイルは、CHART_TEMP_DIR 以下に、作成されます。 1318 * 原仕様では、作成するフォルダを指定できません。 1319 * 何も指定しない場合は、JFreeXXXXX.png 形式のテンポラリファイル名で作成されます。 1320 * この場合は、File#deleteOnExit() を付与するので、Tomcat停止時に自動的に削除されます。 1321 * chartFile 属性で指定した場合は、自動削除されませんので、ご注意ください。 1322 * 1323 * 初期値は、自動( File.createTempFile( "JFree",".png" , CHART_TEMP_DIR ) ) です。 1324 * (CHART_TEMP_DIR[={@og.value SystemData#CHART_TEMP_DIR}])。 1325 * 1326 * @og.rev 6.3.5.0 (2015/08/08) チャートの画像ファイル名指定に対応。 1327 * 1328 * @param file 時間軸を表すフォーマット 1329 */ 1330 public void setChartFile( final String file ) { 1331 chartFile = nval( getRequestParameter( file ), chartFile ); 1332 } 1333 1334 /** 1335 * 【TAG】処理時間を表示する TimeView を表示するかどうか[true:する/false:しない]を指定します 1336 * (初期値:VIEW_USE_TIMEBAR[={@og.value SystemData#VIEW_USE_TIMEBAR}])。 1337 * 1338 * @og.tag 1339 * true に設定すると、処理時間を表示するバーイメージが表示されます。 1340 * これは、DB検索、APサーバー処理、画面表示の各処理時間をバーイメージで 1341 * 表示させる機能です。処理時間の目安になります。 1342 * (初期値:VIEW_USE_TIMEBAR[={@og.value SystemData#VIEW_USE_TIMEBAR}])。 1343 * 1344 * @og.rev 6.3.6.0 (2015/08/16) useTimeView の初期値を、VIEW_USE_TIMEBAR にする。 1345 * 1346 * @param flag 処理時間を表示 [true:する/false:しない] 1347 */ 1348 public void setUseTimeView( final String flag ) { 1349 useTimeView = nval( getRequestParameter( flag ),useTimeView ); 1350 } 1351 1352 /** 1353 * 【TAG】検索結果が0件のとき処理を停止するかどうか[true/false]を指定します(初期値:false[続行する])。 1354 * 1355 * @og.tag 1356 * ChartDatasetTag のデータが、0件の場合、すぐに、処理を中断します。 1357 * この場合は、上位の 1358 * その際、検索結果が、0件のとき処理を停止するかどうかを決定します。 1359 * useTableData="true" の場合は、 query タグで、stopZero 属性を、設定してください。 1360 * 初期値は、false(続行する)です。 1361 * 1362 * @og.rev 6.9.7.0 (2018/05/14) stopZero,notfoundMsg 属性追加 1363 * 1364 * @param cmd 0件時停止可否 [true:処理を中止する/false:続行する] 1365 */ 1366 public void setStopZero( final String cmd ) { 1367 stopZero = nval( getRequestParameter( cmd ),stopZero ); 1368 } 1369 1370 /** 1371 * 【TAG】検索結果がゼロ件の場合に表示するメッセージリソースIDを指定します(初期値:MSG0077[対象データはありませんでした])。 1372 * 1373 * @og.tag 1374 * ここでは、検索結果がゼロ件の場合のみ、特別なメッセージを表示させます。 1375 * 従来は、displayMsg と兼用で、『0 件検索しました』という表示でしたが、 1376 * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合のみ別に表示させます。 1377 * 表示させたくない場合は, notfoundMsg = "" をセットしてください。 1378 * 初期値は、MSG0077[対象データはありませんでした]です。 1379 * 1380 * @og.rev 6.9.7.0 (2018/05/14) stopZero,notfoundMsg 属性追加 1381 * 1382 * @param id ゼロ件メッセージID 1383 */ 1384 public void setNotfoundMsg( final String id ) { 1385 final String ids = getRequestParameter( id ); 1386 if( ids != null ) { notfoundMsg = ids; } 1387 } 1388 1389 /** 1390 * BODY要素に記述した、chartDataset タグの属性設定クラスをListに追加します。 1391 * 1392 * BODY部に記述された、chartDataset タグの属性は、チャートのデータ取得Queryや、 1393 * チャートの種類などの情報を管理しています。 1394 * チャートの種類(Category系)によっては、チャートを合成して表示させることが可能です。 1395 * それらの複数のチャートの指定が、chartDataset タグ で行われます。 1396 * 1397 * ※ 6.9.7.0 (2018/05/14) chDataset が、null や、件数が0件の場合は、List に追加しません。 1398 * 1399 * @og.rev 6.9.7.0 (2018/05/14) stopZero,notfoundMsg 属性追加 1400 * 1401 * @param chDataset chartDatasetタグの属性設定クラス 1402 */ 1403 protected void addChartDataset( final ChartDataset chDataset ) { 1404 if( chartDataset == null ) { chartDataset = new ArrayList<>(); } 1405 1406 if( chDataset != null && chDataset.getRowCount() > 0 ) { // 6.9.7.0 (2018/05/14) 1407 chartDataset.add( chDataset ); 1408 } 1409 } 1410 1411 /** 1412 * このオブジェクトの文字列表現を返します。 1413 * 基本的にデバッグ目的に使用します。 1414 * 1415 * @return このクラスの文字列表現 1416 * @og.rtnNotNull 1417 */ 1418 @Override 1419 public String toString() { 1420 1421 // 6.0.2.5 (2014/10/31) char を append する。 1422 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ) 1423 .append( '[' ).append( this.getClass().getName() ).append( ']' ).append( CR ) 1424 .append( "title [" ).append( title ).append( ']' ).append( CR ) 1425 .append( "width [" ).append( width ).append( ']' ).append( CR ) 1426 .append( "height [" ).append( height ).append( ']' ).append( CR ) 1427 .append( "domainLabel [" ).append( domainLabel ).append( ']' ).append( CR ) 1428 .append( "showLegend [" ).append( showLegend ).append( ']' ).append( CR ) 1429 .append( "rectangleEdge [" ).append( rectangleEdge ).append( ']' ).append( CR ) 1430 .append( "plotOrientation [" ).append( plotOrientation ).append( ']' ).append( CR ) 1431 .append( "chartBackColor [" ).append( chartBackColor ).append( ']' ).append( CR ) 1432 .append( "plotBackColor [" ).append( plotBackColor ).append( ']' ).append( CR ); 1433 1434 return rtn.toString(); 1435 } 1436 1437 /** 1438 * 6.0.2.0 (2014/09/19) キャッシュ時間の外部設定、キャッシュ対象の変更 1439 * 1440 * イメージタグをキャッシュするクラスです。 1441 * キャッシュの保持時間は、コンストラクタで指定します。 1442 * 従来は、JFreeChart と、画像ファイルのキャッシュを行っていましたが 1443 * JFreeChart オブジェクトをキャッシュするメリットがあまりない為、 1444 * イメージタグのキャッシュのみに変更しました。 1445 * キャッシュの有効期間の初期値は、システムリソースの CHART_CACHE_TIME で定義します。 1446 * 1447 * @og.rev 6.0.2.0 (2014/09/19) キャッシュは、イメージタグのみ 1448 * @og.rev 6.3.5.1 (2015/08/16) キャッシュ処理のロジックを整理します。 1449 */ 1450 private static final class ChartCache { 1451 1452 // 6.0.2.0 (2014/09/19) イメージタグのみのキャッシュなので、seriesPikup は関係なくなった。 1453 private final String imgTag ; // キャッシュのキーをタグそのものに変更 1454 private final long createLimitTime ; 1455 1456 /** 1457 * コンストラクター 1458 * JFreeChartで作成sれたイメージタグをキャッシュするキーを指定します。 1459 * 内部的には、このキー(mkey)で、比較や hashCode が計算されています。 1460 * キャッシュの有効期間は、ccTime (秒) で定義します。 1461 * イメージタグの作成時間が、それを超える場合は、キャッシュを初期化します。 1462 * 1463 * @og.rev 6.0.2.0 (2014/09/19) キャッシュ時の制限時間対応 1464 * @og.rev 6.3.5.1 (2015/08/16) コンストラクターで、イメージタグの設定と有効時間の算出を行います。 1465 * 1466 * @param imgTag イメージタグ 1467 * @param ccTime キャッシュの制限時間(秒) 1468 */ 1469 public ChartCache( final String imgTag,final int ccTime ) { 1470 this.imgTag = imgTag; 1471 createLimitTime = System.currentTimeMillis() + ccTime * 1000L; 1472 } 1473 1474 /** 1475 * イメージタグを返します。 1476 * キャッシュされていれば、そのキャッシュを、そうでなければ、null を 1477 * 返します。 1478 * 1479 * @og.rev 6.3.5.1 (2015/08/16) メソッド名を変更します。 1480 * 1481 * @return イメージタグ 1482 */ 1483 public String getImageTag() { 1484 return imgTag ; 1485 } 1486 1487 /** 1488 * キャッシュが、有効かどうかを返します。(有効:true) 1489 * キャッシュは、コンストラクタ引数で指定された時間が経過すると、 1490 * 無効と判断されます。 1491 * 有効であれば、true を返します。 1492 * 1493 * @return 有効かどうか[有効:true/無効:false] 1494 */ 1495 public boolean isAvailable() { 1496 return System.currentTimeMillis() < createLimitTime ; 1497 } 1498 1499 } 1500}