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.HybsSystem;
019 import org.opengion.hayabusa.common.HybsSystemException;
020 import org.opengion.fukurou.util.HybsEntry;
021
022 import org.opengion.fukurou.util.StringUtil ;
023 import static org.opengion.fukurou.util.StringUtil.nval ;
024
025 /**
026 * WriteTableTag にパラメーターを渡す為のタグクラスです?
027 *
028 * writeTable タグに対して、EXEC_SQL ????tableName??を付加することができます?
029 * WriteTable の、writerClass によって、使用できるキーが異なります?
030 * writerClass="XML"
031 * ??TableName ?XML 形式? ROWSET の table 属?になります?
032 * ??First ?最初に記載して、?期????タクリア?を実行させる、EXEC_SQL ??になります?
033 * ??Last ?最後に記載して??目の設?整合?登録)を行う、EXEC_SQL ??になります?
034 * ??MergeSql ?このSQL? UPDATEして、結果が0件ならINSERTを行う、MERGE_SQL ??になります?
035 * writerClass="JSON"
036 * ??JsonName ?JSON形式で??列をオブジェクトとしてまとめる場合に使?す?
037 * ??LowerCase ?カラ?(=パラメータ?を小文字にする場合?true をセ?しま?初期値:false)?
038 * writerClass="CalcDef"
039 * ??Size ?レコード???タ件数(初期値:25)
040 *
041 * 値は、value 属?で?するか、なければ BODY 部に記述します?
042 *
043 * tableName??は、XMLファイルのROWSET属?にセ?することで、XMLファイルの登録??ブル名を
044 * ?することができます?
045 * EXEC_SQL ??とは、タブ区?ファイルやXML形式ファイルの先?(key="First")
046 * また?、最?key="Last")に、SQL?記述することで、ファイル取り込み時?
047 * 前???後??処?る為の??です?
048 * key="MergeSql" で、MERGE_SQL ??をセ?できます?MERGE_SQL を登録すると?
049 * そ?SQL?、UPDATEして、結果が0件ならINSERTを行います?
050 *
051 * こ???は、?件登録できるため??常の writeTable タグに属?を追?ると?
052 * ?になるため??登録できる用に、?部にタグを持てる構?にします?
053 *
054 * @og.formSample
055 * ●形式?
056 * <og:writeTableParam key="[First|Last|TableName]" >
057 * delete from GE12 where SYSTEM_ID='**' and KBSAKU='0'
058 * </og:writeTableParam
059 *
060 * ●body?あ?
061 *
062 * ●Tag定義??
063 * <og:writeTableParam
064 * key ○?TAG】パラメータとして渡すキー??([First|Last|MergeSql|TableName|Size|JsonName|LowerCase])を指定しま???)
065 * value 【TAG】パラメータとして渡す設定?を指定しま?初期値:null)
066 * caseKey 【TAG】このタグ自体を利用するかど?の条件キーを指定しま?初期値:null)
067 * caseVal 【TAG】このタグ自体を利用するかど?の条件値を指定しま?初期値:null)
068 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
069 * > ... Body ...
070 * </og:writeTableParam>
071 *
072 * ●使用?
073 * <og:writeTable ????? >
074 * <og:writeTableParam
075 * key = "Tablename" value="GE12"
076 * />
077 * <og:writeTableParam
078 * key = "First" First:??に登録
079 * >
080 * insert into GE12bk
081 * select * from GE12
082 * where SYSTEM_ID='**'
083 * </og:writeTableParam
084 * <og:writeTableParam
085 * key = "First" First:の?番目に登録
086 * >
087 * delete from GE12 where SYSTEM_ID='**' and KBSAKU='0'
088 * </og:writeTableParam
089 * <og:writeTableParam
090 * key = "Last" Last:?に登録
091 * >
092 * update GE12 set XXXX='YYYY' where SYSTEM_ID='**' and KBSAKU='0'
093 * </og:writeTableParam
094 * </og:writeTableParam
095 *
096 * @og.rev 4.0.0.0 (2005/01/31) 新規作?
097 * @og.rev 5.6.6.1 (2013/07/12) MERGE_SQL 対?
098 * @og.group ファイル出?
099 *
100 * @version 4.0
101 * @author Kazuhiko Hasegawa
102 * @since JDK5.0,
103 */
104 public class WriteTableParamTag extends CommonTagSupport {
105 //* こ?プログラ??VERSION??を設定します? {@value} */
106 private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
107
108 private static final long serialVersionUID = 566120130712L ;
109
110 // private static final String[] KEY_LIST = new String[] { "First","Last","TableName" };
111 // private static final String[] KEY_LIST = new String[] { "First","Last","TableName","Size" }; // 5.1.6.0 (2010/05/01)
112 // private static final String[] KEY_LIST = new String[] { "First","Last","TableName","Size","JsonName","LowerCase" }; // 5.6.0.3 (2012/01/24)
113 private static final String[] KEY_LIST = new String[] { "First","Last","MergeSql|","TableName","Size","JsonName","LowerCase" }; // 5.6.6.1 (2013/07/12)
114
115 private String key = null; // "First","Last","MergeSql|","TableName","Size","JsonName","LowerCase" のどれか
116 private String value = null ; // 実行するSQL??
117
118 /**
119 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
120 *
121 * @og.rev 5.6.6.1 (2013/07/12) caseKey 、caseVal 属?対?
122 *
123 * @return 後続????
124 */
125 @Override
126 public int doStartTag() {
127 // 5.6.6.1 (2013/07/12) caseKey 、caseVal 属?対?
128 if( useTag() ) {
129 if( value == null ) { return( EVAL_BODY_BUFFERED ); } // Body を評価する? extends BodyTagSupport ?
130 // if( value != null ) {
131 // return(SKIP_BODY); // Body を評価しな?
132 // }
133 // else {
134 // return( EVAL_BODY_BUFFERED ); // Body を評価する? extends BodyTagSupport ?
135 // }
136 }
137 return ( SKIP_BODY ); // Body を評価しな?
138 }
139
140 /**
141 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします?
142 *
143 * @return 後続????(SKIP_BODY)
144 */
145 @Override
146 public int doAfterBody() {
147 value = getBodyString().trim();
148 return(SKIP_BODY);
149 }
150
151 /**
152 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
153 *
154 * @og.rev 5.6.6.1 (2013/07/12) caseKey 、caseVal 属?対?
155 *
156 * @return 後続????
157 */
158 @Override
159 public int doEndTag() {
160 debugPrint(); // 4.0.0 (2005/02/28)
161 // 5.6.6.1 (2013/07/12) caseKey 、caseVal 属?対?
162 if( useTag() ) {
163 WriteTableTag writeTable = (WriteTableTag)findAncestorWithClass( this,WriteTableTag.class );
164 if( writeTable == null ) {
165 String errMsg = "<b>こ?タグは、WriteTableTagの??(要?に記述してください?/b>";
166 throw new HybsSystemException( errMsg );
167 }
168
169 writeTable.addParam( new HybsEntry( key,value ) );
170 }
171 return(EVAL_PAGE);
172 }
173
174 /**
175 * タグリブオブジェクトをリリースします?
176 * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
177 *
178 */
179 @Override
180 protected void release2() {
181 super.release2(); // 3.5.6.0 (2004/06/18) 追?抜けて?)
182 key = null; // KEY_LIST のどれか
183 value = null ; // 実行するSQL??
184 }
185
186 /**
187 * 【TAG】パラメータとして渡すキー??([First|Last|MergeSql||TableName|Size|JsonName|LowerCase])を指定しま?
188 *
189 * @og.tag
190 * WriteTable に渡すパラメータのキー??です?
191 * writerClass によって、使用できるキーが異なります?
192 * writerClass="XML"
193 * ??TableName ?XML 形式? ROWSET の table 属?になります?
194 * ??First ?最初に記載して、?期????タクリア?を実行させる、EXEC_SQL ??になります?
195 * ??Last ?最後に記載して??目の設?整合?登録)を行う、EXEC_SQL ??になります?
196 * ??MergeSql ?このSQL? UPDATEして、結果が0件ならINSERTを行う、MERGE_SQL ??になります?
197 * writerClass="JSON"
198 * ??JsonName ?JSON形式で??列をオブジェクトとしてまとめる場合に使?す?
199 * ??LowerCase ?カラ?(=パラメータ?を小文字にする場合?true をセ?しま?初期値:false)?
200 * writerClass="CalcDef"
201 * ??Size ?レコード???タ件数(初期値:25)
202 *
203 * 値は、value 属?で?するか、なければ BODY 部に記述します?
204 *
205 * @param prmKey パラメータとして渡すキー??([First|Last|MergeSql||TableName|Size|JsonName|LowerCase])
206 */
207 public void setKey( final String prmKey ) {
208 key = nval( getRequestParameter( prmKey ),key );
209 if( ! check( key, KEY_LIST ) ) {
210 String errMsg = "??値は、セ?できません。key=[" + key + "]" + HybsSystem.CR
211 + "次の中から?してください?" + StringUtil.array2csv( KEY_LIST ) + ")" ;
212 throw new HybsSystemException( errMsg );
213 }
214 }
215
216 /**
217 * 【TAG】パラメータとして渡す設定?を指定しま?初期値:null)?
218 *
219 * @og.tag
220 * WriteTable に渡すパラメータの設定?です?
221 * First と Last を指定した?合?、XML 形式で出力す?EXEC_SQL ??になります?
222 * TableName の場合?、XML 形式? ROWSET の table 属?になります?
223 * 値は、value 属?で?するか、なければ BODY 部に記述します?
224 * BODY 部に記述された?合?、文字??trim() します?
225 * 設定?は、value 属?が優先です?ここの値が?null の場合??
226 * BODY 要?値として使用します?
227 *
228 * @param val パラメータとして渡す設定?
229 */
230 public void setValue( final String val ) {
231 value = nval( getRequestParameter( val ),value );
232 }
233
234 /**
235 * こ?オブジェクト???表現を返します?
236 * 基本???目?使用します?
237 *
238 * @return こ?クラスの??表現
239 */
240 @Override
241 public String toString() {
242 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
243 .println( "VERSION" ,VERSION )
244 .println( "key" ,key )
245 .println( "value" ,value )
246 .println( "KEY_LIST" ,KEY_LIST )
247 .println( "Other..." ,getAttributes().getAttribute() )
248 .fixForm().toString() ;
249 }
250 }