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     = &quot;true&quot;</b>
083 *     &gt;
084 *         &lt;og:timeTableParam
085 *             minStartTime   = "0800"       : タイムテーブルの開始時刻(含む)をセットします(初期値:0800)
086 *             maxEndTime     = "2100"       : タイムテーブルの終了時刻(含まない)をセットします(初期値:2100)
087 *             timeInterval   = "30"         : タイムテーブルのインターバル時間をセットします(初期値:30)
088 *             nullLinkColumn = "DYUSE"      : NULL時リンクを作成するベースとなるカラム名
089 *             tdClassColumn  = "FGCDACTION" : データを入れるTDタグにclass属性を付与する場合のカラム名
090 *         /&gt;
091 *     &lt;/og:view &gt;
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         * &amp;TMSTART=($1)&amp;TMEND=($2) という文字列の ($*) 部分を解析して割当ます。
173         *
174         * TMSTARTやTMENDは、リンク作成側で自由に指定できます。
175         *
176         * 同様の機能は、BODY部にリンクを指定することも可能です。
177         * この($1)~($4)には、開始時刻、終了時刻、日付、キーがセットされます。
178         *
179         * 6amp;TMSTART=($1)&amp;TMEND=($2)&amp;DYUSE=($3)&amp;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}