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