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 }