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 */
016 package org.opengion.hayabusa.taglib;
017
018 import org.opengion.hayabusa.common.HybsSystemException;
019 import static org.opengion.fukurou.util.StringUtil.nval ;
020
021 import java.io.ObjectOutputStream;
022 import java.io.ObjectInputStream;
023 import java.io.IOException;
024
025 /**
026 * ProcessTag に対して、引数(パラメータ)を渡す?入れ子?子クラスです?
027 *
028 * @og.formSample
029 * ●形式?lt;og:param key="ZZZ" value="AAA,BBB" />
030 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま?
031 *
032 * ●Tag定義??
033 * <og:param
034 * key ○?TAG】リクエスト情報 に登録するキーをセ?しま???)?
035 * value 【TAG】リクエスト情報 に登録する値をセ?しま?
036 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
037 * > ... Body ...
038 * </og:param>
039 *
040 * ●使用?
041 * ??変数の渡し方
042 * <og:process ????? >
043 * <og:param key="AAA" value="111" />
044 * <og:param key="BBB" value="222" />
045 * <og:param key="CCC" value="333" />
046 * <og:param key="DDD" value="444" />
047 * </og:process >
048 *
049 * BODY 部に記述した変数の渡し方
050 * <og:process ????? >
051 * <og:param key="SQL" >
052 * SELECT * FROM DUAL
053 * </og:param>
054 * </og:process >
055 *
056 * @og.group 画面表示
057 *
058 * @version 4.0
059 * @author Kazuhiko Hasegawa
060 * @since JDK5.0,
061 */
062 public class ParamTag extends CommonTagSupport {
063 //* こ?プログラ??VERSION??を設定します? {@value} */
064 private static final String VERSION = "4.0.0.0 (2006/09/31)" ;
065
066 private static final long serialVersionUID = 400020060931L ;
067
068 private String key = null;
069 private String value = null;
070
071 /**
072 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
073 *
074 * @return 後続????( EVAL_BODY_BUFFERED )
075 */
076 @Override
077 public int doStartTag() {
078 return ( EVAL_BODY_BUFFERED ); // Body を評価する
079 }
080
081 /**
082 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします?
083 *
084 * @return 後続????(SKIP_BODY)
085 */
086 @Override
087 public int doAfterBody() {
088 if( value == null || value.length() <= 0 ) {
089 value = getBodyString();
090 }
091
092 return ( SKIP_BODY );
093 }
094
095 /**
096 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
097 *
098 * @return 後続????
099 */
100 @Override
101 public int doEndTag() {
102 debugPrint(); // 4.0.0 (2005/02/28)
103 ProcessTag process = (ProcessTag)findAncestorWithClass( this,ProcessTag.class );
104 if( process == null ) {
105 // String errMsg = "<b>こ?タグは、ProcessTag の??(要?に記述してください?/b>";
106 String errMsg = "<b>" + getTagName() + "タグは、ProcessTag の??(要?に記述してください?/b>";
107 throw new HybsSystemException( errMsg );
108 }
109
110 process.addParam( key,value );
111
112 return(EVAL_PAGE);
113 }
114
115 /**
116 * タグリブオブジェクトをリリースします?
117 * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
118 *
119 */
120 @Override
121 protected void release2() {
122 super.release2();
123 key = null;
124 value = null;
125 }
126
127 /**
128 * 【TAG】リクエスト情報 に登録するキーをセ?します?
129 *
130 * @og.tag リクエスト情報 に登録するキーをセ?します?
131 *
132 * @param key1 リクエスト情報に登録するキー
133 */
134 public void setKey( final String key1 ) {
135 key = nval( getRequestParameter( key1 ),key ) ;
136 }
137
138 /**
139 * 【TAG】リクエスト情報 に登録する値をセ?します?
140 *
141 * @og.tag リクエスト情報 に登録する値をセ?します?
142 *
143 * @param val リクエスト情報に登録する値
144 */
145 public void setValue( final String val ) {
146 value = nval( getRequestParameter( val ),value );
147 }
148
149 /**
150 * シリアライズ用のカスタ?リアライズ書き込みメソ?
151 *
152 * @og.rev 4.0.0.0 (2006/09/31) 新規追?
153 * @serialData ?のオブジェクト?、シリアライズされません?
154 *
155 * @param strm ObjectOutputStreamオブジェク?
156 * @throws IOException 入出力エラーが発生した??
157 */
158 private void writeObject( final ObjectOutputStream strm ) throws IOException {
159 strm.defaultWriteObject();
160 }
161
162 /**
163 * シリアライズ用のカスタ?リアライズ読み込みメソ?
164 *
165 * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します?
166 *
167 * @og.rev 4.0.0.0 (2006/09/31) 新規追?
168 * @serialData ?のオブジェクト?、シリアライズされません?
169 *
170 * @param strm ObjectInputStreamオブジェク?
171 * @see #release2()
172 * @throws IOException シリアライズに関する入出力エラーが発生した??
173 * @throws ClassNotFoundException クラスを見つけることができなかった??
174 */
175 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
176 strm.defaultReadObject();
177 }
178
179 /**
180 * こ?オブジェクト???表現を返します?
181 * 基本???目?使用します?
182 *
183 * @return こ?クラスの??表現
184 */
185 @Override
186 public String toString() {
187 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
188 .println( "VERSION" ,VERSION )
189 .println( "key" ,key )
190 .println( "value" ,value )
191 .fixForm().toString() ;
192 }
193 }