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.ViewGanttTableParam;
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 が HTMLGanttTable の場合にパラメータを設定します。
028 *
029 * ガントチャートを表示する、ViewForm_HTMLGanttTable クラスに対して、各種パラメータを
030 * 設定します。
031 * パラメータが設定されていない場合は、ViewGanttTableParam の初期値が
032 * 使用されます。
033 * (パラメータを使用するには、viewタグのuseParam 属性をtrueに設定する必要があります。)
034 *
035 * @og.formSample
036 * ●形式:<og:ganttParam groupColumns="PRJCODE,RESOURCE_ID" minDuration="0.5" />
037 * ●body:なし
038 *
039 * ●Tag定義:
040 *   <og:ganttParam
041 *       groupColumns       【TAG】各タスクを1行にまとめる時のカラム名(カンマ区切り)をセットします (初期値:ViewGanttTableParam#GROUP_COLUMNS_VALUE[=PRJCODE,RESOURCE_ID])
042 *       durationColumn     【TAG】期間欄のカラム名をセットします
043 *       dystartColumn      【TAG】開始日付けのカラム名をセットします (初期値:ViewGanttTableParam#DYSTART_COLUMN_VALUE[=DYSTART])
044 *       dystartFormat      【TAG】開始日付けのフォーマットを指定します (初期値:ViewGanttTableParam#DYSTART_FORMAT_VALUE[=yyyyMMdd])
045 *       minDuration        【TAG】最小期間(少数可)をセットします(初期値:1)
046 *       headerDuration     【TAG】ヘッダーの表示期間(少数可)をセットします(初期値:最小期間(minDuration) と同じ)
047 *       headerLocale       【TAG】ヘッダーを表示する時の、Locale(language のみ) を指定します (初期値:ViewGanttTableParam#HEADER_LOCALE_VALUE[=ja])
048 *       useSeqDay          【TAG】ヘッダー日付けの連続表示を行うかどうか[true/false]を指定します(初期値:false)
049 *       startDay           【TAG】ヘッダー日付けの開始日を指定します
050 *       endDay             【TAG】ヘッダー日付けの終了日を指定します
051 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
052 *   />
053 *
054 * ●使用例
055 *     ViewFormTag の viewFormType が、ViewForm_HTMLGanttTable の場合に使用します。
056 *     <og:view
057 *         viewFormType = "HTMLGanttTable"
058 *         command      = "{@command}"
059 *         startNo      = "0"
060 *         pageSize     = "20"
061 *         <b>useParam     = &quot;true&quot;</b>
062 *     &gt;
063 *         &lt;og:ganttParam
064 *              groupColumns   = "PRJCODE,RESOURCE_ID"
065 *              durationColumn = "DURATION"
066 *              dystartColumn  = "DYSTART"
067 *              dystartFormat  = "yyyyMMdd"
068 *              minDuration    = "0.5"
069 *              headerDuration = "1"
070 *              headerLocale   = "en"
071 *              useSeqDay      = "true"
072 *              startDay       = "20041020"
073 *              endDay         = "20041028"
074 *         /&gt;
075 *     &lt;/og:view &gt;
076 *
077 * @og.rev 3.5.5.8 (2004/05/20) 新規作成
078 * @og.group 画面表示
079 *
080 * @version  4.0
081 * @author       Kazuhiko Hasegawa
082 * @since    JDK5.0,
083 */
084public class ViewGanttParamTag extends ViewParamTag {
085        //* このプログラムのVERSION文字列を設定します。   {@value} */
086        private static final String VERSION = "4.0.0.0 (2006/09/31)" ;
087
088        private static final long serialVersionUID = 400020060931L ;
089
090        /**
091         * 【TAG】各タスクを1行にまとめる時のカラム名(カンマ区切り)をセットします
092         *              (初期値:ViewGanttTableParam#GROUP_COLUMNS_VALUE[={@og.value ViewGanttTableParam#GROUP_COLUMNS_VALUE}])。
093         *
094         * @og.tag
095         * ガントチャートで、同一要件のタスクを1行にまとめて表示します。
096         * その場合のグルーピングのキーとなるカラム名を指定します。
097         * 複数ある場合は、カンマ区切りで指定できます。
098         * 日付けでの重複は考慮されていませんので、データ側でチェックしておいて下さい。
099         * (初期値:ViewGanttTableParam#GROUP_COLUMNS_VALUE[={@og.value ViewGanttTableParam#GROUP_COLUMNS_VALUE}])。
100         *
101         * @param       groupColumns データを1行にまとめる時のカラム名(カンマ区切り)
102         * @see         org.opengion.hayabusa.html.ViewGanttTableParam#GROUP_COLUMNS_VALUE
103         */
104        public void setGroupColumns( final String groupColumns ) {
105                putParam( ViewGanttTableParam.GROUP_COLUMNS_KEY ,
106                                  nval( getRequestParameter( groupColumns ),null ) );
107        }
108
109        /**
110         * 【TAG】期間欄のカラム名をセットします。
111         *
112         * @og.tag
113         * ガントを表示する場合の、各タスクの幅(期間)のカラム名を指定します。
114         * 各タスクは、開始日と期間より、ガントの指定のロケーションに割り当てられます。
115         * 初期値は null です。
116         *
117         * @param       durationColumn 期間欄のカラム名をセットします。
118         */
119        public void setDurationColumn( final String durationColumn ) {
120                putParam( ViewGanttTableParam.DURATION_COLUMN_KEY ,
121                                  nval( getRequestParameter( durationColumn ),null ) );
122        }
123
124        /**
125         * 【TAG】開始日付けのカラム名をセットします
126         *              (初期値:ViewGanttTableParam#DYSTART_COLUMN_VALUE[={@og.value ViewGanttTableParam#DYSTART_COLUMN_VALUE}])。
127         *
128         * @og.tag
129         * ガントを表示する場合の、各タスクの開始日付けのカラム名を指定します。
130         * 各タスクは、開始日と期間より、ガントの指定のロケーションに割り当てられます。
131         * (初期値:ViewGanttTableParam#DYSTART_COLUMN_VALUE[={@og.value ViewGanttTableParam#DYSTART_COLUMN_VALUE}])。
132         *
133         * @param       dystartColumn 開始日付けのカラム名(初期値:DYSTART)
134         */
135        public void setDystartColumn( final String dystartColumn ) {
136                putParam( ViewGanttTableParam.DYSTART_COLUMN_KEY ,
137                                   nval( getRequestParameter( dystartColumn ),null ) );
138        }
139
140        /**
141         * 【TAG】開始日付けのフォーマットを指定します
142         *              (初期値:ViewGanttTableParam#DYSTART_FORMAT_VALUE[={@og.value ViewGanttTableParam#DYSTART_FORMAT_VALUE}])。
143         *
144         * @og.tag
145         * ガントの開始日付 データを取り込むときの日付けフォーマットを指定します。
146         * この形式の日付け文字列を、内部で、日付けデータとして管理します。
147         * java.text.SimpleDateFormat で指定できる形式を指定します。
148         * (初期値:ViewGanttTableParam#DYSTART_FORMAT_VALUE[={@og.value ViewGanttTableParam#DYSTART_FORMAT_VALUE}])。
149         *
150         * @param       dystartFormat 開始日付けのフォーマット
151         * @see java.text.SimpleDateFormat
152         */
153        public void setDystartFormat( final String dystartFormat ) {
154                putParam( ViewGanttTableParam.DYSTART_FORMAT_KEY ,
155                                   nval( getRequestParameter( dystartFormat ),null ) );
156        }
157
158        /**
159         * 【TAG】最小期間(少数可)をセットします
160         *              (初期値:ViewGanttTableParam#MIN_DURATION_VALUE[={@og.value ViewGanttTableParam#MIN_DURATION_VALUE}])。
161         *
162         * @og.tag
163         * Duration で指定する期間の最小単位を指定します。
164         * 例えば、1日単位の精度でタスクを割り当てる場合、期間の最小単位は、1 に
165         * なります。表示する場合も、この数字が最小単位となり、HTMLのテーブルの
166         * 1カラムに相当します。例えば、最小単位を、0.5 にすると、
167         * 半日単位でタスクを割り当てることができます。10 にすると、10日単位
168         * になります。
169         * (初期値:ViewGanttTableParam#MIN_DURATION_VALUE[={@og.value ViewGanttTableParam#MIN_DURATION_VALUE}])。
170         *
171         * @param       minDuration 列合計のカラムに表示するラベルID
172         */
173        public void setMinDuration( final String minDuration ) {
174                putParam( ViewGanttTableParam.MIN_DURATION_KEY ,
175                                   nval( getRequestParameter( minDuration ),null ) );
176        }
177
178        /**
179         * 【TAG】ヘッダーの表示期間(少数可)をセットします(初期値:最小期間(minDuration) と同じ)。
180         *
181         * @og.tag
182         * ヘッダー部の日付け欄で指定する表示間隔を指定します。
183         *
184         * 例えば、最小期間(minDuration)を、0.5日単位の精度で指定した場合、
185         * そのままでは、ヘッダーも最小期間単位で表示されますが、1日単位で表示
186         * させたい場合は、1 を設定します。
187         * また、1週間単位では、7 を指定します。
188         * 1ヶ月単位などの、不定長での指定はできません。
189         * 初期値は最小期間(minDuration) と同じです。
190         *
191         * @param       headerDuration ヘッダーの表示期間(少数可)
192         */
193        public void setHeaderDuration( final String headerDuration ) {
194                putParam( ViewGanttTableParam.HEADER_DURATION_KEY ,
195                                   nval( getRequestParameter( headerDuration ),null ) );
196        }
197
198        /**
199         * 【TAG】ヘッダーを表示する時の、Locale(language のみ) を指定します
200         *              (初期値:ViewGanttTableParam#HEADER_LOCALE_VALUE[={@og.value ViewGanttTableParam#HEADER_LOCALE_VALUE}])。
201         *
202         * @og.tag
203         * ヘッダー部の日付け欄で SimpleDateFormat を用いて解析していますが、
204         * この Locale (language のみ)を指定できます。
205         *
206         * language は、有効な ISO 言語コードです。
207         * これらのコードは、ISO-639 で定義される 2 桁の小文字です。
208         * コードの完全なリストは、
209         * <a href="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">
210         * http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt </a>
211         * を始めいくつかの場所で入手できます。
212         * SimpleDateFormat の Locale を指定するコンストラクタでは、全ての
213         * ロケールをサポートするわけではありませんのでご注意ください。
214         * (初期値:ViewGanttTableParam#HEADER_LOCALE_VALUE[={@og.value ViewGanttTableParam#HEADER_LOCALE_VALUE}])。
215         *
216         * @og.rev 3.5.5.9 (2004/06/07) 新規追加
217         *
218         * @param       headerLocale ヘッダーの Locale(language のみ)
219         * @see         java.text.SimpleDateFormat#SimpleDateFormat(String , Locale)
220         */
221        public void setHeaderLocale( final String headerLocale ) {
222                putParam( ViewGanttTableParam.HEADER_LOCALE_KEY ,
223                                   nval( getRequestParameter( headerLocale ),null ) );
224        }
225
226        /**
227         * 【TAG】ヘッダー日付けの連続表示を行うかどうか[true/false]を指定します
228         *              (初期値:ViewGanttTableParam#USE_SEQ_DAY_VALUE[={@og.value ViewGanttTableParam#USE_SEQ_DAY_VALUE}])。
229         *
230         * @og.tag
231         * ヘッダー部の日付け欄で開始日と終了日の範囲の連続日付け表示を行う場合に、
232         * "true" に、設定します。開始日と終了日 の設定方法は、各属性を参照してください。
233         * true:連続表示を行う / false:dystartColumn カラムで使用した分のみ
234         * (初期値:ViewGanttTableParam#USE_SEQ_DAY_VALUE[={@og.value ViewGanttTableParam#USE_SEQ_DAY_VALUE}])。
235         *
236         * @og.rev 3.6.1.0 (2005/01/05) 新規追加
237         *
238         * @param       useSeqDay ヘッダー日付けの連続表示を行うかどうか[true:行う/false:行わない]
239         * @see         #setStartDay( String )
240         * @see         #setEndDay( String )
241         */
242        public void setUseSeqDay( final String useSeqDay ) {
243                putParam( ViewGanttTableParam.USE_SEQ_DAY_KEY ,
244                                   nval( getRequestParameter( useSeqDay ),null ) );
245        }
246
247        /**
248         * 【TAG】ヘッダー日付けの開始日を指定します。
249         *
250         * @og.tag
251         * ヘッダー部の日付け欄で連続日付け表示使用時(seqDay="true")に、
252         * この開始日より、終了日までの日付けヘッダーを連続表示します。
253         * seqDay="true" で startDayを指定しない場合は、dystartColumn で
254         * 指定された、最小日付けを使用します。逆に、この最小日付けよりも
255         * 大きな日付けは、セットできません。データとヘッダーの整合性が
256         * 取れなくなります。
257         *
258         * この時の日付けフォーマットは、dystartFormat の指定と同じです。
259         *
260         * @og.rev 3.6.1.0 (2005/01/05) 新規追加
261         *
262         * @see         #setUseSeqDay( String )
263         * @param       startDay ヘッダー日付けの開始日
264         * @see         #setEndDay( String )
265         */
266        public void setStartDay( final String startDay ) {
267                putParam( ViewGanttTableParam.START_DAY_KEY ,
268                                   nval( getRequestParameter( startDay ),null ) );
269        }
270
271        /**
272         * 【TAG】ヘッダー日付けの終了日を指定します。
273         *
274         * @og.tag
275         * ヘッダー部の日付け欄で連続日付け表示使用時(seqDay="true")に、
276         * 開始日より、この終了日までの日付けヘッダーを連続表示します。
277         * seqDay="true" で endDayを指定しない場合は、dystartColumn で
278         * 指定された、最大日付けを使用します。逆に、この最大日付けよりも
279         * 小さな日付けは、セットできません。データとヘッダーの整合性が
280         * 取れなくなります。
281         *
282         * この時の日付けフォーマットは、dystartFormat の指定と同じです。
283         *
284         * @og.rev 3.6.1.0 (2005/01/05) 新規追加
285         *
286         * @param       endDay ヘッダー日付けの終了日
287         * @see         #setUseSeqDay( String )
288         * @see         #setStartDay( String )
289         */
290        public void setEndDay( final String endDay ) {
291                putParam( ViewGanttTableParam.END_DAY_KEY ,
292                                   nval( getRequestParameter( endDay ),null ) );
293        }
294
295        /**
296         * タグの名称を、返します。
297         * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。
298         *
299         * @og.rev 4.0.0.0 (2005/01/31) 新規追加
300         *
301         * @return  タグの名称
302         */
303        @Override
304        protected String getTagName() {
305                return "ganttParam" ;
306        }
307
308        /**
309         * シリアライズ用のカスタムシリアライズ書き込みメソッド
310         *
311         * @og.rev 4.0.0.0 (2006/09/31) 新規追加
312         * @serialData 一部のオブジェクトは、シリアライズされません。
313         *
314         * @param       strm    ObjectOutputStreamオブジェクト
315         * @throws IOException  入出力エラーが発生した場合
316         */
317        private void writeObject( final ObjectOutputStream strm ) throws IOException {
318                strm.defaultWriteObject();
319        }
320
321        /**
322         * シリアライズ用のカスタムシリアライズ読み込みメソッド
323         *
324         * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。
325         *
326         * @og.rev 4.0.0.0 (2006/09/31) 新規追加
327         * @serialData 一部のオブジェクトは、シリアライズされません。
328         *
329         * @param       strm    ObjectInputStreamオブジェクト
330         * @see #release2()
331         * @throws IOException  シリアライズに関する入出力エラーが発生した場合
332         * @throws ClassNotFoundException       クラスを見つけることができなかった場合
333         */
334        private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
335                strm.defaultReadObject();
336        }
337}