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     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.html.ViewTimeTableParam;
019    
020    import static org.opengion.fukurou.util.StringUtil.nval ;
021    
022    import java.io.ObjectOutputStream;
023    import java.io.ObjectInputStream;
024    import 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     * 例としてã€?amp;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     * ●形式ï¼?lt;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     = &quot;true&quot;</b>
087     *     &gt;
088     *         &lt;og:timeTableParam
089     *             minStartTime   = "0800"       : タイãƒ?ƒ†ーブルの開始時刻(含ã‚?をセãƒ?ƒˆしまã�?初期値:0800)
090     *             maxEndTime     = "2100"       : タイãƒ?ƒ†ーブルの終äº?™‚刻(含まなã�?をセãƒ?ƒˆしまã�?初期値:2100)
091     *             timeInterval   = "30"         : タイãƒ?ƒ†ーブルのインターバル時間をセãƒ?ƒˆしまã�?初期値:30)
092     *             nullLinkColumn = "DYUSE"      : NULL時リンクを作æ?するベã?スとなるカラãƒ?��
093     *             tdClassColumn  = "FGCDACTION" : ãƒ??タをå?れるTDタグにclass属æ?を付与するå?合ã?カラãƒ?��
094     *         /&gt;
095     *     &lt;/og:view &gt;
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     */
104    public 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             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
112             *
113             * @return      後続å?ç�??æŒ?¤º
114             */
115    //      @Override
116    //      public int doStartTag() {
117    //              return ( EVAL_BODY_BUFFERED );          // Body を評価する
118    //      }
119    
120            /**
121             * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
122             *
123             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
124             */
125    //      @Override
126    //      public int doAfterBody() {
127    //
128    //              putParam( ViewTimeTableParam.BODY_LINK_VALUE,
129    //                                nval( getBodyString(),null ) );
130    //
131    //              return ( SKIP_BODY );
132    //      }
133    
134            /**
135             * 【TAG】タイãƒ?ƒ†ーブルの開始時刻(含ã‚?をセãƒ?ƒˆしまã�?初期値:0800)ã€?
136             *
137             * @og.tag
138             * 時間軸の書き始めの時刻(自åˆ??身を含ã‚?™‚åˆ?¼”æ¡?を指定しますã?
139             * こã?時刻はã€?¼??�ï¼?ならã?"0800" となりã??‘ï¼??“ï¼?ならã?"1430" となりますã?
140             * 初期値はã€?0800" ですã?
141             *
142             * @param       minStTime タイãƒ?ƒ†ーブルの開始時刻(含ã‚?
143             */
144            public void setMinStartTime( final String minStTime ) {
145                    putParam( ViewTimeTableParam.MIN_START_TIME,
146                                      nval( getRequestParameter( minStTime ),"0800" ) );
147            }
148    
149            /**
150             * 【TAG】タイãƒ?ƒ†ーブルの終äº?™‚刻(含まなã�?をセãƒ?ƒˆしまã�?初期値:2100)ã€?
151             *
152             * @og.tag
153             * 時間軸のæœ?¾Œã?時刻(自åˆ??身を含まなã�?™‚åˆ?¼”æ¡?を指定しますã?
154             * こã?時刻はã€?¼??�ï¼?ならã?"0900" となりã??‘ï¼??“ï¼?ならã?"1430" となりますã?
155             * 初期値はã€?2100" ですã?
156             *
157             * @param       maxEdTime タイãƒ?ƒ†ーブルの終äº?™‚刻(含まなã�?
158             */
159            public void setMaxEndTime( final String maxEdTime ) {
160                    putParam( ViewTimeTableParam.MAX_END_TIME,
161                                      nval( getRequestParameter( maxEdTime ),"2100" ) );
162            }
163    
164            /**
165             * 【TAG】タイãƒ?ƒ†ーブルのインターバル時間をセãƒ?ƒˆしまã�?初期値:30)ã€?
166             *
167             * @og.tag
168             * タイãƒ?ƒ†ーブルのインターバル時間とは、時刻のæœ?µ‚単位ã?事ですã?
169             * こã?時刻はã€?30" ならã??“0å?となりますã?
170             * 初期値はã€?30" ですã?
171             *
172             * @og.rev 5.4.3.7 (2012/01/20) æŒ?®š方法ã?変更。å?を数字でæŒ?®šしますã?
173             *
174             * @param       intval タイãƒ?ƒ†ーブルのインターバル時間
175             */
176            public void setTimeInterval( final String intval ) {
177                    putParam( ViewTimeTableParam.TIME_INTERVAL,
178                                      nval( getRequestParameter( intval ),"30" ) );
179            }
180    
181            /**
182             * 【TAG】タイãƒ?ƒ†ーブルが空きã?場合ã?リンクを指定してã�?‚‹カラãƒ?��をセãƒ?ƒˆしますã?
183             *
184             * @og.tag
185             * これは、タイãƒ?ƒ†ーブルが空きã?場合ã?リンクを作æ?するにあたりã?ベã?スとなるリンクã�?
186             * 適用されてã�?‚‹カラãƒ?‚’æŒ?®šしますã?
187             * こã?リンクは、特殊で、引数に、パラメータを追åŠ?�§きますがã€?$1) 等ã?記号でæŒ?®šしますã?
188             * こã?($1)ã€?$2)にはã€?–‹始時刻、終äº?™‚刻がセãƒ?ƒˆされますが、SELECTæ–??
189             * 固定カラãƒ?�¨同じ並びé ?�§すが、DBTableModelの値を設定してã�?‚‹わけではありませんã€?
190             * 空きã?場合ã?、データ自体が存在しなã�??合がありますが、その場合ã?ã€?–‹始時刻、終äº?™‚刻は
191             * ありませんã€?
192             * そã?場合ã?、それぞれã?æœ?°�開始時刻とæœ?¤§終äº?™‚刻がセãƒ?ƒˆされますã?
193             *
194             * &amp;TMSTART=($1)&amp;TMEND=($2) とã�?�†æ–?­—å?の ($*) 部åˆ?‚’解析して割当ますã?
195             *
196             * TMSTARTやTMENDは、リンク作æ?側で自由にæŒ?®šできますã?
197             *
198             * 同様ã?機è?は、BODY部にリンクを指定することも可能ですã?
199             * こã?($1)??$4)にはã€?–‹始時刻、終äº?™‚刻、日付ã?キーがセãƒ?ƒˆされますã?
200             *
201             * 6amp;TMSTART=($1)&amp;TMEND=($2)&amp;DYUSE=($3)&amp;UNITID=($4) とã�?�†æ–?­—å?の ($*) 部åˆ?‚’解析して割当ますã?
202             *
203             * BODY と nullLinkColumn が両方とも指定された場合ã?、nullLinkColumn の設定が優先されますã?
204             *
205             * @param       clm nullのãƒ??タに適用するリンクを設定したカラãƒ?��
206             */
207            public void setNullLinkColumn( final String clm ) {
208                    putParam( ViewTimeTableParam.NULL_LINK_CLM_ID,
209                                      nval( getRequestParameter( clm ),null ) );
210            }
211    
212            /**
213             * 【TAG】タイãƒ?ƒ†ーブルにãƒ??タをå?れるTDタグにclass属æ?を付与するå?合ã?カラãƒ?��をセãƒ?ƒˆしますã?
214             *
215             * @og.tag
216             * これは、タイãƒ?ƒ†ーブルのリンクã‚?ª¬明を入れるTDに、class属æ?を付与するå?合ã?カラãƒ?��ã‚?
217             * æŒ?®šしますã?これにより、TD に色を付けたり、表示の条件を外部からæŒ?®šできますã?
218             * もっともä¸?ˆ¬çš?�ª想定用途ã?、タイãƒ?ƒ†ーブルのãƒ??タの種別に応じた色åˆ?�‘ですã?
219             *
220             * @og.rev 5.4.3.7 (2012/01/20) 新規追åŠ?
221             *
222             * @param       clm nullのãƒ??タをå?れるTDタグにclass属æ?を付与するå?合ã?カラãƒ?��
223             */
224            public void setTdClassColumn( final String clm ) {
225                    putParam( ViewTimeTableParam.TD_CLASS_COLUMN_ID,
226                                      nval( getRequestParameter( clm ),null ) );
227            }
228    
229            /**
230             * 【TAG】ブレーク処ç�?‚’行うカラãƒ?¼©?¤をCSV形式でセãƒ?ƒˆしまã�?初期値:0030)ã€?
231             *
232             * @og.tag
233             * æŒ?®šされたカラãƒ?¼©?¤がã?チェンジすると、ブレイク処ç�?‚’行いますã?
234             * これは、ブレイク毎にãƒ??ブルがå?かれて、テーブルの先é?に、ブレイクした
235             * 値が表示されますã?
236             * 例えば、日付カラãƒ?‚’ブレイクカラãƒ?�¨して設定すると、日付がブレイクするたã?ã€?
237             * 日付をヘッãƒ??に出して、テーブルを作æ?しますã?
238             * ブレークカラãƒ??、CSV形式でè¤?•°æŒ?®šできますã?そã?場合ã?、è¤?•°æŒ?®šã?カラãƒ??
239             * 合æ?されたå?で、キーブレイクの判定を行いますã?(簡単にè¨?�†と?¯?²判定になりますã?)
240             * なおã?ブレイクカラãƒ?‚’æŒ?®šしたå?合ã?、è?動的に、noDisplay 属æ?にそã?値をセãƒ?ƒˆ
241             * しますã?
242             *
243             * @param       clms ブレーク処ç�?‚’行うカラãƒ?¼©?¤(CSV形å¼?
244             */
245    //      public void setBreakClms( final String clms ) {
246    //              putParam( ViewTimeTableParam.BREAK_CLMS,
247    //                                nval( getRequestParameter( clms ),null ) );
248    //      }
249    
250            /**
251             * 【TAG】日付でブレーク処ç�?‚’行うかどã�?�‹を指定しまã�?初期値:true)ã€?
252             *
253             * @og.tag
254             * 日付でブレーク処ç�?‚’行う場合ã?日付単位にãƒ??ブルがå?かれますã?
255             * 日付ã?、テーブルの先é?に、ブレイクした時点で表示されますã?
256             * 日付でブレイクするを指定したå?合ã?、è?動的に、noDisplay 属æ?に日付が
257             * セãƒ?ƒˆされますã?
258             * 初期値は、true(日付ブレイクする)ですã?
259             *
260             * @param       flag 日付でブレーク処ç�?‚’行うかどã�?�‹(true:日付ブレイクする、false しなã�?
261             */
262            public void setUseDyBreak( final String flag ) {
263                    putParam( ViewTimeTableParam.USE_DY_BREAK,
264                                      nval( getRequestParameter( flag ),"true" ) );
265            }
266    
267            /**
268             * 【TAG】同ä¸?—¥付でブッキング時にマã?ジ処ç�?‚’行うかどã�?�‹を指定しまã�?初期値:false)ã€?
269             *
270             * @og.tag
271             * 日付ã?キー(人ã‚?–½設)で予定時刻が重è¤?�—てã�?‚‹場合ã?処ç�?–¹法をæŒ?®šしますã?
272             * 通常(初期値:false)では、ブãƒ?‚­ングãƒ??タはレコードをåˆ?�‘て表示させますã?
273             * 例えば、人の予定であれば、仮予ç´?‚„会議招集などのケースでã€?‡�è¤?‚’表示しておき
274             * 利用è€?œ¬人に決めさせるとã�?�†ケースがè?えられますã?
275             * これをã?true に設定すると、予定時刻が重è¤?�—てã�?‚‹場合ã?、ã?ージして、ä¸?�¤の
276             * 予定として表現しますã?
277             * 初期値は、false(ブッキング時にマã?ジ処ç�?‚’行わなã�?ですã?
278             *
279             * @og.rev 5.4.4.2 (2012/02/03) 新規追åŠ?
280             *
281             * @param       flag 同ä¸?—¥付でブッキング時にマã?ジ処ç�?‚’行うかどã�?�‹(true:行うする、false 行わなã�?
282             */
283            public void setUseBookingMerge( final String flag ) {
284                    putParam( ViewTimeTableParam.USE_BOOKING_MERGE,
285                                      nval( getRequestParameter( flag ),"true" ) );
286            }
287    
288            /**
289             * タグの名称をã?返しますã?
290             * 自åˆ??身のクラス名よりã?自動的に取り出せなã�?�Ÿめã?こã?メソãƒ?ƒ‰をオーバã?ライドしますã?
291             *
292             * @return  タグの名称
293             */
294            @Override
295            protected String getTagName() {
296                    return "timeTableParam" ;
297            }
298    
299            /**
300             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
301             *
302             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
303             *
304             * @param       strm    ObjectOutputStreamオブジェクãƒ?
305             * @throws IOException  入出力エラーが発生したå?å�?
306             */
307            private void writeObject( final ObjectOutputStream strm ) throws IOException {
308                    strm.defaultWriteObject();
309            }
310    
311            /**
312             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
313             *
314             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
315             *
316             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
317             *
318             * @param       strm    ObjectInputStreamオブジェクãƒ?
319             * @see #release2()
320             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
321             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
322             */
323            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
324                    strm.defaultReadObject();
325            }
326    }