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.hayabusa.common.HybsSystemException;
020    import org.opengion.fukurou.util.StringUtil;
021    import org.opengion.fukurou.util.ApplicationInfo;
022    import org.opengion.fukurou.db.DBUtil;
023    
024    import java.io.File;
025    
026    /**
027     * DBTableModelオブジェクトをレポ?ト形式に返還するタグリブクラスです?
028     * こ?オブジェクトに???タ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて?
029     * 外部からコントロールすることで、各種形式で ??タ(DBTableModel)を表示させること?
030     * 可能です?
031     *
032     * @og.group 帳票シス?
033     *
034     * @version  4.0
035     * @author   Kazuhiko Hasegawa
036     * @since    JDK5.0,
037     */
038    public class ReportProcessing {
039    
040            private static final String FGRUN_1     = "1";  // HTMLのみ
041            private static final String FGRUN_2     = "2";  // 印刷のみ
042            private static final String FGRUN_3     = "3";  // 出力+印刷
043    
044            // 3.8.0.0 (2005/06/07) 実行方?FGRUN)に、EXCEL取込関連のフラグ値を追??
045            private static final String FGRUN_5     = "5";  // 取込のみ
046            private static final String FGRUN_6     = "6";  // PG起動?み
047            private static final String FGRUN_7     = "7";  // 取込+PG起?
048    
049            private static final String FGRUN_A     = "A";  // RFID(通常印刷) 4.0.3.0 (2007/12/26)
050            private static final String FGRUN_B     = "B";  // RFID(全印刷) 4.0.3.0 (2007/12/26)
051            private static final String FGRUN_C     = "C";  // RFID(全消去) 4.0.3.0 (2007/12/26)
052            private static final String FGRUN_D     = "D";  // RFID(連続消去) 4.1.1.0 (2008/02/21)
053    
054            private static final String CR     = HybsSystem.CR ;
055    
056            // 印刷時に使用する?ポラリフォル?
057            private final String REPORT_URL =
058                    HybsSystem.url2dir( StringUtil.nval(
059                                                                    HybsSystem.sys( "REPORT_FILE_URL" ) ,
060                                                                    HybsSystem.sys( "FILE_URL"   ) + "REPORT/" ) ) ;
061    
062            // 3.8.0.0 (2005/06/07) 追?
063            // EXCEL取込時に使用する?ポラリフォル?。ファイル名?、要求番号.xls
064            private final String EXCELIN_URL =
065                    HybsSystem.url2dir( StringUtil.nval(
066                                                                    HybsSystem.sys( "EXCEL_IN_FILE_URL" ) ,
067                                                                    HybsSystem.sys( "FILE_URL"   ) + "EXCELIN/" ) ) ;
068    
069            private StringBuilder errMsg = new StringBuilder();
070    
071            // ?DBを検索するときに、キー??
072            private String          SYSTEM_ID       = null;
073            private String          YKNO            = null;
074            private String          GROUPID         = null;
075            private String          LISTID          = null;
076            private String          JOKEN           = null;
077            private String          OUT_DIR         = null;         // 5.1.0.0 (2009/11/04) OUTDIR ?OUT_DIR
078            private String          OUT_FILE        = null;         // 5.1.0.0 (2009/11/04) OUTFILE ?OUT_FILE
079            private String          outputFile      = null;
080            private boolean         isDebug         = false;        // 3.8.5.0 (2006/03/06) ??用のフラグを追?
081    
082            // GE53 検索結果
083            private String          FGRUN           = null;
084            private String          PRTID           = null;
085            private String          LANG            = "ja";
086            private String          PRGDIR          = null;
087            private String          PRGFILE         = null;
088            private String          DMN_GRP         = null;         // 3.8.0.5 (2005/08/26)
089            private String          programFile     = null;
090    
091            // GE53 の帳票振?報を取得するSQL?す?
092            // 3.8.0.5 (2005/08/26) ??モングループ追?
093            // 4.0.0 (2005/01/31) 共?system_id を???
094            private static final String GE53_SELECT =
095                    "SELECT FGRUN,PRTID,LANG,PRGDIR,PRGFILE,SYSTEM_ID,DMN_GRP" +
096                    " FROM GE53" +
097                    " WHERE FGJ = '1'" +
098                    " AND  SYSTEM_ID IN (?,'**')" +
099                    " AND  JOKEN = ?" ;
100    
101            private static final int GE53_FGRUN             = 0;
102            private static final int GE53_PRTID             = 1;
103            private static final int GE53_LANG              = 2;
104            private static final int GE53_PRGDIR    = 3;
105            private static final int GE53_PRGFILE   = 4;
106            private static final int GE53_SYSTEM_ID = 5;
107            private static final int GE53_DMN_GRP   = 6;
108    
109            /** コネクションにアプリケーション??を追記するかど???*/
110            public static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
111    
112            // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
113            private ApplicationInfo appInfo;
114            private final String DBID = HybsSystem.sys( "RESOURCE_DBID" );          // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
115    
116            /**
117             * 処?実行します?
118             * こ?メソ?を実行すると、レポ?ト変換、レポ?ト?力を?処?て?ます?
119             *
120             * @og.rev 3.0.0.4 (2003/02/26) FGRUN ?PRT のみのとき??MODELFILE のみセ?して終?る?
121             * @og.rev 3.8.0.0 (2005/06/07) ReportConverter の initialDataSet() を呼び出して?MODELFILE をセ?する?
122             * @og.rev 3.8.0.0 (2005/06/07) EXCEL 登録機?を追?ます?
123             * @og.rev 3.8.0.0 (2005/06/07) 実行結果?boolean ではなく???(FGKAN_XX)で返します?
124             * @og.rev 3.8.0.5 (2005/08/26) ??モングループ追?
125             * @og.rev 3.8.0.9 (2005/10/17) エラーメ?ージ強?
126             * @og.rev 3.8.5.0 (2006/03/06) 標準画面出力メ?ージの変更。日付??゚リン?Dの表示
127             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
128             * @og.rev 4.0.3.0 (2007/12/26) RFID対?実行方?'A','B','C'の処??
129             * @og.rev 4.1.1.0 (2008/02/21) RFID対?実行方?'D'の処??
130             * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対?PRGDIR,PRGFILEの渡し?
131             * @og.rev 5.4.3.9 (2012/01/25) RFIDの雛形ファイル名私?旧帳票は無視す?
132             *
133             * @return 結果 (FGKAN_XX エラー時?、null)
134             */
135            public String execute() {
136                    System.out.println();
137                    System.out.println( "Process Start:" + HybsSystem.getDate( "yyyy/MM/dd HH:mm:ss" ) );
138                    System.out.println( "  SYSTEM_ID=[" + SYSTEM_ID + "] YKNO=[" + YKNO + "] GROUPID=[" + GROUPID + "]" );
139                    System.out.println( "  PRTID=[" + PRTID + "] LISTID=[" + LISTID + "] JOKEN=[" + JOKEN + "]" );
140                    String  fgkan = null;
141    
142                    // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
143                    if( USE_DB_APPLICATION_INFO ) {
144                            appInfo = new ApplicationInfo();
145                            // ユーザーID,IPアドレス,ホスト名
146                            appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
147                            // 画面ID,操?プログラ?D
148                            appInfo.setModuleInfo( "ReportProcessing",YKNO,LISTID );
149                    }
150                    else {
151                            appInfo = null;
152                    }
153    
154                    boolean flag ;
155                    try {
156                            flag = initialDataSet( appInfo );
157                            System.out.print( "INIT=" + flag + "," );
158                            String reportDir  = REPORT_URL + SYSTEM_ID + HybsSystem.FS + LISTID ;
159                            String modelFile = null;
160    
161            // ================== FGRUN_1,2,3 は、帳票印刷処?===========================================
162                            // 3.8.0.0 (2005/06/07) 実行方?FGRUN)に、EXCEL取込関連のフラグ値を追??Stringからintに変更
163                            if( flag && ( FGRUN.equals( FGRUN_1 ) || FGRUN.equals( FGRUN_2 ) || FGRUN.equals( FGRUN_3 ) ) ) {
164                                    System.out.println( "RUN_" + FGRUN );
165                                    ReportConverter rc = new ReportConverter( SYSTEM_ID,YKNO,LISTID,reportDir,LANG,isDebug );
166    
167                                    // 3.8.0.0 (2005/06/07) MODELFILE のセ?は、initialDataSet() で行う?
168                                    flag = rc.initialDataSet();
169                                    modelFile = rc.modelFile(); // 4.0.1.0 (2007/12/18)
170    
171                                    if( flag && ( FGRUN.equals( FGRUN_1 ) || FGRUN.equals( FGRUN_3 ) ) ) {
172                                            flag = rc.execute();
173                                    }
174    
175                                    if( flag ) { fgkan = GE50Access.FG_OK; }
176                                    errMsg.append( rc.getErrMsg() ).append( CR );
177                            }
178                            if( flag && ( FGRUN.equals( FGRUN_2 ) || FGRUN.equals( FGRUN_3 ) ) ) {
179                                    System.out.println( "RUN_" + FGRUN );
180                                    fgkan = null;
181                                    // 3.8.0.5 (2005/08/26) ??モングループ追?
182                                    ReportPrint rp = new ReportPrint( SYSTEM_ID,YKNO,PRTID,programFile,reportDir,modelFile,outputFile,DMN_GRP,isDebug );
183                                    flag = rp.execute();
184                                    if( flag ) { fgkan = GE50Access.FG_OK; }
185                                    errMsg.append( rp.getErrMsg() ).append( CR );
186                            }
187    
188            // ================== FGRUN_4,5,6 は、EXCEL取込処?===========================================
189                            // 3.8.0.0 (2005/06/07) EXCEL 登録機?を追?ます?
190                            String excelinDir = EXCELIN_URL + SYSTEM_ID + HybsSystem.FS + LISTID;
191                            if( flag && ( FGRUN.equals( FGRUN_5 ) || FGRUN.equals( FGRUN_7 ) ) ) {
192                                    System.out.println( "RUN_" + FGRUN );
193                                    ExcelInsert ei = new ExcelInsert( SYSTEM_ID,YKNO,LISTID,excelinDir,isDebug );
194    
195                                    flag = ei.execute();
196                                    if( flag ) { fgkan = GE50Access.FG_DBIN; }
197                                    errMsg.append( ei.getErrMsg() ).append( CR );
198                            }
199                            if( flag && ( FGRUN.equals( FGRUN_6 ) || FGRUN.equals( FGRUN_7 ) ) ) {
200                                    System.out.println( "RUN_" + FGRUN );
201                                    fgkan = null;
202                                    ProgramRun pr = new ProgramRun( SYSTEM_ID,YKNO,LISTID,isDebug );
203                                    flag = pr.execute();
204                                    if( flag ) { fgkan = GE50Access.FG_OK; }
205                                    errMsg.append( pr.getErrMsg() ).append( CR );
206                            }
207    
208            // ================== FGRUN_A,B,C,D は、RFID出力??===========================================
209                            if( flag && ( FGRUN.equals( FGRUN_A ) || FGRUN.equals( FGRUN_B ) || FGRUN.equals( FGRUN_C ) || FGRUN.equals( FGRUN_D ) ) ) {
210                                    System.out.println( "RUN_" + FGRUN );
211                                    //RFIDPrintRequest rpr = new RFIDPrintRequest( SYSTEM_ID,YKNO,LISTID,LANG,FGRUN,PRTID,isDebug );
212                                    // 4.3.3.0 (2008/10/01) RFIDPrintRequestのコンストラクタ引数追?
213                                    // 5.4.3.9 (2012/01/25) 雛形ファイル名?新帳票のみ対?
214                                    RFIDPrintRequest rpr = new RFIDPrintRequest( SYSTEM_ID,YKNO,LISTID,LANG,FGRUN,PRTID,PRGDIR,PRGFILE,OUT_DIR,null,isDebug );
215                                    flag = rpr.initialDataSet();
216                                    if( flag ) { flag = rpr.execute(); }
217                                    //if( flag ) { fgkan = GE50Access.FG_RUN; }
218                                    // 4.3.3.0 (2008/10/01) 完?フラグの取り方変更
219                                    if( flag ) { fgkan = rpr.getFgkan(); }
220                                    errMsg.append( rpr.getErrMsg() ).append( CR );
221                            }
222                    }
223                    catch ( RuntimeException ex ) {
224                            errMsg.append( "ReportProcessing Execute Error! " ).append( CR ) ;
225                            errMsg.append( "==============================" ).append( CR );
226                            errMsg.append( StringUtil.stringStackTrace( ex ) ).append( CR ) ;
227                            flag = false;
228                    }
229    
230                    return flag ? fgkan : null ;    // 正常なら?fgkan を?異常な?null を返します?
231            }
232    
233            /**
234             * ?変数をクリアします?
235             * こ?オブジェクトを再利用する場合?、?こ?メソ?で?変数の
236             * クリアが?です?
237             * 注意:このクラス自身は、同期???入って?せん
238             *
239             * @og.rev 3.8.0.5 (2005/08/26) ??モングループ追?
240             *
241             */
242            public void clear() {
243                    SYSTEM_ID       = null;
244                    YKNO            = null;
245                    GROUPID         = null;
246                    LISTID          = null;
247                    JOKEN           = null;
248                    OUT_DIR         = null;         // 5.1.0.0 (2009/11/04) OUTDIR ?OUT_DIR
249                    OUT_FILE        = null;         // 5.1.0.0 (2009/11/04) OUTFILE ?OUT_FILE
250                    outputFile      = null;
251                    isDebug         = false;        // 3.8.5.0 (2006/03/06) ??用のフラグを追?
252    
253                    FGRUN           = null;
254                    PRTID           = null;
255                    LANG            = null;
256                    PRGDIR          = null;
257                    PRGFILE         = null;
258                    DMN_GRP         = null;         // 3.8.0.5 (2005/08/26)
259                    programFile     = null;
260    
261                    errMsg          = new StringBuilder() ;
262            }
263    
264            /**
265             * シス?ID(SYSTEM_ID)をセ?します?
266             *
267             * @param val シス?ID
268             */
269            public void setSystemId( final String val ) { SYSTEM_ID = val; }
270    
271            /**
272             * 要求番号(YKNO)をセ?します?
273             *
274             * @param val 要求番号
275             */
276            public void setYkno( final String val ) { YKNO = val; }
277    
278            /**
279             * グループID(GROUPID)をセ?します?
280             *
281             * @param val グループID
282             */
283            public void setGroupId( final String val ) { GROUPID = val; }
284    
285            /**
286             * 帳票ID(LISTID)をセ?します?
287             *
288             * @param val 帳票ID
289             */
290            public void setListId( final String val ) { LISTID = val; }
291    
292            /**
293             * 処?件(JOKEN)をセ?します?
294             *
295             * @param val 処?件
296             */
297            public void setJoken( final String val ) { JOKEN = val; }
298    
299            /**
300             * プリンターID(PRTID)をセ?します?
301             *
302             * @og.rev 3.8.5.0 (2006/03/06) PRTID が指定されて?ば、その値を使用する。なければ NULL
303             * @og.rev 4.3.4.4 (2009/01/01) メソ?名変更
304             *
305             * @param val プリンターID
306             */
307            public void setPrtId( final String val ) { PRTID = val; }
308    
309            /**
310             * 出力??レクトリ(OUT_DIR)をセ?します?
311             *
312             * @param val 出力??レクトリ
313             */
314            public void setOutDir( final String val ) { OUT_DIR = val; }
315    
316            /**
317             * 出力?ファイル(OUT_FILE)をセ?します?
318             *
319             * @param val 出力?ファイル
320             */
321            public void setOutFile( final String val ) { OUT_FILE = val; }
322    
323            /**
324             * debugフラグをセ?します?
325             *
326             * @og.rev 3.8.5.0 (2006/03/06) ??用のフラグを追?ます?
327             *
328             * @param       flag    ??フラグ[true:??/false:通常]
329             */
330            public void setDebug( final boolean flag ) { isDebug = flag; }
331    
332            /**
333             * 初期??タセ?を行います?
334             * ここでは、GE53 ??ブルより?な??を取得します?
335             *
336             * @og.rev 3.8.0.5 (2005/08/26) ??モングループ追?
337             * @og.rev 3.8.5.0 (2006/03/06) プリンタIDが引数から、渡される?合?対?
338             * @og.rev 3.8.6.0 (2006/09/29) 出力?フォル??自動生成を行います?
339             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
340             * @og.rev 5.1.0.0 (2009/11/04) OUTDIR ?OUT_DIR , OUTFILE ?OUT_FILE カラ?変更
341             * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
342             *
343             * @param       appInfo アプリ??オブジェク?
344             *
345             * @return      結果[true:正常/false:異常]
346             */
347            private boolean initialDataSet( final ApplicationInfo appInfo ) {
348                    String[] args = new String[] { SYSTEM_ID,JOKEN };
349                    // fgrun,prtid,lang,prgdir,prgfile
350    //              String[][] vals = DBUtil.dbExecute( GE53_SELECT,args,appInfo );                 // 3.8.7.0 (2006/12/15)
351                    String[][] vals = DBUtil.dbExecute( GE53_SELECT,args,appInfo, DBID );   // 5.5.5.1 (2012/08/07)
352                    if( vals == null || vals.length == 0 ) {
353                            errMsg.append( "Data does not exist in GE53 table." ).append( CR );
354                            errMsg.append( "==============================" ).append( CR );
355                            errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
356                            errMsg.append( "JOKEN=["     ).append( JOKEN     ).append( "]" );
357                            errMsg.append( CR );
358                            return false;
359                    }
360    
361                    int row = 0;
362                    // 検索結果が?帰ったとき?SYSTEM_ID ??されて?方の??タ(?を採用する?
363                    for( int i=0; i<vals.length; i++ ) {
364                            if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE53_SYSTEM_ID] ) ) { row = i; break; }
365                    }
366    
367                    // 3.8.5.0 (2006/03/06) プリンタIDが引数から、渡される?合?対?
368                    if( PRTID == null ) {
369                            PRTID = StringUtil.nval( vals[row][GE53_PRTID],PRTID   );
370                    }
371    
372                    FGRUN   = StringUtil.nval( vals[row][GE53_FGRUN],       FGRUN   );
373                    LANG    = StringUtil.nval( vals[row][GE53_LANG],        LANG    );
374                    PRGDIR  = StringUtil.nval( vals[row][GE53_PRGDIR],      PRGDIR  );
375                    PRGFILE = StringUtil.nval( vals[row][GE53_PRGFILE],     PRGFILE );
376                    DMN_GRP = StringUtil.nval( vals[row][GE53_DMN_GRP],     DMN_GRP );      // 3.8.0.5 (2005/08/26)
377                    programFile = PRGDIR + HybsSystem.FS + PRGFILE ;
378    
379                    if( ( OUT_DIR != null  && OUT_DIR.length() > 0 ) &&
380                            ( OUT_FILE != null && OUT_FILE.length() > 0 ) ) {
381                                    outputFile  = OUT_DIR + HybsSystem.FS + OUT_FILE ;
382                                    // 3.8.6.0 (2006/09/29) 出力?フォル??自動生成を行います?
383                                    File dir = new File(OUT_DIR);
384                                    if( ! dir.exists() && ! dir.mkdirs() ) {
385                                            String errMsg = "?レクトリの作?に失敗しました?" + OUT_DIR + "]";
386                                            throw new HybsSystemException( errMsg );
387                                    }
388                    }
389    
390                    return true;
391            }
392    
393            /**
394             * エラーが存在した場合に、エラーメ?ージを返します?
395             *
396             * @return エラーメ?ージ String
397             */
398            public String getErrMsg() {
399                    return errMsg.toString();
400            }
401    }