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