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