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 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.hayabusa.common.HybsSystemException; 019 020import static org.opengion.fukurou.util.StringUtil.nval ; 021import org.opengion.fukurou.util.StringUtil; 022import org.opengion.fukurou.process.HybsProcess; 023import org.opengion.fukurou.process.Process_DBParam; 024 025import java.io.ObjectOutputStream; 026import java.io.ObjectInputStream; 027import 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 * ●形式:<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 */ 080public 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 String errMsg = "<b>" + getTagName() + "タグは、MainProcessTagの内側(要素)に記述してください。</b>" 111 + "processID=" + processID ; 112 throw new HybsSystemException( errMsg ); 113 } 114 115 // 4.3.1.1 (2008/09/04) DBParam 使用時は、専用の初期化メソッドを呼ぶ 116 if( "DBParam".equals( processID ) ) { 117 process = new Process_DBParam(); 118 ((Process_DBParam)process).setAppInfo( getApplicationInfo() ); 119 } 120 else { 121 process = (HybsProcess)StringUtil.newInstance( PRCS + processID ); 122 } 123 124 mainProcess.addProcess( process ); 125 126 return ( EVAL_BODY_BUFFERED ); // Body を評価する 127 } 128 129 /** 130 * タグリブオブジェクトをリリースします。 131 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 132 * 133 */ 134 @Override 135 protected void release2() { 136 super.release2(); 137 processID = null; 138 process = null; 139 } 140 141 /** 142 * 【TAG】リクエスト情報 に登録するキーをセットします。 143 * 144 * @og.tag 145 * processID は、org.opengion.fukurou.process.HybsProcess インターフェースを実装した 146 * Process_**** クラスの **** を与えます。 147 * これらは、HybsProcess インターフェースを継承したサブクラスである必要があります。 148 * 標準で、org.opengion.fukurou.process 以下の Process_**** クラスが、Process_**** 宣言 と 149 * して、定義されています。 150 * 属性クラス定義の {@link org.opengion.fukurou.process.HybsProcess HybsProcess} を参照願います。 151 * {@og.doc03Link process Process_**** クラス} 152 * 153 * @param pid リクエスト情報に登録するキー 154 * @see org.opengion.fukurou.process.HybsProcess HybsProcessのサブクラス 155 */ 156 public void setProcessID( final String pid ) { 157 processID = nval( getRequestParameter( pid ),processID ) ; 158 } 159 160 /** 161 * 親クラスに登録するキーをセットします。 162 * 163 * @param key 登録するキー 164 * @param value 登録する値 165 */ 166 protected void addParam( final String key,final String value ) { 167 process.putArgument( key,value ); 168 } 169 170 /** 171 * シリアライズ用のカスタムシリアライズ書き込みメソッド 172 * 173 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 174 * @serialData 一部のオブジェクトは、シリアライズされません。 175 * 176 * @param strm ObjectOutputStreamオブジェクト 177 * @throws IOException 入出力エラーが発生した場合 178 */ 179 private void writeObject( final ObjectOutputStream strm ) throws IOException { 180 strm.defaultWriteObject(); 181 } 182 183 /** 184 * シリアライズ用のカスタムシリアライズ読み込みメソッド 185 * 186 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 187 * 188 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 189 * @serialData 一部のオブジェクトは、シリアライズされません。 190 * 191 * @param strm ObjectInputStreamオブジェクト 192 * @see #release2() 193 * @throws IOException シリアライズに関する入出力エラーが発生した場合 194 * @throws ClassNotFoundException クラスを見つけることができなかった場合 195 */ 196 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 197 strm.defaultReadObject(); 198 } 199 200 /** 201 * このオブジェクトの文字列表現を返します。 202 * 基本的にデバッグ目的に使用します。 203 * 204 * @return このクラスの文字列表現 205 */ 206 @Override 207 public String toString() { 208 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 209 .println( "VERSION" ,VERSION ) 210 .println( "processID" ,processID ) 211 .fixForm().toString() ; 212 } 213}