    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 * ●形式：&lt;og:ganttParam groupColumns="PRJCODE,RESOURCE_ID" minDuration="0.5" /&gt;
    037 * ●body：なし
    038 *
    039 * ●Tag定義：
    040 *   &lt;og:ganttParam
    041 *       groupColumns       【TAG】各タスクを１行にまとめる時のカラム名(カンマ区切り)をセットします (初期値: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 *   /&gt;
    053 *
    054 * ●使用例
    055 *     ViewFormTag の viewFormType が、ViewForm_HTMLGanttTable の場合に使用します。
    056 *     &lt;og:view
    057 *         viewFormType = &quot;HTMLGanttTable&quot;
    058 *         command      = &quot;{&#064;command}&quot;
    059 *         startNo      = &quot;0&quot;
    060 *         pageSize     = &quot;20&quot;
    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】各タスクを１行にまとめる時のカラム名(カンマ区切り)をセットします
    092         *              (初期値:ViewGanttTableParam#GROUP_COLUMNS_VALUE[={@og.value ViewGanttTableParam#GROUP_COLUMNS_VALUE}])。
    093         *
    094         * @og.tag
    095         * ガントチャートで、同一要件のタスクを１行にまとめて表示します。
    096         * その場合のグルーピングのキーとなるカラム名を指定します。
    097         * 複数ある場合は、カンマ区切りで指定できます。
    098         * 日付けでの重複は考慮されていませんので、データ側でチェックしておいて下さい。
    099         * (初期値:ViewGanttTableParam#GROUP_COLUMNS_VALUE[={@og.value ViewGanttTableParam#GROUP_COLUMNS_VALUE}])。
    100         *
    101         * @param       groupColumns データを１行にまとめる時のカラム名(カンマ区切り)
    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         * 例えば、１日単位の精度でタスクを割り当てる場合、期間の最小単位は、１ に
    165         * なります。表示する場合も、この数字が最小単位となり、HTMLのテーブルの
    166         * １カラムに相当します。例えば、最小単位を、０．５ にすると、
    167         * 半日単位でタスクを割り当てることができます。１０ にすると、１０日単位
    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)を、０．５日単位の精度で指定した場合、
    185         * そのままでは、ヘッダーも最小期間単位で表示されますが、１日単位で表示
    186         * させたい場合は、１ を設定します。
    187         * また、１週間単位では、７ を指定します。
    188         * １ヶ月単位などの、不定長での指定はできません。
    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}