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        /**
115         * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
116         *
117         * @og.rev 2.2.0.0 (2002/12/17) 中国語(国際化)対応 エンコードの取得方法変更
118         * @og.rev 3.0.0.0 (2002/12/25) StringUtil#changeString 廃止
119         * @og.rev 3.1.1.0 (2003/03/28) ボディの内容を取得する処理を、CommonTagSupport で行う。
120         *
121         * @return      後続処理の指示(SKIP_BODY)
122         */
123        @Override
124        public int doAfterBody() {
125                text = getBodyString();
126
127                return SKIP_BODY ;
128        }
129
130        /**
131         * タグリブオブジェクトをリリースします。
132         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
133         *
134         * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
135         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
136         * @og.rev 3.3.2.0 (2003/07/07) 設計変更要求コード(rdcCode)属性を追加。
137         * @og.rev 3.8.9.3 (2007/08/31) PGID(pgid)、システム名称(system)属性を追加。
138         *
139         */
140        @Override
141        protected void release2() {
142                super.release2();
143                rdcCode         = null;
144                title           = null;
145                version         = null;
146                build           = null;
147                date            = null;
148                author          = null;
149                text            = null;
150                pgid            = null; // 3.8.9.3
151                system          = null; // 3.8.9.3
152        }
153
154        /**
155         * 【TAG】設計変更要求コードを設定します。
156         *
157         * @og.tag コメントの設計変更要求コードを設定します。
158         *
159         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
160         *
161         * @param   val 設計変更要求コード
162         */
163        public void setRdcCode( final String val ) {
164                rdcCode = val;
165        }
166
167        /**
168         * 【TAG】タイトルを設定します。
169         *
170         * @og.tag コメントのタイトルを設定します。
171         *
172         * @og.rev 2.2.0.0 (2002/12/17) 中国語(国際化)対応 エンコードの取得方法変更
173         * @og.rev 3.0.0.0 (2002/12/25) StringUtil#changeString 廃止
174         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
175         *
176         * @param   val タイトル
177         */
178        public void setTitle( final String val ) {
179                title = val;
180        }
181
182        /**
183         * 【TAG】バージョンを設定します。
184         *
185         * @og.tag コメントのバージョンを設定します
186         *
187         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
188         *
189         * @param   val バージョン
190         */
191        public void setVersion( final String val ) {
192                version = val;
193        }
194
195        /**
196         * 【TAG】ビルド番号を設定します。
197         *
198         * @og.tag コメントのビルド番号を設定します
199         *
200         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
201         *
202         * @param   val ビルド番号
203         */
204        public void setBuild( final String val ) {
205                build = val;
206        }
207
208        /**
209         * 【TAG】変更日付を設定します。
210         *
211         * @og.tag コメントの変更日付を設定します
212         *
213         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
214         *
215         * @param   val 変更日付
216         */
217        public void setDate( final String val ) {
218                date = val;
219        }
220
221        /**
222         * 【TAG】変更者を設定します。
223         *
224         * @og.tag コメントの変更者を設定します
225         *
226         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
227         *
228         * @param   val 変更者
229         */
230        public void setAuthor( final String val ) {
231                author = val;
232        }
233
234        /**
235         * 【TAG】内容を設定します。
236         *
237         * @og.tag コメントの内容を設定します。
238         * ここでの内容は、BODY部に記述することも可能です。
239         * 両方に記述した場合は、text属性を優先します。
240         *
241         * @og.rev 3.3.1.0 (2003/06/24) text 属性追加、パラメータ変数を使えないように変更。
242         *
243         * @param   val コメントの内容
244         */
245        public void setText( final String val ) {
246                text = val;
247        }
248
249        /**
250         * 【TAG】プログラムIDを指定します。
251         *
252         * @og.tag コメントのプログラムIDを設定します。
253         *
254         * @param   val プログラムID
255         */
256        public void setPgid( final String val ) {
257                pgid = val;
258        }
259
260        /**
261         * 【TAG】システム名称を設定します。
262         *
263         * @og.tag コメントのシステム名称を設定します。
264         *
265         * @param   val システム名称
266         */
267        public void setSystem( final String val ) {
268                system = val;
269        }
270
271        /**
272         * このオブジェクトの文字列表現を返します。
273         * 基本的にデバッグ目的に使用します。
274         *
275         * @return このクラスの文字列表現
276         * @og.rtnNotNull
277         */
278        @Override
279        public String toString() {
280                return ToString.title( this.getClass().getName() )
281                                .println( "VERSION"             ,VERSION        )
282                                .println( "rdcCode"             ,rdcCode        )
283                                .println( "title"               ,title          )
284                                .println( "version"             ,version        )
285                                .println( "build"               ,build          )
286                                .println( "date"                ,date           )
287                                .println( "author"              ,author         )
288                                .println( "text"                ,text           )
289                                .println( "pgid"                ,pgid           )
290                                .println( "system"              ,system         )
291                                .println( "Other..."    ,getAttributes().getAttribute() )
292                                .fixForm().toString() ;
293        }
294}