    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.common.HybsSystemException;
    019import org.opengion.hayabusa.html.TableFormatter;
    020import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
    021
    022/**
    023 * ガントチャート(タスク配置型)用の繰り返しタグのフォーマットに使用します。
    024 *
    025 * itd タグは、ガントヘッダー部の TDタグの繰返しに使用されます。
    026 * この繰返しは、ganttParam タグの minDuration で指定された間隔で行われます。
    027 * (例えば、0.5 を指定すれば、半日単位で処理されます。)
    028 * itd タグの colspan 属性を指定した場合は、itd 自身が、td タグに colspan を
    029 * 追加すると共に、繰返し自身を、その指定数だけに抑制します。
    030 * 具体的には、colspan="2" とすると、２回に一回しか、itd タグが呼び出されなく
    031 * なります。
    032 *
    033 * @og.formSample
    034 * ●形式：&lt;og:itd&gt; ... Body ... &lt;/og:itd&gt;
    035 * ●body：あり(EVAL_BODY_BUFFERED:BODYを評価し、{&#064;XXXX} を解析します)
    036 *
    037 * ●Tag定義：
    038 *   &lt;og:itd
    039 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    040 *   &gt;   ... Body ...
    041 *   &lt;/og:itd&gt;
    042 *
    043 * ●使用例
    044 *    &lt;og:thead rowspan="1"&gt;
    045 *      &lt;tr&gt;
    046 *        &lt;og:itd&gt;M/d&lt;/og:itd&gt;
    047 *      &lt;/tr&gt;
    048 *    &lt;/og:thead&gt;
    049 *    &lt;og:tbody rowspan="1" &gt;
    050 *      &lt;tr&gt;
    051 *        &lt;og:itd&gt;
    052 *          &lt;span class="cGntBar[!FGTASK]"
    053 *                title="[NMMCN]&amp;amp;#13;&amp;amp;#10;[NMKT]"
    054 *                val1 ="[GVZOOM]"
    055 *                val2 ="[CDJGS]"
    056 *                val3 ="[WC]"
    057 *                val4 ="[NOMCN]"
    058 *                val5 ="[CDKT]"
    059 *                val6 ="[FGTASK]"
    060 *                val7 ="[DYSTART]"
    061 *                val8 ="[DYDELAY]"
    062 *                val9 ="[DURATION]" &gt;&amp;nbsp;&lt;/span&gt;
    063 *        &lt;/og:itd&gt;
    064 *      &lt;/tr&gt;
    065 *    &lt;/og:tbody&gt;
    066 *
    067 * @og.rev 3.5.4.8 (2004/02/23) 新規作成
    068 * @og.group 画面部品
    069 *
    070 * @version  4.0
    071 * @author       Kazuhiko Hasegawa
    072 * @since    JDK5.0,
    073 */
    074public class ItdTag extends CommonTagSupport {
    075        /** このプログラムのVERSION文字列を設定します。   {@value} */
    076        private static final String VERSION = "6.4.2.0 (2016/01/29)" ;
    077        private static final long serialVersionUID = 642020160129L ;
    078
    079        private String itdBody  ;
    080
    081        /**
    082         * デフォルトコンストラクター
    083         *
    084         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    085         */
    086        public ItdTag() { super(); }            // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    087
    088        /**
    089         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    090         *
    091         * @return      後続処理の指示( EVAL_BODY_BUFFERED )
    092         */
    093        @Override
    094        public int doStartTag() {
    095                return EVAL_BODY_BUFFERED ;     // Body を評価する。( extends BodyTagSupport 時)
    096        }
    097
    098        /**
    099         * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
    100         *
    101         * @return      後続処理の指示(SKIP_BODY)
    102         */
    103        @Override
    104        public int doAfterBody() {
    105                itdBody = getBodyString();
    106
    107                return SKIP_BODY ;                              // Body を評価しない
    108        }
    109
    110        /**
    111         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
    112         *
    113         * @og.rev 6.3.4.0 (2015/08/01) TFormatTag.java → TFormatImpl.java
    114         *
    115         * @return      後続処理の指示
    116         */
    117        @Override
    118        public int doEndTag() {
    119                debugPrint();           // 4.0.0 (2005/02/28)
    120                final TFormatImpl tFormat = (TFormatImpl)findAncestorWithClass( this, TFormatImpl.class );
    121                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    122                if( tFormat == null ) {
    123                        final String errMsg = "<b><b>" + getTagName() + "タグは、TheadTag か、TBodyTagの内側(要素)に記述してください。</b>";
    124                        throw new HybsSystemException( errMsg );
    125                }
    126
    127                tFormat.setItdBody( itdBody );
    128                jspPrint( TableFormatter.HYBS_ITD_MARKER );
    129
    130                return EVAL_PAGE ;              // ページの残りを評価する。
    131        }
    132
    133        /**
    134         * タグリブオブジェクトをリリースします。
    135         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    136         *
    137         */
    138        @Override
    139        protected void release2() {
    140                super.release2();
    141                itdBody = null;
    142        }
    143
    144        /**
    145         * このオブジェクトの文字列表現を返します。
    146         * 基本的にデバッグ目的に使用します。
    147         *
    148         * @return このクラスの文字列表現
    149         * @og.rtnNotNull
    150         */
    151        @Override
    152        public String toString() {
    153                return ToString.title( this.getClass().getName() )
    154                                .println( "VERSION"             ,VERSION        )
    155                                .println( "itdBody"             ,itdBody        )
    156                                .println( "Other..."    ,getAttributes().getAttribute() )
    157                                .fixForm().toString() ;
    158        }
    159}