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.report;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.fukurou.util.LogWriter;
020    import org.opengion.fukurou.util.StringUtil;
021    import org.opengion.fukurou.util.ApplicationInfo;
022    import org.opengion.fukurou.db.DBUtil;
023    
024    /**
025     * 【DB登録】EXCEL取込機è?のæœ?µ‚å?ç�?�§ある、テンポラリãƒ??ブルからå�?¨®アプリ側の
026     * 本番ãƒ??ブルへのãƒ??タ取込処ç�??ための、PL/SQL をコールしますã?
027     * 実際の呼び出しã?、{ call 帳票IDP.帳票ID( 結果(STATUS),å†?®¹(ERR_CODE),PGID,要求番号 ) }
028     * とã�?�† PL/SQL ã‚?Call しますã?
029     * 第?‘引数、第?’引数は、OUT属æ?で、結果(STATUS)とエラー時ã?å†?®¹(ERR_CODE)を返しますã?
030     * 第?“引数は、起動å?PGIDですã? 第?”引数は、å?ç�?‚’行う要求番号ですã?
031     * 結果(STATUS)は、正常ならã?ã€? を返してくださいã€?
032     *
033     * @og.rev 3.8.0.0 (2005/06/07) 新規追åŠ?
034     * @og.group 帳票シスãƒ?ƒ 
035     *
036     * @version  4.0
037     * @author   Kazuhiko Hasegawa
038     * @since    JDK5.0,
039     */
040    public class ProgramRun {
041    
042            private final StringBuilder errMsg = new StringBuilder();
043            private static final String CR     = HybsSystem.CR ;
044    
045            private final String    SYSTEM_ID       ;
046            private final String    YKNO            ;
047            private final String    LISTID          ;
048            private final boolean   DEBUG           ;       // 3.8.5.0 (2006/03/06) ãƒ?ƒ�ãƒ?‚°用のフラグを追åŠ?
049    
050            private String          sqlCmd  = null;
051    
052            /** コネクションにアプリケーションæƒ??を追記するかどã�?�‹æŒ?®?*/
053            public static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
054    
055            // 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
056            private final ApplicationInfo appInfo;
057    
058            /**
059             * コンストラクター
060             *
061             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
062             *
063             * @param system_id シスãƒ?ƒ ID
064             * @param ykno      要求番号
065             * @param listId    帳票ID
066             * @param debug ãƒ?ƒ�ãƒ?‚°フラグè¨?ª?
067             */
068            public ProgramRun( final String system_id, final String ykno, final String listId, final boolean debug ) {
069                    SYSTEM_ID       = system_id;
070                    YKNO            = ykno;
071                    LISTID          = listId;
072                    DEBUG           = debug;
073    
074                    // 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
075                    if( USE_DB_APPLICATION_INFO ) {
076                            appInfo = new ApplicationInfo();
077                            // ユーザーID,IPアドレス,ホスト名
078                            appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
079                            // 画面ID,操ä½?プログラãƒ?D
080                            appInfo.setModuleInfo( "ProgramRun",YKNO,LISTID );
081                    }
082                    else {
083                            appInfo = null;
084                    }
085            }
086    
087            /**
088             * レポã?トå?力å?ç�?‚’実行しますã?
089             *
090             * @return 結果 [true:正常/false:異常]
091             */
092            public boolean execute() {
093                    System.out.print( "ProgramRun [" + SYSTEM_ID + "]... " );
094                    boolean flag;
095    
096                    try {
097                            flag = makeSQLCommand();
098                            if( flag ) { System.out.print( " MK SQL," ); }
099    
100                            if( flag ) {
101                                    flag = programRun();
102                                    if( flag ) { System.out.print( " PG RUN," ); }
103                            }
104                            System.out.println( " End." );
105                    }
106                    catch( Throwable ex ) {
107                            errMsg.append( "ProgramRun Execute Error! " ).append( CR ) ;
108                            errMsg.append( "==============================" ).append( CR );
109                            errMsg.append( StringUtil.stringStackTrace( ex ) ) ;
110                            errMsg.append( CR ) ;
111                            flag = false;
112                    }
113    
114                    return flag ;
115            }
116    
117            /**
118             * PLSQL の call コマンドã?æ–?­—å?を作æ?しますã?
119             * { call 帳票ID+P.帳票ID( 結果(STATUS),å†?®¹(ERR_CODE),PGID,要求番号 ) } に対応すã‚?
120             * { call 帳票IDP.帳票ID( ?,?,?,? ) } æ–?­—å?を作æ?しますã?
121             *
122             * @return 結果 [true:正常/false:異常]
123             */
124            private boolean makeSQLCommand() {
125                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
126    
127                    buf.append( "{ call " ).append( LISTID );
128                    buf.append( "P." ).append( LISTID );
129                    buf.append( "( ?,?,?,? ) }" );
130    
131                    sqlCmd = buf.toString();
132                    if( DEBUG ) {
133                            System.out.println();
134                            System.out.println( sqlCmd );
135                    }
136    
137                    return true;
138            }
139    
140            /**
141             * 実際のPL/SQL コール処ç�?‚’行いますã?
142             * { call 帳票IDP.帳票ID( 結果(STATUS),å†?®¹(ERR_CODE),PGID,要求番号 ) }
143             * とã�?�† PL/SQL ã‚?Call しますã?
144             * 第?‘引数、第?’引数は、OUT属æ?で、結果(STATUS)とエラー時ã?å†?®¹(ERR_CODE)ã‚?
145             * 返してください。第?“引数は、起動å?PGIDですã?
146             * 結果(STATUS)は、正常ならã?ã€? を返してくださいã€?
147             *
148             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
149             *
150             * @return 結果 [true:正常/false:異常]
151             */
152            private boolean programRun() {
153    
154                    String[] args = new String[] { "ProgRUN",YKNO };
155                    String[] rtn = DBUtil.dbCallExecute( sqlCmd,args,appInfo );     // 3.8.7.0 (2006/12/15)
156    
157                    boolean flag = false;
158                    if( rtn != null && rtn.length == 2 ) {
159                            String rtnCode = rtn[0];
160                            String rtnMsg  = rtn[1];
161                            if( "0".equals( rtnCode ) ) {           // 正常
162                                    flag = true;
163                            }
164                            else {
165                                    errMsg.append( "PL/SQL=[" ).append( sqlCmd ).append( "] " );
166                                    errMsg.append( "YKNO=[" ).append( YKNO ).append( "] " );
167                                    errMsg.append( "LISTID=[" ).append( LISTID ).append( "] " );
168                                    errMsg.append( rtnCode ).append( ":" ).append( rtnMsg );
169                                    errMsg.append( CR );
170                                    LogWriter.log( errMsg.toString() );
171                            }
172                    }
173                    return flag;
174            }
175    
176            /**
177             * エラーが存在した場合に、エラーメãƒ?‚»ージを返しますã?
178             *
179             * @return エラーメãƒ?‚»ージ String
180             */
181            public String getErrMsg() {
182                    return errMsg.toString();
183            }
184    }