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 * パラメーター変数({@XXXX})は、使用できません。
027 *
028 * @og.formSample
029 * ●形式:<og:comment title="・・・" version="・・・" date="・・・" author="・・・" ・・・ />
030 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します)
031 *
032 * ●Tag定義:
033 *   <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 *   >   ... Body ...
045 *   </og:comment>
046 *
047 * ●使用例
048 *     <og:comment
049 *         title   = "変更概要"
050 *         version = "001"
051 *         date    = "YYYY/MM/DD"
052 *         author  = "Y.MATSUI(Hybs) "
053 *         rdcCode = "RDC00001"
054 *         text    = "当処理中の変更内容を記述します。"
055 *     />
056 *
057 *     <og:comment
058 *         title   = "変更概要"
059 *         version = "001"
060 *         date    = "YYYY/MM/DD"
061 *         author  = "Y.MATSUI(Hybs) "
062 *         rdcCode = "RDC00001"
063 *         build   = "ビルド番号"           (必須属性では有りません。)
064 *     >
065 *       当処理中の変更内容を記述します。
066 *     </og:comment>
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}