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 }