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