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 org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020 021import static org.opengion.fukurou.util.StringUtil.nval ; 022 023import java.util.Map; 024import java.util.HashMap; 025 026/** 027 * viewタグの viewFormType が ImageTimeBar の場合にパラメータを設定します。 028 * 029 * キー、日時、状況コードを持つ稼働状況の表示を行う、ViewForm_ImageTimeBar クラスに対して、 030 * 各種パラメータを設定します。 031 * (パラメータを使用するには、viewタグのuseParam 属性をtrueに設定する必要があります。) 032 * 033 * SELECT文は、キー、日時、状況コードが、必須項目で、カラムの並び順は、完全に固定です。 034 * よって、カラム位置を指定する必要はありませんが、SELECT文を自由に設定することも 035 * 出来ませんので、ご注意ください。 036 * この固定化に伴い、WRITABLE 指定も使用できません。(そもそも書き込み不可です) 037 * それ以降のカラムについては、内部処理としては、使用していません。 038 * ただし、パラメータで、カラー色指定、ラベル表記部、イメージ重ね合わせ、 039 * ポップアップ表記、リンク表記に使えます。 040 * 041 * データの並び順(ORDER BY)も、キー、日時順にしてください。 042 * データは、キー単位に1レコード作成されます。(キーブレイク)その間、日時順に 043 * データを処理します。 044 * 045 * データの表示は、今のレコードの日時から、次のレコードの日時までを一つの状態と 046 * して表します。今のレコードを表示するには、次のレコードが必要になります。 047 * 画面表示は、表示開始日時(minStartTime) から 表示期間(timeSpan)分を表示します。 048 * 通常、開始時刻は、表示開始時刻より前より始まり、次のレコードで、終了時刻が決定 049 * されます。最後のデータは、期間満了まで続いていると仮定されます。 050 * データが存在しないのであれば、「存在しないデータ」を作成してください。 051 * 052 * ImageTimeBar では、キーでまとめた値について、各状況コードをカラー化し、積み上げ 053 * 帯グラフ形式でPNG画像化します。 054 * この画像を、読み込む HTML を出力することで、画面上に、積み上げ帯グラフを表示します。 055 * 状況コードに対応する色は、標準では自動作成ですが、外部から色文字列を与えることで 056 * 自由に指定する事も可能です。 057 * 058 * ポップアップ表記(tipsClm)、リンク表記(linkClm)は、この画像に対するエリア指定タグを出力する事で実現します。 059 * 画像ファイルは、全データに対して、1画像だけなので、サイズは大きくなりますが、1レコード 060 * 単位に画像を作成しないため、レスポンスは向上します。 061 * それぞれ、viewMarker , viewLink を利用することが可能です。特に、リンク表記(linkClm) については、 062 * linkタグの hrefTarget 属性を true に設定することで適用できます。 063 * 064 * 画像ファイルは、java.io.File.createTempFile( File ) で作成するため、JavaVM(=Tomcat)が 065 * 正常終了するときに、削除されます。異常終了時には残りますが、temp フォルダを定期的に 066 * 整理すれば、それほど大量のファイルが残ることはないと思われます。 067 * 068 * データは、イベント発生時に作成されると仮定しています。つまり、書き込まれた日時から、 069 * 状況コードに対応する状況が発生し、次の状況違いのレコードまで継続していると考えます。 070 * よって、データを途中で切り出す場合、切り出す範囲の前の状態が必要になります。 071 * 一番最初の状態は、"不明" として扱います。(空欄=白色) 072 * 073 * <img src="doc-files/ViewTimeBarParamTag.png" alt="ViewTimeBarParamTag" > 074 * 075 * @og.formSample 076 * ●形式:<og:timeBarParam startDate="・・・" timeSpan="・・・" ・・・ /> 077 * ●body:なし 078 * 079 * ●Tag定義: 080 * <og:timeBarParam 081 * startDate ○【TAG】タイムテーブルの表示開始日時をセットします(必須)。 082 * timeSpan ○【TAG】タイムテーブルの表示期間を時間で指定します(必須)。 083 * labelClms 【TAG】一覧表のラベル表示部に表示するカラムをCSV形式で指定します(初期値:キーのRenderer値)。 084 * colorClm 【TAG】レコードに付ける色を色文字列で指定する場合のカラム名を指定します(初期値:指定しない)。 085 * tipsClm 【TAG】レコード単位に、マウスオーバー時のTips表示を行うカラムを指定します(初期値:指定しない)。 086 * linkClm 【TAG】レコード単位に、クリッカブルリンクを設定するカラムを指定します(初期値:指定しない)。 087 * useLegend 【TAG】カラーの凡例を使用するかどうか[true/false]を指定します(初期値:{@og.value #USE_LEGEND})。 088 * maxLabelWidth 【TAG】ラベル表記部の最大サイズをpxで指定します(初期値:{@og.value #MAX_LABEL_WIDTH})。 089 * maxTimeWidth 【TAG】タイム表記部の最大サイズをpxで指定をpxで指定します(初期値:{@og.value #MAX_TIME_WIDTH})。 090 * chartHeight 【TAG】1行のタイムチャートの幅をpxで指定します(初期値:{@og.value #CHART_HEIGHT})。 091 * headerHeight 【TAG】チャートの凡例、ヘッダー部の高さ(指定されない場合は、チャートの間隔:chartHeight)(初期値:{@og.value #CHART_HEIGHT})。 092 * padding 【TAG】イメージ作成の 全体テーブルの隙間(パディング)をpxで指定します(初期値:{@og.value #CHART_PADDING})。 093 * margin 【TAG】1レコードの文字やタイムチャートのマージンをpxで指定します(初期値:{@og.value #RECODE_MARGIN})。 094 * useLastData 【TAG】行の最後の情報が、継続しているとして使うかどうか[true/false]を指定(初期値:{@og.value #USE_LAST_DATA})。 095 * headerUpFmt 【TAG】一覧表のヘッダー部分上段の日付フォーマット(初期値:未指定) 7.1.0.0 (2020/01/20) 096 * headerDwFmt 【TAG】一覧表のヘッダー部分下段の日付フォーマット(初期値:未指定) 7.1.0.0 (2020/01/20) 097 * debug 【TAG】内部情報を出力します(初期値:false)。 098 * /> 099 * 100 * ●使用例 101 * ViewFormTag の viewFormType が、ImageTimeBar の場合に使用します。 102 * useParam 属性を設定しておかないと、使用されません。 103 * <og:view 104 * viewFormType = "ImageTimeBar" 105 * command = "{@command}" 106 * <b>useParam = "true"</b> 107 * > 108 * <og:timeBarParam 109 * startDate = "{@DYFROM}" 110 * timeSpan = "24" 111 * /> 112 * </og:view > 113 * 114 * @og.group 画面表示 115 * @og.rev 5.5.5.6 (2012/08/31) 新規追加 116 * 117 * @version 4.0 118 * @author Kazuhiko Hasegawa 119 * @since JDK5.0, 120 */ 121public class ViewTimeBarParamTag extends ViewParamImpl { 122 /** このプログラムのVERSION文字列を設定します。 {@value} */ 123 private static final String VERSION = "7.1.0.0 (2020/01/20)" ; 124 private static final long serialVersionUID = 710020200120L ; 125 126 private static final String START_DATE = null; // タイムテーブルの表示開始日時をセットします(初期値:データの最小日時)。 127 private static final String TIME_SPAN = "24"; // タイムテーブルの表示期間を時間で指定します(初期値:{@og.value #TIME_SPAN})。 128 129 private static final String LABEL_CLMS = null; // 一覧表のラベル表示部に表示するカラムをCSV形式で指定します。 130 private static final String COLOR_CLM = null; // レコードに付ける色を色文字列で指定する場合のカラム名を指定します。 131 private static final String TIPS_CLM = null; // レコード単位に、マウスオーバー時のTips表示を行うカラム名を指定します。 132 private static final String LINK_CLM = null; // レコード単位に、クリッカブルリンクを設定するカラム名を指定します。 133 134 private static final String USE_LEGEND = "true"; // カラーの凡例を使用するかどうか[true/false]を指定します。 135 private static final String MAX_LABEL_WIDTH = null; // ラベル表記部の最大サイズをpxで指定。何もなければ、可変長サイズ 136 private static final String MAX_TIME_WIDTH = "600"; // タイム表記部の最大サイズをpxで指定。 137 private static final String CHART_HEIGHT = "20"; // 1レコードのチャートの間隔をpxで指定。実際の幅は、CHART_HEIGHT+MARGIN*2 138 private static final String CHART_PADDING = "5"; // イメージ作成の 全体テーブルの隙間 139 private static final String RECODE_MARGIN = "3"; // 各レコード、文字等の内部の間隔 140 private static final String USE_LAST_DATA = "true"; // 5.6.1.1 (2013/02/08) 行の最後の情報が、継続しているとして使うかどうか[true/false]を指定します。 141 142 /** パラメータの初期値設定 */ 143 /** staticイニシャライザ後、読み取り専用にするので、ConcurrentHashMap を使用しません。 */ 144 private static final Map<String,String> INIT_PARAM = new HashMap<>(); 145 static { 146 INIT_PARAM.put( "START_DATE" , START_DATE ); 147 INIT_PARAM.put( "TIME_SPAN" , TIME_SPAN ); 148 INIT_PARAM.put( "LABEL_CLMS" , LABEL_CLMS ); 149 INIT_PARAM.put( "COLOR_CLM" , COLOR_CLM ); 150 INIT_PARAM.put( "TIPS_CLM" , TIPS_CLM ); 151 INIT_PARAM.put( "LINK_CLM" , LINK_CLM ); 152 INIT_PARAM.put( "USE_LEGEND" , USE_LEGEND ); 153 INIT_PARAM.put( "MAX_LABEL_WIDTH" , MAX_LABEL_WIDTH ); 154 INIT_PARAM.put( "MAX_TIME_WIDTH" , MAX_TIME_WIDTH ); 155 INIT_PARAM.put( "CHART_HEIGHT" , CHART_HEIGHT ); 156 INIT_PARAM.put( "CHART_PADDING" , CHART_PADDING ); 157 INIT_PARAM.put( "RECODE_MARGIN" , RECODE_MARGIN ); 158 INIT_PARAM.put( "USE_LAST_DATA" , USE_LAST_DATA ); // 5.6.1.1 (2013/02/08) 159 // INIT_PARAM.put( "TEMP_DIR" , null ); // 6.4.3.2 (2016/02/19) 使用するキーだが、null を設定しておく必要は無い。 160 // INIT_PARAM.put( "TEMP_URL" , null ); // 6.4.3.2 (2016/02/19) 使用するキーだが、null を設定しておく必要は無い。 161 // INIT_PARAM.put( "HEAD_UP_FMT" , null ); // 7.1.0.0 (2020/01/20) 使用するキーだが、null を設定しておく必要は無い。 162 // INIT_PARAM.put( "HEAD_DW_FMT" , null ); // 7.1.0.0 (2020/01/20) 使用するキーだが、null を設定しておく必要は無い。 163 } 164 165 /** 166 * デフォルトコンストラクター 167 * 168 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 169 */ 170 public ViewTimeBarParamTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 171 172 /** 173 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 174 * 175 * @return 後続処理の指示 176 */ 177 @Override 178 public int doStartTag() { 179 initParam( INIT_PARAM ); 180 181 final String FILE_DIR = HybsSystem.sys( "CHART_TEMP_DIR" ); // 画像ファイルの作成DIR 182 183 putParam( "TEMP_DIR" , HybsSystem.url2dir( FILE_DIR ) ); 184 putParam( "TEMP_URL" , getContextPath() + "/" + FILE_DIR ); 185 186 return SKIP_BODY ; // Body を評価しない 187 } 188 189 /** 190 * 【TAG】タイムテーブルの表示開始日時をセットします(初期値:データの最小日時)。 191 * 192 * @og.tag 193 * 表示開始日時を起点として、タイムテーブルを表示します。 194 * 実際に画面に表示されるのは、開始時刻から終了時刻の範囲内だけですが、 195 * 起点は、この日時になります。 196 * 197 * 指定方法として、フォーマットされた日付、時刻情報も設定可能です。(内部的に処理します) 198 * また、処理後(例:20120824102823)14ケタ以上の場合は、14ケタにカットします。 199 * 8ケタ以上の場合は、時刻 000000 を追加します。 200 * それ以下の場合は、設定エラーとして、HybsSystemException を throw します。 201 * 202 * 表示開始日時が指定されない場合は、データの最小時刻を利用して表示します。 203 * 初期値は、データの最小日時 です。 204 * 205 * @og.rev 6.9.7.0 (2018/05/14) 14桁 丁度のときに、エラーになるので、修正します。 206 * 207 * @param startDate 表示開始日時 208 */ 209 public void setStartDate( final String startDate ) { 210 final String date = nval( getRequestParameter( startDate ),null ); 211 if( date != null ) { 212 final StringBuilder buf = new StringBuilder(); // 最大、14桁のはず 213 for( int i=0; i<date.length(); i++ ) { 214 final char ch = date.charAt( i ); 215 if( ch >= '0' && ch <= '9' ) { buf.append( ch ); } // 記号(-,/,:,スペースなど)を取り除きます。 216 } 217 218 if( buf.length() >= 8 ) { 219 buf.append( "000000" ).setLength( 14 ); // 8 桁以上あれば、"000000" を追加して、14 桁に長さを設定します。 220 putParam( "START_DATE" , buf.toString() ); 221 } 222 else { 223 final String errMsg = "日付データの設定エラーです。date=[" + startDate + "]" ; 224 throw new HybsSystemException( errMsg ); 225 } 226 } 227 // 引数が null の場合は、START_DATE キーは、INIT_PARAM 登録済みなので、何もしなくて良い。 228 229// // 6.9.7.0 (2018/05/14) 14桁 丁度のときに、エラーになるので、修正します。 230// String date = nval( getRequestParameter( startDate ),START_DATE ); 231// if( date != null ) { 232// if( date.indexOf( '-' ) >= 0 ) { date = date.replaceAll( "-","" ); } 233// if( date.indexOf( '/' ) >= 0 ) { date = date.replaceAll( "/","" ); } 234// if( date.indexOf( ':' ) >= 0 ) { date = date.replaceAll( ":","" ); } 235// if( date.indexOf( ' ' ) >= 0 ) { date = date.replaceAll( " ","" ); } 236// 237// final int len = date.length(); 238// if( len > 14 ) { date = date.substring( 0,14 ); } // ミリ秒まで指定されていると想定 239// else if( len >= 8 && len < 14 ) { date = ( date + "000000" ).substring( 0,14 ) ; } // 西暦からの日付は入っていると考えます。 240// else { 241// final String errMsg = "日付データの設定エラーです。date=[" + date + "]" ; 242// throw new HybsSystemException( errMsg ); 243// } 244// } 245// putParam( "START_DATE" , date ); 246 } 247 248 /** 249 * 【TAG】タイムテーブルの表示期間を時間で指定します(初期値:{@og.value #TIME_SPAN})。 250 * 251 * @og.tag 252 * 表示開始日時から、どれだけの時間範囲を表示対象とするかを指定します。 253 * 指定する単位は、時間です。 254 * 小数点は指定できません。また、10日なら、"240" 、1か月(30日)なら、"720" 255 * 1年(365日)なら、"8760" を指定します。 256 * 実際に画面に表示されるのは、開始時刻から終了時刻の範囲内だけです。 257 * 初期値は、"{@og.value #TIME_SPAN}" です。 258 * 259 * @param timeSpan 表示期間(時) 260 */ 261 public void setTimeSpan( final String timeSpan ) { 262 putParam( "TIME_SPAN" , nval( getRequestParameter( timeSpan ),TIME_SPAN ) ); 263 } 264 265 /** 266 * 【TAG】一覧表のラベル表示部に表示するカラムをCSV形式で指定します(初期値:キーのRenderer値)。 267 * 268 * @og.tag 269 * ラベル表示部に表示するカラムをCSV形式で指定します。 270 * 指定されたカラムの値の、Renderer値を画面上に表示します。 271 * ラベル表記部の最大サイズ(maxLblWidth)を指定しない場合は、ここで指定されたカラムの 272 * 値のそれぞれの最大長を加算した値が、ラベル表記部の最大サイズ(maxLblWidth)になります。 273 * 初期値は、キーのRenderer値 です。 274 * 275 * @param labelClms ラベルカラム (CSV形式) 276 */ 277 public void setLabelClms( final String labelClms ) { 278 putParam( "LABEL_CLMS" , nval( getRequestParameter( labelClms ),LABEL_CLMS ) ); 279 } 280 281 /** 282 * 【TAG】レコードに付ける色を色文字列で指定する場合のカラム名を指定します(初期値:指定しない)。 283 * 284 * @og.tag 285 * レコード単位に、色を付ける場合、指定の色を付けたい場合に、外部から色文字列を与えることが可能です。 286 * 色文字列は、java.awt.Color の フィールド定義されているコードと同じ文字列です。 287 * また、#XXXXXX 形式の 16進文字列を与えることで、任意の色を指定可能です。 288 * ※ 6.7.5.0 (2017/03/10) で、値の取得を、getValue から、getValueLabel に変更したため、 289 * リソース変換が使用できます。columnEditor等で、renderer="DBMENU" が使用可能です。 290 * 291 * @og.rev 6.7.5.0 (2017/03/10) COLOR_CLM の値を、getValueLabel で取得するように変更。 292 * 293 * 初期値は、"指定しない" です。 294 * 295 * @param colorClm 色指定カラム名 296 */ 297 public void setColorClm( final String colorClm ) { 298 putParam( "COLOR_CLM" , nval( getRequestParameter( colorClm ),COLOR_CLM ) ); 299 } 300 301 /** 302 * 【TAG】レコード単位に、マウスオーバー時のTips表示を行うカラムを指定します(初期値:指定しない)。 303 * 304 * @og.tag 305 * レコード単位に、画像にマウスオーバー時のツールチップ表示のためのデータを作成します。 306 * HTMLのareaタグの alt 属性を出力します。 307 * 308 * 通常は、複数の文字列を使用しますので、viewMarker タグ等で整形してください。 309 * 何も指定しない場合は、リンクがなければ、なにも出力しません。 310 * 初期値は、"指定しない" です。 311 * 312 * @param tipsClm Tips表示カラム名 313 */ 314 public void setTipsClm( final String tipsClm ) { 315 putParam( "TIPS_CLM" , nval( getRequestParameter( tipsClm ),TIPS_CLM ) ); 316 } 317 318 /** 319 * 【TAG】レコード単位に、クリッカブルリンクを設定するカラムを指定します(初期値:指定しない)。 320 * 321 * @og.tag 322 * レコード単位に、画像にクリッカブルリンクを設定するためのデータを作成します。 323 * HTMLのareaタグ の href 属性を出力します。 324 * 325 * 通常は、viewLink タグ等でリンクを作成してください。 326 * 何も指定しない場合は、Tipsがなければ、なにも出力しません。 327 * 初期値は、"指定しない" です。 328 * 329 * @param linkClm リンク設定カラム名 330 */ 331 public void setLinkClm( final String linkClm ) { 332 putParam( "LINK_CLM" , nval( getRequestParameter( linkClm ),LINK_CLM ) ); 333 } 334 335 /** 336 * 【TAG】カラーの凡例を使用可否[true:する/false:しない]を指定します(初期値:{@og.value #USE_LEGEND})。 337 * 338 * @og.tag 339 * 状況コード、または、色文字列等でグラフ作成した場合の色に対する凡例を使用するかどうかを指定します。 340 * 凡例の表示位置は、グラフの上側で、1レコード分出力します。 341 * 342 * 初期値は、"{@og.value #USE_LEGEND}" です。 343 * 344 * @param useLegend 凡例使用可否 [true:する/false:しない] 345 */ 346 public void setUseLegend( final String useLegend ) { 347 putParam( "USE_LEGEND" , nval( getRequestParameter( useLegend ),USE_LEGEND ) ); 348 } 349 350 /** 351 * 【TAG】ラベル表記部の最大サイズをpxで指定します(初期値:{@og.value #MAX_LABEL_WIDTH})。 352 * 353 * @og.tag 354 * 画像の1行は、ラベル表記部と、タイムチャート部に分かれます。 355 * その、ラベル表記部の最大サイズを指定します。 356 * 何も指定しなければ、可変長サイズ(ラベルの大きさに合わせた値)になります。 357 * 単位は px です。(pxは記述不要です) 358 * 初期値は、"{@og.value #MAX_LABEL_WIDTH}" です。 359 * 360 * @param maxLblWidth ラベル最大幅 (px) 361 */ 362 public void setMaxLabelWidth( final String maxLblWidth ) { 363 putPxParam( "MAX_LABEL_WIDTH" , maxLblWidth , MAX_LABEL_WIDTH ); 364 } 365 366 /** 367 * 【TAG】タイム表記部の最大サイズをpxで指定をpxで指定します(初期値:{@og.value #MAX_TIME_WIDTH})。 368 * 369 * @og.tag 370 * 画像の1行は、ラベル表記部と、タイムチャート部に分かれます。 371 * そのタイムチャート部の最大サイズを指定します。 372 * この幅は、ここで指定した幅に固定されるため、時間範囲が多ければ、1時間当たりの表示幅が 373 * 小さくなります。 374 * たとえば、8H~20H=12H を 600px で表示すれば、1時間=50px になりますし、24H 表示ならば、 375 * 半分の 25px 、6H ならば、倍の 100px が、1時間の表示幅になります。 376 * 377 * 単位は px です。(pxは記述不要です) 378 * 初期値は、"{@og.value #MAX_TIME_WIDTH}" です。 379 * 380 * @param maxTmWidth タイム最大幅(px) 381 */ 382 public void setMaxTimeWidth( final String maxTmWidth ) { 383 putPxParam( "MAX_TIME_WIDTH" , maxTmWidth , MAX_TIME_WIDTH ); 384 } 385 386 /** 387 * 【TAG】1行のタイムチャートの幅をpxで指定します(初期値:{@og.value #CHART_HEIGHT})。 388 * 389 * @og.tag 390 * 画像の1行の間隔は、上下のRECODE_MARGIN と、このチャート本体の幅になります(CHART_HEIGHT+RECODE_MARGIN*2)。 391 * ここでは、チャート本体の幅を指定します。 392 * 393 * 単位は px です。(pxは記述不要です) 394 * 初期値は、"{@og.value #CHART_HEIGHT}" です。 395 * 396 * @param chartHeight タイムチャートの幅 397 */ 398 public void setChartHeight( final String chartHeight ) { 399 putPxParam( "CHART_HEIGHT" , chartHeight , CHART_HEIGHT ); 400 } 401 402 /** 403 * 【TAG】チャートの凡例、ヘッダー部の高さをpxで指定します(初期値:{@og.value #CHART_HEIGHT})。 404 * 405 * @og.tag 406 * 画像の1行の間隔は、上下のRECODE_MARGIN と、このチャート本体の幅になります(CHART_HEIGHT+RECODE_MARGIN*2)。 407 * ここでは、チャートの凡例、ヘッダー部の高さを指定します。 408 * 指定しない場合の初期値は、chartHeight の値を使用します。 409 * 410 * 単位は px です。(pxは記述不要です) 411 * 初期値は、"{@og.value #CHART_HEIGHT}" です。 412 * 413 * @og.rev 6.4.7.0 (2016/06/03) 新規追加 414 * 415 * @param headerHeight タイムチャートの幅 416 */ 417 public void setHeaderHeight( final String headerHeight ) { 418 putPxParam( "HEADER_HEIGHT" , headerHeight , CHART_HEIGHT ); 419 } 420 421 /** 422 * 【TAG】イメージ作成のパディング (全体テーブルの隙間)をpxで指定します(初期値:{@og.value #CHART_PADDING})。 423 * 424 * @og.tag 425 * イメージは、データの全行を含んだ1枚の画像ファイルになります。 426 * 画像ファイル自体の大きさと、書き込まれた画像の大きさは異なります。 427 * この、padding は、画像の周りに、余白として指定するサイズをpx単位で指定します。 428 * ここでは、上下左右に、均等にとります。 429 * 430 * 単位は px です。(pxは記述不要です) 431 * 初期値は、"{@og.value #CHART_PADDING}" です。 432 * 433 * @param padding パディング (全体テーブルの隙間) 434 */ 435 public void setPadding( final String padding ) { 436 putPxParam( "CHART_PADDING" , padding , CHART_PADDING ); 437 } 438 439 /** 440 * 【TAG】1レコードの文字やタイムチャートのマージンをpxで指定します(初期値:{@og.value #RECODE_MARGIN})。 441 * 442 * @og.tag 443 * イメージは、1レコードづつ書き込まれますが、そのレコードの幅は、chartHeight で指定された 444 * タイムチャートの幅+マージン*2 になります。 445 * 同様に、ラベル表記部の文字の書き出し位置も、この、マージンが適用されます。 446 * (文字の場合は、上下左右に適用され、チャート部は、上下のみ適用されます。) 447 * 448 * 単位は px です。(pxは記述不要です) 449 * 初期値は、"{@og.value #RECODE_MARGIN}" です。 450 * 451 * @param margin マージン(px) 452 */ 453 public void setMargin( final String margin ) { 454 putPxParam( "RECODE_MARGIN" , margin , RECODE_MARGIN ); 455 } 456 457 /** 458 * 【TAG】行の最後の情報が、継続しているとして使うかどうか[true/false]を指定します(初期値:{@og.value #USE_LAST_DATA})。 459 * 460 * @og.tag 461 * データは、開始時刻を与えられ、次のデータの開始時刻が前のデータの終了時刻として 462 * 処理しています。行の最後のデータは、表示範囲いっぱいまで、続いていると認識する場合は、 463 * この値を true とします。つまり、最後のデータは利用されます。 464 * 最後のデータがそこで処理を停止したイベントの場合、そのデータは使われません。 465 * その場合は、false に設定します。イベント色としては、"不明"(空欄=白色) として扱います。 466 * 467 * 初期値は、"{@og.value #USE_LAST_DATA}" です。 468 * 469 * @og.rev 5.6.1.1 (2013/02/08) 新規追加 470 * @og.rev 7.1.0.0 (2020/01/20) putPxParamは間違い 471 * 472 * @param useLastData 継続使用可否 [true:する/false:しない] 473 */ 474 public void setUseLastData( final String useLastData ) { 475// putPxParam( "USE_LAST_DATA" , useLastData , USE_LAST_DATA ); 476 putParam( "USE_LAST_DATA" , nval( getRequestParameter( useLastData ),USE_LAST_DATA ) ); 477 } 478 479 /** 480 * 【TAG】一覧表のヘッダー部分上段の日付フォーマットを指定します(初期値:未指定)。 481 * 482 * @og.tag 483 * ヘッダー部分の日付は、上段下段に分かれています。 484 * ここでは、上段部分に表示される日付フォーマットを指定します。 485 * 未指定の場合は、STEPが日単位より大きい場合は、"M月" 小さい場合は "M/d(EE)" になります。 486 * 487 * @og.rev 7.1.0.0 (2020/01/20) ヘッダー部分の日付フォーマット指定の追加 488 * 489 * @param fmt 上段日付フォーマット 490 */ 491 public void setHeaderUpFmt( final String fmt ) { 492 putParam( "HEADER_UP_FMT" , nval( getRequestParameter( fmt ),null ) ); 493 } 494 495 /** 496 * 【TAG】一覧表のヘッダー部分下段の日付フォーマットを指定します(初期値:未指定)。 497 * 498 * @og.tag 499 * ヘッダー部分の日付は、上段下段に分かれています。 500 * ここでは、下段部分に表示される日付フォーマットを指定します。 501 * 未指定の場合は、STEPが日単位より大きい場合は、"dEE" 小さい場合は "H:mm" になります。 502 * 503 * @og.rev 7.1.0.0 (2020/01/20) ヘッダー部分の日付フォーマット指定の追加 504 * 505 * @param fmt 下段日付フォーマット 506 */ 507 public void setHeaderDwFmt( final String fmt ) { 508 putParam( "HEADER_DW_FMT" , nval( getRequestParameter( fmt ),null ) ); 509 } 510 511 /** 512 * 引数の "px" 文字列を取り除く共通メソッド。 513 * 514 * 指定のパラメータに、"px" 文字列を含む場合、"px"文字列以降を削除します。 515 * HTML上には、px を付けた方が分かりやすいケースが考えられるためです。 516 * ここでは、putParam( String , String ) するために必要な、キー、初期値も指定する事で、 517 * 呼び出し元の処理を簡素化します。 518 * この処理では、val 引数を、getRequestParameter 処理し、結果を、nval で 初期値設定したあと、 519 * null 判定で、null でなければ、putParam にセットする処理をおこないます。 520 * この処理の中で、"px" 削除処理をおこないます。 521 * 522 * @param key putParamする場合のキー 523 * @param val "px"文字列があれば取り除く値 524 * @param def 引数がnullの場合の、初期値 525 * @see #putParam( String , String ) 526 */ 527 private void putPxParam( final String key , final String val , final String def ) { 528 String tmp = nval( getRequestParameter( val ),def ); 529 if( tmp != null ) { 530 final int idx = tmp.indexOf( "px" ); 531 if( idx > 0 ) { tmp = tmp.substring( 0,idx ); } 532 533 putParam( key , tmp ); 534 } 535 } 536 537 /** 538 * タグの名称を、返します。 539 * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。 540 * 541 * @return タグの名称 542 * @og.rtnNotNull 543 */ 544 @Override 545 protected String getTagName() { 546 return "timeBarParam" ; 547 } 548}