    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.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
    019
    020/**
    021 * JSPアプリケーションに対してバージョン管理できるようにコメントを
    022 * 記述するためのタグです。
    023 *
    024 * バージョン、ビルド番号、日付、変更者、タイトルなどを記述できます。
    025 * 変更内容は、text属性か、BODY 部に記述します。
    026 * パラメーター変数({&#064;XXXX})は、使用できません。
    027 *
    028 * @og.formSample
    029 * ●形式：&lt;og:comment title="･･･" version="･･･" date="･･･" author="･･･" ･･･ /&gt;
    030 * ●body：あり(EVAL_BODY_BUFFERED:BODYを評価し、{&#064;XXXX} を解析します)
    031 *
    032 * ●Tag定義：
    033 *   &lt;og:comment
    034 *       rdcCode            【TAG】コメントの設計変更要求コードを設定します
    035 *       title            ○【TAG】コメントのタイトルを設定します(必須)。
    036 *       version          ○【TAG】コメントのバージョンを設定します(必須)。
    037 *       build              【TAG】コメントのビルド番号を設定します
    038 *       date             ○【TAG】コメントの変更日付を設定します(必須)。
    039 *       author           ○【TAG】コメントの変更者を設定します(必須)。
    040 *       text               【TAG】コメントの内容を設定します
    041 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    042 *       pgid               【TAG】コメントのプログラムIDを設定します
    043 *       system             【TAG】コメントのシステム名称を設定します
    044 *   &gt;   ... Body ...
    045 *   &lt;/og:comment&gt;
    046 *
    047 * ●使用例
    048 *     &lt;og:comment
    049 *         title   = "変更概要"
    050 *         version = "001"
    051 *         date    = "YYYY/MM/DD"
    052 *         author  = "Y.MATSUI(Hybs) "
    053 *         rdcCode = "RDC00001"
    054 *         text    = "当処理中の変更内容を記述します。"
    055 *     /&gt;
    056 *
    057 *     &lt;og:comment
    058 *         title   = "変更概要"
    059 *         version = "001"
    060 *         date    = "YYYY/MM/DD"
    061 *         author  = "Y.MATSUI(Hybs) "
    062 *         rdcCode = "RDC00001"
    063 *         build   = "ビルド番号"           (必須属性では有りません。)
    064 *     &gt;
    065 *       当処理中の変更内容を記述します。
    066 *     &lt;/og:comment&gt;
    067 *
    068 * @og.rev 2.1.3.0 (2002/12/12) JSP画面の管理用に、画面に変更履歴を持たせる為のタグを新規作成
    069 * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    070 * @og.group 画面部品
    071 *
    072 * @version  4.0
    073 * @author   Kazuhiko Hasegawa
    074 * @since    JDK5.0,
    075 */
    076public class CommentTag extends CommonTagSupport {
    077        /** このプログラムのVERSION文字列を設定します。   {@value} */
    078        private static final String VERSION = "6.4.2.0 (2016/01/29)" ;
    079        private static final long serialVersionUID = 642020160129L ;
    080
    081        private String rdcCode  ;
    082        private String title    ;
    083        private String version  ;
    084        private String build    ;
    085        private String date             ;
    086        private String author   ;
    087        private String text             ;
    088        private String pgid             ;               // 3.8.9.3
    089        private String system   ;               // 3.8.9.3
    090
    091        /**
    092         * デフォルトコンストラクター
    093         *
    094         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    095         */
    096        public CommentTag() { super(); }                // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    097
    098        /**
    099         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    100         *
    101         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    102         *
    103         * @return      後続処理の指示
    104         */
    105        @Override
    106        public int doStartTag() {
    107                // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method
    108                return text == null
    109                                        ? EVAL_BODY_BUFFERED            // Body を評価する。( extends BodyTagSupport 時)
    110                                        : SKIP_BODY ;                           // Body を評価しない
    111        }
    112
    113        /**
    114         * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
    115         *
    116         * @og.rev 2.2.0.0 (2002/12/17) 中国語(国際化)対応 エンコードの取得方法変更
    117         * @og.rev 3.0.0.0 (2002/12/25) StringUtil#changeString 廃止
    118         * @og.rev 3.1.1.0 (2003/03/28) ボディの内容を取得する処理を、CommonTagSupport で行う。
    119         *
    120         * @return      後続処理の指示(SKIP_BODY)
    121         */
    122        @Override
    123        public int doAfterBody() {
    124                text = getBodyString();
    125
    126                return SKIP_BODY ;
    127        }
    128
    129        /**
    130         * タグリブオブジェクトをリリースします。
    131         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    132         *
    133         * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
    134         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
    135         * @og.rev 3.3.2.0 (2003/07/07) 設計変更要求コード(rdcCode)属性を追加。
    136         * @og.rev 3.8.9.3 (2007/08/31) PGID(pgid)、システム名称(system)属性を追加。
    137         *
    138         */
    139        @Override
    140        protected void release2() {
    141                super.release2();
    142                rdcCode         = null;
    143                title           = null;
    144                version         = null;
    145                build           = null;
    146                date            = null;
    147                author          = null;
    148                text            = null;
    149                pgid            = null; // 3.8.9.3
    150                system          = null; // 3.8.9.3
    151        }
    152
    153        /**
    154         * 【TAG】設計変更要求コードを設定します。
    155         *
    156         * @og.tag コメントの設計変更要求コードを設定します。
    157         *
    158         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    159         *
    160         * @param   val 設計変更要求コード
    161         */
    162        public void setRdcCode( final String val ) {
    163                rdcCode = val;
    164        }
    165
    166        /**
    167         * 【TAG】タイトルを設定します。
    168         *
    169         * @og.tag コメントのタイトルを設定します。
    170         *
    171         * @og.rev 2.2.0.0 (2002/12/17) 中国語(国際化)対応 エンコードの取得方法変更
    172         * @og.rev 3.0.0.0 (2002/12/25) StringUtil#changeString 廃止
    173         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    174         *
    175         * @param   val タイトル
    176         */
    177        public void setTitle( final String val ) {
    178                title = val;
    179        }
    180
    181        /**
    182         * 【TAG】バージョンを設定します。
    183         *
    184         * @og.tag コメントのバージョンを設定します
    185         *
    186         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    187         *
    188         * @param   val バージョン
    189         */
    190        public void setVersion( final String val ) {
    191                version = val;
    192        }
    193
    194        /**
    195         * 【TAG】ビルド番号を設定します。
    196         *
    197         * @og.tag コメントのビルド番号を設定します
    198         *
    199         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    200         *
    201         * @param   val ビルド番号
    202         */
    203        public void setBuild( final String val ) {
    204                build = val;
    205        }
    206
    207        /**
    208         * 【TAG】変更日付を設定します。
    209         *
    210         * @og.tag コメントの変更日付を設定します
    211         *
    212         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    213         *
    214         * @param   val 変更日付
    215         */
    216        public void setDate( final String val ) {
    217                date = val;
    218        }
    219
    220        /**
    221         * 【TAG】変更者を設定します。
    222         *
    223         * @og.tag コメントの変更者を設定します
    224         *
    225         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    226         *
    227         * @param   val 変更者
    228         */
    229        public void setAuthor( final String val ) {
    230                author = val;
    231        }
    232
    233        /**
    234         * 【TAG】内容を設定します。
    235         *
    236         * @og.tag コメントの内容を設定します。
    237         * ここでの内容は、BODY部に記述することも可能です。
    238         * 両方に記述した場合は、text属性を優先します。
    239         *
    240         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
    241         *
    242         * @param   val コメントの内容
    243         */
    244        public void setText( final String val ) {
    245                text = val;
    246        }
    247
    248        /**
    249         * 【TAG】プログラムIDを指定します。
    250         *
    251         * @og.tag コメントのプログラムIDを設定します。
    252         *
    253         * @param   val プログラムID
    254         */
    255        public void setPgid( final String val ) {
    256                pgid = val;
    257        }
    258
    259        /**
    260         * 【TAG】システム名称を設定します。
    261         *
    262         * @og.tag コメントのシステム名称を設定します。
    263         *
    264         * @param   val システム名称
    265         */
    266        public void setSystem( final String val ) {
    267                system = val;
    268        }
    269
    270        /**
    271         * このオブジェクトの文字列表現を返します。
    272         * 基本的にデバッグ目的に使用します。
    273         *
    274         * @return このクラスの文字列表現
    275         * @og.rtnNotNull
    276         */
    277        @Override
    278        public String toString() {
    279                return ToString.title( this.getClass().getName() )
    280                                .println( "VERSION"             ,VERSION        )
    281                                .println( "rdcCode"             ,rdcCode        )
    282                                .println( "title"               ,title          )
    283                                .println( "version"             ,version        )
    284                                .println( "build"               ,build          )
    285                                .println( "date"                ,date           )
    286                                .println( "author"              ,author         )
    287                                .println( "text"                ,text           )
    288                                .println( "pgid"                ,pgid           )
    289                                .println( "system"              ,system         )
    290                                .println( "Other..."    ,getAttributes().getAttribute() )
    291                                .fixForm().toString() ;
    292        }
    293}