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                            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    }