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 java.util.HashMap;
019    import java.util.Map;
020    
021    import org.opengion.fukurou.db.DBUtil;
022    import org.opengion.fukurou.util.ApplicationInfo;
023    import org.opengion.fukurou.util.StringUtil;
024    import org.opengion.hayabusa.common.HybsSystem;
025    import org.opengion.hayabusa.db.DBTableModel;
026    import org.opengion.hayabusa.report2.QueueManager_DB.DBTableModelCreator;
027    import org.opengion.hayabusa.resource.ResourceFactory;
028    import org.opengion.hayabusa.resource.ResourceManager;
029    
030    /**
031     * DBTableModelオブジェクトをレポ?ト形式に返還するタグリブクラスです?
032     * こ?オブジェクトに???タ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて?
033     * 外部からコントロールすることで、各種形式で ??タ(DBTableModel)を表示させること?
034     * 可能です?
035     *
036     * @og.group 帳票シス?
037     *
038     * @version  4.0
039     * @author   Hiroki Nakamura
040     * @since    JDK5.0,
041     */
042    public class RFIDPrintRequest {
043    
044            private static final String CR     = HybsSystem.CR ;
045    
046            private final StringBuilder errMsg = new StringBuilder();
047    
048            // DBTableModel に対して設定する情報
049    //      private DBTableModel    table           = null;         // 4.3.1.1 (2008/08/23) ローカル変数?
050            private ResourceManager resource        = null;
051    
052            // 受け渡し変数
053            private final String    SYSTEM_ID       ;
054            private final String    YKNO            ;
055            private final String    LISTID          ;
056            private final String    LANG            ;
057            private final String    FGRUN           ;
058            private final String    PRTID           ;
059            private final String    PRGDIR          ;               // 4.3.3.0 (2008/10/01) 板金RFID対応で追?
060            private final String    PRGFILE         ;               // 4.3.3.0 (2008/10/01) 追?
061            private final String    OUTDIR          ;               // 4.3.3.0 (2008/10/01) 追?
062            private final boolean   DEBUG           ;
063            private final String    FILENAME        ;               // 5.4.3.9 (2012/01/25)
064    
065            // オブジェクト変数
066    //      private String          bSQL            = null;         // 5.5.2.4 (2012/05/16) ?の消し忘れ?
067            private boolean         fgLOCAL         = false;
068            private String          prtName         = null;
069            private String          hostName        = null;
070            private String          portnm          = null;
071            private String          fgkan           = GE50Access.FG_ERR2;   // 4.3.3.0 (2008/10/01) 初期値エラー
072            private final Map<String,String[]> rfidLayout = new HashMap<String,String[]>();
073    
074            // GE54 の帳票定義??を取得するSQL?す?
075            private static final String GE54_SELECT =
076                    "SELECT BSQL,FGLOCAL,SYSTEM_ID" +
077                    " FROM GE54" +
078                    " WHERE FGJ = '1'" +
079                    " AND  SYSTEM_ID IN (?,'**')" +
080                    " AND  LISTID = ?" ;
081    //      private static final int GE54_BSQL              = 0;
082            private static final int GE54_FGLOCAL   = 1;
083            private static final int GE54_SYSTEM_ID = 2;
084    
085            // 5.4.4.0 (2012/02/01) 互換モード対応漏れ
086            private static final String HOST = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "HOST" : "HOST_ID";
087    
088            // GE55 の出力?マスタ??を取得するSQL?す?
089            // 5.1.0.0 (2009/11/04) HOST ?HOST_ID
090            // 5.4.3.1 (2011/12/27) PORTNM
091            // 5.4.4.0 (2012/02/01) 互換モー?
092            private static final String GE55_SELECT =
093                    "SELECT PRTNM,"+HOST+",SYSTEM_ID,PORTNM" +
094                    " FROM GE55" +
095                    " WHERE FGJ = '1'" +
096                    " AND  SYSTEM_ID IN (?,'**')" +
097                    " AND  PRTID = ?" ;
098            private static final int GE55_PRTNM             = 0;
099            private static final int GE55_HOST_ID   = 1;
100            private static final int GE55_SYSTEM_ID = 2;
101            private static final int GE55_PORTNM    = 3;
102    
103            // 5.2.0.0 (2010/09/01) Ver4互換モード対?
104            private static final String CLM = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "COLUMN_NAME" : "CLM";
105    
106            // GE58 の帳票レイアウトテーブルを取得するSQL?す?
107            // 5.2.0.0 (2010/09/01) Ver4互換モード対?
108            private static final String GE58_SELECT =
109                    "SELECT KBOUT,DATA1,DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8" +
110                    " ,DATA9,DATA10,DATA11,DATA12,DATA13,DATA14,DATA15,"+CLM +
111                    " FROM GE58 WHERE SYSTEM_ID IN (?,'**')" +
112                    " AND LISTID = ?";
113            public static final int GE58_KBOUT              = 0;
114            public static final int GE58_DATA1              = 1;
115            public static final int GE58_DATA2              = 2;
116            public static final int GE58_DATA3              = 3;
117            public static final int GE58_DATA4              = 4;
118            public static final int GE58_DATA5              = 5;
119            public static final int GE58_DATA6              = 6;
120            public static final int GE58_DATA7              = 7;
121            public static final int GE58_DATA8              = 8;
122            public static final int GE58_DATA9              = 9;
123            public static final int GE58_DATA10             = 10;
124            public static final int GE58_DATA11             = 11;
125            public static final int GE58_DATA12             = 12;
126            public static final int GE58_DATA13             = 13;
127            public static final int GE58_DATA14             = 14;
128            public static final int GE58_DATA15             = 15;
129            public static final int GE58_CLM_NAME   = 16;
130    
131            // コネクションにアプリケーション??を追記するかど???
132            public static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
133            private final ApplicationInfo appInfo;
134            private final String DBID = HybsSystem.sys( "RESOURCE_DBID" );          // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
135    
136            /**
137             * コンストラクター
138             * 引数を受けとって、インスタンスを作?します?
139             * @param systemId シス?ID
140             * @param ykno 要求番号
141             * @param listId 帳票ID
142             * @param lang ??
143             * @param fgrun 実行方?
144             * @param prtid プリンタID
145             * @param prgdir プログラ?ィレクトリ
146             * @param prgfile プログラ?ァイル
147             * @param outdir 出力ディレクトリ
148             * @param layoutFile レイアウトファイル
149             * @param isDebug ??フラグ
150             *
151             * @og.rev 4.3.3.0 (2008/10/01) 板?RFID対応?引数にprgdir,prgfile,outdir追?
152             * @og.rev 5.4.3.1 (2011/12/27) portnm追?
153             * @og.rev 5.4.3.9 (2012/01/25) 雛形ファイル名追?
154             *
155             */
156            public RFIDPrintRequest( final String systemId, final String ykno
157                            , final String listId, final String lang, final String fgrun, final String prtid
158                            , final String prgdir, final String prgfile, final String outdir , final String layoutFile, final boolean isDebug ) {
159                    SYSTEM_ID       = systemId;
160                    YKNO            = ykno;
161                    LISTID          = listId;
162                    LANG            = lang;
163                    FGRUN           = fgrun;
164                    PRTID           = prtid;
165                    PRGDIR          = prgdir;                                       // 4.3.3.0 (2008/10/01)
166                    PRGFILE         = prgfile;                                      // 4.3.3.0 (2008/10/01)
167                    OUTDIR          = outdir;                                       // 4.3.3.0 (2008/10/01)
168                    DEBUG           = isDebug;
169                    FILENAME        = layoutFile;                           // 5.4.3.9 (2012/01/25)
170    
171                    // アクセスログ取得?為,ApplicationInfoオブジェクトを設?
172                    if( USE_DB_APPLICATION_INFO ) {
173                            appInfo = new ApplicationInfo();
174                            // ユーザーID,IPアドレス,ホスト名
175                            appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
176                            // 画面ID,操?プログラ?D
177                            appInfo.setModuleInfo( "ReportConverter",YKNO,LISTID );
178                    }
179                    else {
180                            appInfo = null;
181                    }
182            }
183    
184            /**
185             * 初期??タセ?を行います?
186             * ここでは、GE54,GE58,GE55 ??ブルより?な??を取得します?
187             *
188             * @og.rev 4.3.3.0 (2008/10/01) 板?RFID対?PRGDIR,PRGFILE追??
189             * @og.rev 5.4.3.0 (2011/12/26) GE54のbSQLは取らな??する
190             * @og.rev 5.4.3.9 (2012/01/25) GE58はなくてもよ?
191             * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
192             *
193             * @return 結果 [true:正常/false:異常]
194             */
195            public boolean initialDataSet() {
196    
197                    // ===== GE54 から帳票定義??を取得しま?=========================================
198                    String[] args = new String[] { SYSTEM_ID,LISTID };
199    //              String[][] vals = DBUtil.dbExecute( GE54_SELECT,args,appInfo );
200                    String[][] vals = DBUtil.dbExecute( GE54_SELECT,args,appInfo, DBID );           // 5.5.5.1 (2012/08/07)
201                    if( vals == null || vals.length == 0 ) {
202                            errMsg.append( "Data does not exist in GE54 table." ).append( CR );
203                            errMsg.append( "==============================" ).append( CR );
204                            errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
205                            errMsg.append( "LISTID=["    ).append( LISTID    ).append( "]" );
206                            errMsg.append( CR );
207                            return false;
208                    }
209    
210                    // 検索結果が?帰ったとき?SYSTEM_ID ??されて?方の??タ(?を採用する?
211                    int row = 0;
212                    for( int i=0; i<vals.length; i++ ) {
213                            if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE54_SYSTEM_ID] ) ) { row = i; break; }
214                    }
215    
216                    // 4.5.3.0 GE54のbSQLは?となって?ので下方で別で取る
217    //              bSQL = StringUtil.nval( vals[row][GE54_BSQL],bSQL );
218    //              if( bSQL == null || bSQL.length() == 0 ) {
219    //                      errMsg.append( "Body SQL Columns does not exist in GE54 table." ).append( CR );
220    //                      errMsg.append( "==============================" ).append( CR );
221    //                      errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
222    //                      errMsg.append( "LISTID=["    ).append( LISTID    ).append( "] " );
223    //                      errMsg.append( CR );
224    //                      return false;
225    //              }
226    
227                    // ローカルリソースフラグ
228                    // 4.3.3.0 (2008/10/01)
229                    // fgLOCAL = ( vals[row][GE54_FGLOCAL]  != null && vals[row][GE54_FGLOCAL].trim().equals( "1" ) ) ? true : false ;
230                    String localFlag = vals[row][GE54_FGLOCAL];
231                    fgLOCAL = ( localFlag != null && "1".equals( localFlag.trim() )) ? true : false ;
232    
233                    // ===== GE58 から帳票定義??を取得しま?=========================================
234                    String[] argsGe58 = new String[] { SYSTEM_ID,LISTID };
235    //              String[][] valsGe58 = DBUtil.dbExecute( GE58_SELECT,argsGe58,appInfo );
236                    String[][] valsGe58 = DBUtil.dbExecute( GE58_SELECT,argsGe58,appInfo, DBID );           // 5.5.5.1 (2012/08/07)
237                    // 5.4.3.9 (2012/01/25) GE58はなくてもよ?
238    //              if( valsGe58 == null || valsGe58.length == 0 ) {
239    //                      errMsg.append( "Data does not exist in GE58 table." ).append( CR );
240    //                      errMsg.append( "==============================" ).append( CR );
241    //                      errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
242    //                      errMsg.append( "LISTID=["    ).append( LISTID    ).append( "]" );
243    //                      errMsg.append( CR );
244    //                      return false;
245    //              }
246    
247                    for( int i=0; i<valsGe58.length; i++ ) {
248                            rfidLayout.put( valsGe58[i][GE58_CLM_NAME], valsGe58[i] );
249                    }
250    
251                    // ===== GE55 から出力?マスタ??を取得しま?=========================================
252                    String[] argsGe55 = new String[] { SYSTEM_ID,PRTID };
253    //              String[][] valsGe55 = DBUtil.dbExecute( GE55_SELECT,argsGe55,appInfo );
254                    String[][] valsGe55 = DBUtil.dbExecute( GE55_SELECT,argsGe55,appInfo, DBID );           // 5.5.5.1 (2012/08/07)
255                    if( valsGe55 == null || valsGe55.length == 0 ) {
256                            errMsg.append( "Data does not exist in GE55 table." ).append( CR );
257                            errMsg.append( "==============================" ).append( CR );
258                            errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
259                            errMsg.append( "PRTID=["    ).append( PRTID    ).append( "]" );
260                            errMsg.append( CR );
261                            return false;
262                    }
263    
264                    // 検索結果が?帰ったとき?SYSTEM_ID ??されて?方の??タ(?を採用する?
265                    int rowGe55 = 0;
266                    for( int i=0; i<vals.length; i++ ) {
267                            if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE55_SYSTEM_ID] ) ) { rowGe55 = i; break; }
268                    }
269    
270                    prtName = valsGe55[rowGe55][GE55_PRTNM];
271                    hostName = valsGe55[rowGe55][GE55_HOST_ID];
272                    portnm = valsGe55[rowGe55][GE55_PORTNM];
273    
274                    return true;
275            }
276    
277            /**
278             * RFID発行用??タを作?し?発行リクエスト?処?行います?
279             *
280             * @og.rev 5.4.3.0 (2011/12/26) _DEFAULT対?
281             * @og.rev 5.4.3.4 (2012/01/12) listid追?
282             * @og.rev 5.4.3.9 (2012/01/25) FILENAME追?
283             *
284             * @return 結果 [true:正常/false:異常]
285             */
286            public boolean execute() {
287                    System.out.print( "RRID RequestData Creating ... " );
288    
289                    // FGLOCAL ?時は、SYSTEM_ID を指定してリソース作?
290                    if( fgLOCAL ) {
291                            // ローカルリソース?時は、SYSTEM_ID,LANG を使用します?先読みは、使用しません?
292                            resource = ResourceFactory.newInstance( SYSTEM_ID,LANG,false );
293                    }
294                    else {
295                            // 従来と互換性のあるモー?ローカルリソースは使用しな??
296                            resource = ResourceFactory.newInstance( LANG );
297                    }
298    
299    //              String[] where = new String[] { SYSTEM_ID , YKNO } ;    // 5.5.2.4 (2012/05/16) 削除のし忘れ
300    
301                    // ボディー??の取?
302    //              table = DBTableModelUtil.makeDBTable( bSQL, where, resource ,appInfo );
303    //              DBTableModel table = DBTableModelUtil.makeDBTable( bSQL, where, resource ,appInfo );
304                    // 5.2.3.0 tableのとり方変更
305                    DBTableModelCreator tmc = new DBTableModelCreator( SYSTEM_ID, LISTID, YKNO, "B", resource );
306                    DBTableModel table = tmc.getTable();
307                    if( table.getRowCount() <= 0 ) {
308                            errMsg.append( "Database Body row count is Zero." ).append( CR );
309                            errMsg.append( "==============================" ).append( CR );
310                            // 5.5.2.4 (2012/05/16) ?の消し忘れ?
311    //                      errMsg.append( bSQL );
312                            errMsg.append( "SYSTEM_ID=" ).append( SYSTEM_ID );
313                            errMsg.append( ",LISTID="   ).append( LISTID );
314                            errMsg.append( ",YKNO="     ).append( YKNO );
315                            errMsg.append( CR );
316                            return false;
317                    }
318                    // 検索時??件数での打ち?をエラーとする?
319                    if( table.isOverflow() ) {
320                            errMsg.append( "Database is Overflow. [" );
321                            errMsg.append( table.getRowCount() );
322                            errMsg.append( "]" ).append( CR ).append( CR );
323                            errMsg.append( "==============================" ).append( CR );
324                            errMsg.append( "Check SystemParameter Data in DB_MAX_ROW_COUNT Overflow" );
325                            errMsg.append( CR );
326                            return false;
327                    }
328    
329                    // RFID発行用クラスを実行する?
330                    RFIDPrintPointService service = null;
331                    try {
332                            service = (RFIDPrintPointService)StringUtil.newInstance( HybsSystem.sys( "REPORT_RFID_SERVICE_CLASS" ) );
333                            service.setYkno( YKNO );
334                            service.setSystemId( SYSTEM_ID );
335                            service.setFgrun( FGRUN );
336                            service.setHostName( hostName );
337                            service.setPrinterName( prtName );
338                            service.setTable( table );
339                            service.setLayout( rfidLayout );
340                            service.setPrgDir( PRGDIR );            // 4.3.3.0 (2008/10/01) 板?RFID対?
341                            service.setPrgFile( PRGFILE );          // 4.3.3.0 (2008/10/01)
342                            service.setOutDir( OUTDIR );            // 4.3.3.0 (2008/10/01)
343                            service.setPrtId( PRTID );                      // 5.4.3.0 (2011/12/26)
344                            service.setPortnm( portnm );            // 5.4.3.1 (2011/12/27)
345                            service.setListId( LISTID );            // 5.4.3.4 (2012/01/12)
346                            service.setLayoutFile( FILENAME );      // 5.4.3.9 (2012/01/25)
347    
348                            // service.execute();
349                            boolean flag = service.execute();       // 4.3.3.0 (2008/10/01) booleanを返す
350    
351                            fgkan = service.getFgkan();                     // 4.3.3.0 (2008/10/01) FGKANを受け取るよ?する
352    
353                            if( DEBUG ) {
354                                    System.out.println( service );
355                            }
356    
357                            if( ! flag ){ // 4.3.3.0 (2008/10/01)
358                                    errMsg.append( service.getErrMsg() );
359                                    return false;
360                            }
361                    }
362                    catch ( Throwable ex ) {
363                            fgkan = GE50Access.FG_ERR2; // 4.3.3.0 (2008/10/01) エラー時?アプリエラーにしておく
364                            errMsg.append( "RFID Print Request Execution Error. " ).append( CR );
365                            errMsg.append( "==============================" ).append( CR );
366                            errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
367                            errMsg.append( "YKNO=[" ).append( YKNO ).append( "]" ).append( CR );
368                            errMsg.append( HybsSystem.sys( "REPORT_RFID_SERVICE_CLASS" ) ).append( CR );
369                            errMsg.append( ex.toString() );
370                            errMsg.append( CR );
371    //                      errMsg.append( service.getErrMsg() );
372                            if( service != null ) { errMsg.append( service.getErrMsg() ); }         // 5.5.2.6 (2012/05/25) findbugs対?
373                            return false;
374                    }
375    
376                    System.out.println( "End." );
377                    return true ;
378            }
379    
380            /**
381             * エラーが存在した場合に、エラーメ?ージを返します?
382             *
383             * @return エラーメ?ージ String
384             */
385            public String getErrMsg() {
386                    return errMsg.toString();
387            }
388    
389            /**
390             * 完?ラグを返します?
391             *
392             * @og.rev 4.3.3.0 (2008/10/01) 板金RFID メソ?追?
393             *
394             * @return 完?ラグ String
395             */
396            public String getFgkan() {
397                    return fgkan;
398            }
399    }