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 020 import static org.opengion.fukurou.util.StringUtil.nval ; 021 import org.opengion.fukurou.util.StringUtil; 022 import org.opengion.fukurou.process.HybsProcess; 023 import org.opengion.fukurou.process.Process_DBParam; 024 025 import java.io.ObjectOutputStream; 026 import java.io.ObjectInputStream; 027 import java.io.IOException; 028 029 /** 030 * MainProcess で実行される Processクラスを構築します? 031 * 032 * 親クラス(Process)は、org.opengion.fukurou.process パッケージの HybsProcess 033 * インターフェースを実?たクラスの、Process_****.java の **** 部??します? 034 * 共通的な パラメータは、このTagクラスに実?ますが、それぞれ?個別に?な 035 * パラメータは、ParamTag を使用して?します? 036 * こ?タグは、MainProcess タグの?にのみ、記述可能です? 037 * 038 * @og.formSample 039 * ●形式?lt;og:process processID="ZZZ" > 040 * <og:param key="AAA" value="111" /> 041 * </og:process > 042 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま? 043 * 044 * ●Tag定義?? 045 * <og:process 046 * processID ○?TAG】リクエスト情報 に登録するキーをセ?します?(??) 047 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 048 * > ... Body ... 049 * </og:process> 050 * 051 * ●使用? 052 * ??変数の渡し方 053 * <og:mainProcess > 054 * <og:process processID="DBReader" > 055 * <og:param key="dbid" value="FROM" /> 056 * <og:param key="sql" value="select * from GE02" /> 057 * </og:process > 058 * <og:process processID="DBWriter" > 059 * <og:param key="dbid" value="TO" /> 060 * <og:param key="table" value="GE02" /> 061 * </og:process > 062 * </og:mainProcess > 063 * 064 * BODY 部に記述した変数の渡し方 065 * <og:process processID="DBReader" > 066 * <og:param key="SQL" > 067 * SELECT COUNT(*) FROM GEA03 068 * WHERE SYSTEM_ID=[SYSTEM_ID] 069 * AND CLM=[CLM] 070 * AND FGJ = '1' 071 * </og:param> 072 * </og:process > 073 * 074 * @og.group リアルバッチ系 075 * 076 * @version 4.0 077 * @author Kazuhiko Hasegawa 078 * @since JDK5.0, 079 */ 080 public class ProcessTag extends CommonTagSupport { 081 //* こ?プログラ??VERSION??を設定します? {@value} */ 082 private static final String VERSION = "4.3.1.1 (2008/09/04)" ; 083 084 private static final long serialVersionUID = 431120080904L ; 085 086 private static final String PRCS = "org.opengion.fukurou.process.Process_" ; 087 088 private String processID = null; 089 private transient HybsProcess process = null; 090 091 /** 092 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします? 093 * 094 * @og.rev 4.3.1.1 (2008/09/04) DBParam 使用時?、専用の初期化メソ?を呼ぶ 095 * 096 * @return 後続????( EVAL_BODY_BUFFERED ) 097 */ 098 @Override 099 public int doStartTag() { 100 // process = (HybsProcess)StringUtil.newInstance( PRCS + processID ); 101 // if( process == null ) { 102 // String errMsg = "<b>?? processID を持つ HybsProcess が見つかりません?/b>" 103 // + "processID=" + processID ; 104 // throw new HybsSystemException( errMsg ); 105 // } 106 107 MainProcessTag mainProcess = (MainProcessTag)findAncestorWithClass( this,MainProcessTag.class ); 108 if( mainProcess == null ) { 109 String errMsg = "<b>こ?タグは、MainProcessTagの??(要?に記述してください?/b>" 110 + "processID=" + processID ; 111 throw new HybsSystemException( errMsg ); 112 } 113 114 // 4.3.1.1 (2008/09/04) DBParam 使用時?、専用の初期化メソ?を呼ぶ 115 if( "DBParam".equals( processID ) ) { 116 process = new Process_DBParam(); 117 ((Process_DBParam)process).setAppInfo( getApplicationInfo() ); 118 } 119 else { 120 process = (HybsProcess)StringUtil.newInstance( PRCS + processID ); 121 } 122 123 mainProcess.addProcess( process ); 124 125 return ( EVAL_BODY_BUFFERED ); // Body を評価する 126 } 127 128 /** 129 * タグリブオブジェクトをリリースします? 130 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 131 * 132 */ 133 @Override 134 protected void release2() { 135 super.release2(); 136 processID = null; 137 process = null; 138 } 139 140 /** 141 * 【TAG】リクエスト情報 に登録するキーをセ?します? 142 * 143 * @og.tag 144 * processID は、org.opengion.fukurou.process.HybsProcess インターフェースを実?? 145 * Process_**** クラスの **** を与えます? 146 * これら?、HybsProcess インターフェースを継承したサブクラスである?があります? 147 * 標準で、org.opengion.fukurou.process 以下? Process_**** クラスが?Process_**** 宣?と 148 * して、定義されて?す? 149 * 属?クラス定義の {@link org.opengion.fukurou.process.HybsProcess HybsProcess} を参照願います? 150 * {@og.doc03Link process Process_**** クラス} 151 * 152 * @param pid リクエスト情報に登録するキー 153 * @see org.opengion.fukurou.process.HybsProcess HybsProcessのサブクラス 154 */ 155 public void setProcessID( final String pid ) { 156 processID = nval( getRequestParameter( pid ),processID ) ; 157 } 158 159 /** 160 * 親クラスに登録するキーをセ?します? 161 * 162 * @param key 登録するキー 163 * @param value 登録する値 164 */ 165 protected void addParam( final String key,final String value ) { 166 process.putArgument( key,value ); 167 } 168 169 /** 170 * シリアライズ用のカスタ?リアライズ書き込みメソ? 171 * 172 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 173 * @serialData 174 * 175 * @param strm ObjectOutputStreamオブジェク? 176 */ 177 private void writeObject( final ObjectOutputStream strm ) throws IOException { 178 strm.defaultWriteObject(); 179 } 180 181 /** 182 * シリアライズ用のカスタ?リアライズ読み込みメソ? 183 * 184 * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します? 185 * 186 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 187 * @serialData 188 * 189 * @param strm ObjectInputStreamオブジェク? 190 * @see #release2() 191 */ 192 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 193 strm.defaultReadObject(); 194 } 195 196 /** 197 * こ?オブジェクト???表現を返します? 198 * 基本???目?使用します? 199 * 200 * @return こ?クラスの??表現 201 */ 202 @Override 203 public String toString() { 204 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 205 .println( "VERSION" ,VERSION ) 206 .println( "processID" ,processID ) 207 .fixForm().toString() ; 208 } 209 }