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