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.html.ViewTimeTableParam; 019 020import static org.opengion.fukurou.util.StringUtil.nval ; 021 022import java.io.ObjectOutputStream; 023import java.io.ObjectInputStream; 024import java.io.IOException; 025 026/** 027 * viewタグの viewFormType が HTMLTimeTable の場合にパラメータを設定します。 028 * 029 * 時間軸を持つタイムテーブルの表示を行う、ViewForm_HTMLTimeTable クラスに対して、 030 * 各種パラメータを設定します。 031 * パラメータが設定されていない場合は、ViewForm_HTMLTimeTable の初期値が使用されます。 032 * (パラメータを使用するには、viewタグのuseParam 属性をtrueに設定する必要があります。) 033 * 034 * SELECT文は、日付、キー、備考、開始時刻、終了時刻、リンクが、必須項目で、この並び順は、 035 * 完全に固定です。よって、カラム位置を指定する必要はありませんが、SELECT文を自由に 036 * 設定することも出来ませんので、ご注意ください。 037 * この固定化に伴い、WRITABLE 指定も使用できません。 038 * なお、日付、キー、備考 に関しては、columnDisplay 属性で、表示の ON/OFF 制御は可能です。 039 * また、日付ブレイク、キーブレイクの設定で、カラム自体をテーブルの外に出すことが可能です。 040 * (キーと備考はセットになっています。) 041 * 042 * タイムテーブルが空きの場合のリンクは、ViewTimeTableParam.NULL_LINK_CLM_ID で指定します。 043 * (ViewTimeTableParam の nullLinkColumn 属性) 044 * 指定しない場合は、空きのリンクは作成されません。 045 * このリンクは、特殊で、引数に、パラメータを追加できますが、"($1)"、"($2)" で指定します。 046 * この($1)、($2)は、開始時刻、終了時刻がセットされますが、SELECT文の固定カラムと同じ 047 * 並び順ですが、DBTableModelの値を設定しているわけではありません。 048 * 空きの場合は、データ自体が存在しない場合と、日付、キー のみが 外部結合で生成された 049 * レコードが実際に存在する場合がありますが、外部結合で生成されたレコードには、 050 * 開始時刻、終了時刻はありません。($1) と($2)には、それぞれ、最小開始時刻と最大終了時刻を 051 * セットします。 052 * 053 * 例として、&TMSTART=($1)&TMEND=($2) という文字列の ($*) 部分を解析して割当ます。 054 * 055 * 各属性は、{@XXXX} 変数が使用できます。 056 * これは、ServletRequest から、XXXX をキーに値を取り出し,この変数に割り当てます。 057 * つまり、このXXXXをキーにリクエストすれば、この変数に値をセットすることができます。 058 * 059 * http://localhost/query.jsp?KEY1=VLA1&KEY2=VAL2 060 * 061 * のようなリクエストで、{@KEY1} とすれば、 VAL1 がセットされます。 062 * 063 * @og.formSample 064 * ●形式:<og:timeTableParam minStartTime="・・・" ・・・ /> 065 * ●body:なし 066 * 067 * ●Tag定義: 068 * <og:timeTableParam 069 * minStartTime 【TAG】タイムテーブルの開始時刻(含む)をセットします(初期値:0800) 070 * maxEndTime 【TAG】タイムテーブルの終了時刻(含まない)をセットします(初期値:2100) 071 * timeInterval 【TAG】タイムテーブルのインターバル時間をセットします(初期値:30) 072 * nullLinkColumn 【TAG】タイムテーブルが空きの場合のリンクを指定しているカラム名をセットします 073 * useDyBreak 【TAG】日付でブレーク処理を行うかどうかを指定します(初期値:true) 074 * tdClassColumn 【TAG】タイムテーブルにデータを入れるTDタグにclass属性を付与する場合のカラム名をセットします 075 * useBookingMerge 【TAG】同一日付でブッキング時にマージ処理を行うかどうかを指定します(初期値:false) 076 * /> 077 * 078 * ●使用例 079 * ViewFormTag の viewFormType が、HTMLTimeTable の場合に使用します。 080 * useParam 属性を設定しておかないと、使用されません。 081 * <og:view 082 * viewFormType = "HTMLTimeTable" 083 * command = "{@command}" 084 * startNo = "0" 085 * pageSize = "20" 086 * <b>useParam = "true"</b> 087 * > 088 * <og:timeTableParam 089 * minStartTime = "0800" : タイムテーブルの開始時刻(含む)をセットします(初期値:0800) 090 * maxEndTime = "2100" : タイムテーブルの終了時刻(含まない)をセットします(初期値:2100) 091 * timeInterval = "30" : タイムテーブルのインターバル時間をセットします(初期値:30) 092 * nullLinkColumn = "DYUSE" : NULL時リンクを作成するベースとなるカラム名 093 * tdClassColumn = "FGCDACTION" : データを入れるTDタグにclass属性を付与する場合のカラム名 094 * /> 095 * </og:view > 096 * 097 * @og.group 画面表示 098 * @og.rev 5.4.0.0 (2011/10/01) 新規追加 099 * 100 * @version 4.0 101 * @author Kazuhiko Hasegawa 102 * @since JDK5.0, 103 */ 104public class ViewTimeTableParamTag extends ViewParamTag { 105 //* このプログラムのVERSION文字列を設定します。 {@value} */ 106 private static final String VERSION = "5.4.4.2 (2012/02/03)" ; 107 108 private static final long serialVersionUID = 544220120203L ; 109 110 /** 111 * 【TAG】タイムテーブルの開始時刻(含む)をセットします(初期値:0800)。 112 * 113 * @og.tag 114 * 時間軸の書き始めの時刻(自分自身を含む時分4桁)を指定します。 115 * この時刻は、8:00 なら、"0800" となり、14:30 なら、"1430" となります。 116 * 初期値は、"0800" です。 117 * 118 * @param minStTime タイムテーブルの開始時刻(含む) 119 */ 120 public void setMinStartTime( final String minStTime ) { 121 putParam( ViewTimeTableParam.MIN_START_TIME, 122 nval( getRequestParameter( minStTime ),"0800" ) ); 123 } 124 125 /** 126 * 【TAG】タイムテーブルの終了時刻(含まない)をセットします(初期値:2100)。 127 * 128 * @og.tag 129 * 時間軸の最後の時刻(自分自身を含まない時分4桁)を指定します。 130 * この時刻は、9:00 なら、"0900" となり、14:30 なら、"1430" となります。 131 * 初期値は、"2100" です。 132 * 133 * @param maxEdTime タイムテーブルの終了時刻(含まない) 134 */ 135 public void setMaxEndTime( final String maxEdTime ) { 136 putParam( ViewTimeTableParam.MAX_END_TIME, 137 nval( getRequestParameter( maxEdTime ),"2100" ) ); 138 } 139 140 /** 141 * 【TAG】タイムテーブルのインターバル時間をセットします(初期値:30)。 142 * 143 * @og.tag 144 * タイムテーブルのインターバル時間とは、時刻の最終単位の事です。 145 * この時刻は、"30" なら、30分となります。 146 * 初期値は、"30" です。 147 * 148 * @og.rev 5.4.3.7 (2012/01/20) 指定方法の変更。分を数字で指定します。 149 * 150 * @param intval タイムテーブルのインターバル時間 151 */ 152 public void setTimeInterval( final String intval ) { 153 putParam( ViewTimeTableParam.TIME_INTERVAL, 154 nval( getRequestParameter( intval ),"30" ) ); 155 } 156 157 /** 158 * 【TAG】タイムテーブルが空きの場合のリンクを指定しているカラム名をセットします。 159 * 160 * @og.tag 161 * これは、タイムテーブルが空きの場合のリンクを作成するにあたり、ベースとなるリンクが 162 * 適用されているカラムを指定します。 163 * このリンクは、特殊で、引数に、パラメータを追加できますが、($1) 等の記号で指定します。 164 * この($1)、($2)には、開始時刻、終了時刻がセットされますが、SELECT文の 165 * 固定カラムと同じ並び順ですが、DBTableModelの値を設定しているわけではありません。 166 * 空きの場合は、データ自体が存在しない場合がありますが、その場合は、開始時刻、終了時刻は 167 * ありません。 168 * その場合は、それぞれ、最小開始時刻と最大終了時刻がセットされます。 169 * 170 * &TMSTART=($1)&TMEND=($2) という文字列の ($*) 部分を解析して割当ます。 171 * 172 * TMSTARTやTMENDは、リンク作成側で自由に指定できます。 173 * 174 * 同様の機能は、BODY部にリンクを指定することも可能です。 175 * この($1)~($4)には、開始時刻、終了時刻、日付、キーがセットされます。 176 * 177 * 6amp;TMSTART=($1)&TMEND=($2)&DYUSE=($3)&UNITID=($4) という文字列の ($*) 部分を解析して割当ます。 178 * 179 * BODY と nullLinkColumn が両方とも指定された場合は、nullLinkColumn の設定が優先されます。 180 * 181 * @param clm nullのデータに適用するリンクを設定したカラム名 182 */ 183 public void setNullLinkColumn( final String clm ) { 184 putParam( ViewTimeTableParam.NULL_LINK_CLM_ID, 185 nval( getRequestParameter( clm ),null ) ); 186 } 187 188 /** 189 * 【TAG】タイムテーブルにデータを入れるTDタグにclass属性を付与する場合のカラム名をセットします。 190 * 191 * @og.tag 192 * これは、タイムテーブルのリンクや説明を入れるTDに、class属性を付与する場合のカラム名を 193 * 指定します。これにより、TD に色を付けたり、表示の条件を外部から指定できます。 194 * もっとも一般的な想定用途は、タイムテーブルのデータの種別に応じた色分けです。 195 * 196 * @og.rev 5.4.3.7 (2012/01/20) 新規追加 197 * 198 * @param clm nullのデータを入れるTDタグにclass属性を付与する場合のカラム名 199 */ 200 public void setTdClassColumn( final String clm ) { 201 putParam( ViewTimeTableParam.TD_CLASS_COLUMN_ID, 202 nval( getRequestParameter( clm ),null ) ); 203 } 204 205 /** 206 * 【TAG】日付でブレーク処理を行うかどうかを指定します(初期値:true)。 207 * 208 * @og.tag 209 * 日付でブレーク処理を行う場合、日付単位にテーブルが分かれます。 210 * 日付は、テーブルの先頭に、ブレイクした時点で表示されます。 211 * 日付でブレイクするを指定した場合は、自動的に、noDisplay 属性に日付が 212 * セットされます。 213 * 初期値は、true(日付ブレイクする)です。 214 * 215 * @param flag 日付でブレーク処理を行うかどうか(true:日付ブレイクする、false しない) 216 */ 217 public void setUseDyBreak( final String flag ) { 218 putParam( ViewTimeTableParam.USE_DY_BREAK, 219 nval( getRequestParameter( flag ),"true" ) ); 220 } 221 222 /** 223 * 【TAG】同一日付でブッキング時にマージ処理を行うかどうかを指定します(初期値:false)。 224 * 225 * @og.tag 226 * 日付、キー(人や施設)で予定時刻が重複している場合の処理方法を指定します。 227 * 通常(初期値:false)では、ブッキングデータはレコードを分けて表示させます。 228 * 例えば、人の予定であれば、仮予約や会議招集などのケースで、重複を表示しておき 229 * 利用者本人に決めさせるというケースが考えられます。 230 * これを、true に設定すると、予定時刻が重複している場合は、マージして、一つの 231 * 予定として表現します。 232 * 初期値は、false(ブッキング時にマージ処理を行わない)です。 233 * 234 * @og.rev 5.4.4.2 (2012/02/03) 新規追加 235 * 236 * @param flag 同一日付でブッキング時にマージ処理を行うかどうか(true:行うする、false 行わない) 237 */ 238 public void setUseBookingMerge( final String flag ) { 239 putParam( ViewTimeTableParam.USE_BOOKING_MERGE, 240 nval( getRequestParameter( flag ),"true" ) ); 241 } 242 243 /** 244 * タグの名称を、返します。 245 * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。 246 * 247 * @return タグの名称 248 */ 249 @Override 250 protected String getTagName() { 251 return "timeTableParam" ; 252 } 253 254 /** 255 * シリアライズ用のカスタムシリアライズ書き込みメソッド 256 * 257 * @serialData 一部のオブジェクトは、シリアライズされません。 258 * 259 * @param strm ObjectOutputStreamオブジェクト 260 * @throws IOException 入出力エラーが発生した場合 261 */ 262 private void writeObject( final ObjectOutputStream strm ) throws IOException { 263 strm.defaultWriteObject(); 264 } 265 266 /** 267 * シリアライズ用のカスタムシリアライズ読み込みメソッド 268 * 269 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 270 * 271 * @serialData 一部のオブジェクトは、シリアライズされません。 272 * 273 * @param strm ObjectInputStreamオブジェクト 274 * @see #release2() 275 * @throws IOException シリアライズに関する入出力エラーが発生した場合 276 * @throws ClassNotFoundException クラスを見つけることができなかった場合 277 */ 278 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 279 strm.defaultReadObject(); 280 } 281}