    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.report;
    017
    018import java.util.concurrent.ConcurrentMap;                                                      // 6.4.3.3 (2016/03/04)
    019
    020import org.opengion.fukurou.util.Shell;
    021import org.opengion.hayabusa.common.HybsSystem;
    022import org.opengion.hayabusa.db.DBTableModel;
    023import static org.opengion.fukurou.system.HybsConst.CR;                         // 6.1.0.0 (2014/12/26) refactoring
    024import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE;      // 6.1.0.0 (2014/12/26) refactoring
    025
    026/**
    027 * RFIDPrintPoint インターフェース のデフォルト実装クラスです。
    028 * execute() をオーバーライドして、各種RFIDシステムに対応して下さい。
    029 *
    030 * @og.group 帳票システム
    031 *
    032 * @version  4.0
    033 * @author       Masakazu Takahashi
    034 * @since    JDK6.0,
    035 */
    036public abstract class AbstractRFIDPrintPointService implements RFIDPrintPointService {
    037
    038        /** エラーメッセージ */
    039        protected final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE );      // エラーメッセージ
    040
    041        /** カラム定義 */ protected String           ykno            ;
    042        /** カラム定義 */ protected String           systemId        ;
    043        /** カラム定義 */ protected String           fgrun           ;
    044        /** カラム定義 */ protected String           hostName        ;
    045        /** カラム定義 */ protected String           prtName         ;
    046        /** カラム定義 */ protected DBTableModel     table           ;
    047        /** カラム定義 */ protected String           prgdir          ;
    048        /** カラム定義 */ protected String           prgfile         ;
    049        /** カラム定義 */ protected String           outdir          ;
    050        // 6.4.3.1 (2016/02/12) 作成元のMapを、HashMap から ConcurrentHashMap に置き換え。
    051        /** カラム定義 */ protected ConcurrentMap<String, String[]>  rfidLayout;             // 6.4.3.3 (2016/03/04)
    052        /** カラム定義 */ protected String           prtid           ;                                               // 5.4.3.0 (2011/12/26)
    053        /** カラム定義 */ protected String           portnm          ;                                               // 5.4.3.1 (2011/12/27)
    054        /** カラム定義 */ protected String           listid          ;                                               // 5.4.3.4 (2012/01/12)
    055        /** カラム定義 */ protected String           layoutFile      ;                                               // 5.4.3.9 (2012/01/25)
    056
    057        /** カラム定義 */ protected String           fgkan           = GE50Access.FG_ERR2;   // 初期値はアプリエラー
    058        /** カラム定義 */ protected String           shellCmd        ;
    059
    060        private static final int TIMEOUT = HybsSystem.sysInt( "REPORT_DAEMON_TIMEOUT" ); //Shellタイムアウト 6.3.9.1 (2015/11/27) private static final化
    061
    062        /**
    063         * デフォルトコンストラクター
    064         *
    065         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    066         */
    067        protected AbstractRFIDPrintPointService() { super(); }          // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    068
    069        /**
    070         * RFID発行処理
    071         * RFIDのシステムに応じてこのメソッドをオーバーライドします
    072         * 実行後はfgkanの値を正しい値でセットしなおして下さい。
    073         *
    074         * @return 結果 [true:正常/false:異常]
    075         */
    076        public abstract boolean execute();
    077
    078        /**
    079         * 帳票起動された要求番号をセットします。
    080         *
    081         * @param   no 要求NO
    082         */
    083        public void setYkno( final String no ) {
    084                ykno = no;
    085        }
    086
    087        /**
    088         * システムIDをセットします。
    089         *
    090         * @param   id システムID
    091         */
    092        public void setSystemId( final String id ) {
    093                systemId = id;
    094        }
    095
    096        /**
    097         * 実行方法をセットします。
    098         *
    099         * @param   flag 実行方法
    100         */
    101        public void setFgrun( final String flag ) {
    102                fgrun = flag;
    103        }
    104
    105        /**
    106         * 帳票デーモンが実行されているホスト名をセットします。
    107         *
    108         * @param   host ホスト名
    109         */
    110        public void setHostName( final String host ) {
    111                hostName = host;
    112        }
    113
    114        /**
    115         * プリンター名をセットします。
    116         *
    117         * @param   printerName プリンタ名
    118         */
    119        public void setPrinterName( final String printerName ) {
    120                prtName = printerName;
    121        }
    122
    123        /**
    124         * DBTableModel をセットします。
    125         *
    126         * @param   tbl DBTableModelオブジェクト
    127         */
    128        public void setTable( final DBTableModel tbl ) {
    129                table = tbl;
    130        }
    131
    132        /**
    133         * REPORT_RFID_SERVICE_CLASSから起動するバッチ等のプログラムをセットします。
    134         *
    135         * @param dir バッチプログラムディレクトリ
    136         */
    137        public void setPrgDir( final String dir ){
    138                prgdir = dir;
    139        }
    140
    141        /**
    142         * REPORT_RFID_SERVICE_CLASSから起動するバッチ等のプログラムをセットします。
    143         *
    144         * @param file バッチプログラム名
    145         */
    146        public void setPrgFile( final String file ){
    147                prgfile = file;
    148        }
    149
    150        /**
    151         * ファイル出力時のディレクトリを指定します。
    152         *
    153         * @og.rev 4.3.2.2 (2008/09/22) 板金 RFID対応
    154         * @param dir ファイル出力ディレクトリ
    155         */
    156        public void setOutDir( final String dir ){
    157                outdir = dir;
    158        }
    159
    160        /**
    161         * ファイル出力時のディレクトリを指定します。
    162         *
    163         * @og.rev 5.4.3.0 (2011/12/26) _DEFAULT対応
    164         * @param id プリンタID
    165         */
    166        public void setPrtId( final String id ){
    167                prtid = id;
    168        }
    169
    170        /**
    171         * プリンタのポート名。
    172         *
    173         * @og.rev 5.4.3.1 (2011/12/27)
    174         * @param port ポート名
    175         */
    176        public void setPortnm( final String port ){
    177                portnm = port;
    178        }
    179
    180        /**
    181         * RFIDのレイアウトデータをセットします。
    182         *
    183         * キーはカラム名です。
    184         * 値はGE58で定義された出力区分及びパラメーターの配列です。
    185         * 配列の各インデックス番号の意味は、RFIDPrintRequestを参照して下さい。
    186         *
    187         * @og.rev 6.4.3.1 (2016/02/12) 実態を、HashMap → ConcurrentHashMap に置き換えたので、key,val ともに not null 制限です。
    188         * @og.rev 6.4.3.3 (2016/03/04) ConcurrentHashMap を受け取ることを明確にするため、I/FをConcurrentMapに変更します。
    189         *
    190         * @param   layout RFIDレイアウト
    191         */
    192        public void setLayout( final ConcurrentMap<String, String[]> layout ) {
    193                rfidLayout = layout;
    194        }
    195
    196        /**
    197         * 帳票IDをセットします。
    198         *
    199         * @param   id 帳票ID
    200         */
    201        public void setListId( final String id ) {
    202                listid = id;
    203        }
    204
    205        /**
    206         * 帳票IDをセットします。
    207         *
    208         * @og.rev 5.4.3.9 (2012/01/25)
    209         * @param file 雛形ファイル名
    210         */
    211        public void setLayoutFile( final String file ) {
    212                layoutFile = file;
    213        }
    214
    215        /**
    216         * 完成フラグを返します。
    217         *
    218         * @return 完成フラグ String
    219         */
    220        public String getFgkan(){
    221                return fgkan;
    222        }
    223
    224        /**
    225         * エラーメッセージを返します。
    226         *
    227         * @return エラーメッセージ String
    228         * @og.rtnNotNull
    229         */
    230        public String getErrMsg(){
    231                return errMsg.toString();
    232        }
    233
    234        /**
    235         * シェルの実行を行います。
    236         *
    237         * @og.rev 5.4.3.0 (2011/12/26)
    238         *
    239         * @return 結果 [true:正常/false:異常]
    240         */
    241        protected boolean programRun(){
    242                final Shell shell = new Shell();
    243                shell.setCommand( shellCmd,true );              // BATCHプロセスで実行する
    244                shell.setWait( true );                                  // プロセスの終了を待つ
    245                shell.setTimeout( TIMEOUT );
    246
    247                final int rtnCode = shell.exec();                               // 0 は正常終了を示す
    248
    249                if( rtnCode != 0 ) {
    250                        errMsg.append( "Shell Command exequte Error." ).append( CR )
    251                                .append( "==============================" ).append( CR )
    252                                .append( shellCmd ).append( CR )
    253                                .append( shell.getStdoutData() ).append( CR )
    254                                .append( shell.getStderrData() ).append( CR )
    255                                .append( CR );
    256                        return false;
    257                }
    258
    259                return true;
    260        }
    261
    262}