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 org.opengion.fukurou.util.Shell;
019import org.opengion.hayabusa.common.HybsSystem;
020import org.opengion.hayabusa.db.DBTableModel;
021
022/**
023 * CSVPrintPoint インターフェース のデフォルト実装クラスです。
024 * execute() をオーバーライドして、各種CSV取込み方式のシステムに対応して下さい。
025 *
026 * @og.group 帳票システム
027 *
028 * @version  5.0
029 * @author       Masakazu Takahashi
030 * @since    JDK6.0,
031 */
032public abstract class AbstractCSVPrintPointService implements CSVPrintPointService {
033
034        protected String                ykno            = null;
035        protected String                systemId        = null;
036        protected String                fgrun           = null;
037        protected String                hostName        = null;
038        protected String                prtName         = null;
039        protected DBTableModel  table           = null;
040        protected DBTableModel  tableH          = null;
041        protected DBTableModel  tableF          = null;
042        protected String                prgdir          = null;
043        protected String                prgfile         = null;
044        protected String                outdir          = null;
045        protected String                prtid           = null; 
046        protected String                portnm          = null; 
047        protected String                listid          = null; 
048        protected String                modelname       = null; 
049        protected String                csvOutdir       = null;
050        
051        protected String                grpid           = null; // 5.9.2.2 (2015/11/20)
052        protected String                dmngrp          = null; // 5.9.2.2 (2015/11/20)
053        protected String                option          = null; // 5.9.3.0 (2015/12/04)
054        protected String                fgcut           = null; // 5.9.3.0 (2015/12/04)
055
056
057        protected final StringBuilder   errMsg  = new StringBuilder();  // エラーメッセージ
058        protected               String                  fgkan   = GE50Access.FG_ERR2;   // 初期値はアプリエラー
059
060        protected int TIMEOUT = HybsSystem.sysInt( "REPORT_DAEMON_TIMEOUT" ); //Shellタイムアウト
061        protected String                shellCmd        = null;
062        
063        protected final static String FGRUN_EXCEL = "H";
064        protected final static String FGRUN_PDF = "I";
065        protected final static String FGRUN_EXCEL2 = "J"; // 5.9.4.2 (2016/01/13)
066        
067        private static final String CR          = System.getProperty("line.separator");
068
069        /**
070         * 発行処理
071         * 対象のシステムに応じてこのメソッドをオーバーライドします
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         * DBTableModel をセットします。
134         *
135         * @param   tbl DBTableModelオブジェクト
136         */
137        public void setTableH( final DBTableModel tbl ) {
138                tableH = tbl;
139        }
140        
141        /**
142         * DBTableModel をセットします。
143         *
144         * @param   tbl DBTableModelオブジェクト
145         */
146        public void setTableF( final DBTableModel tbl ) {
147                tableF = tbl;
148        }
149
150        /**
151         * 起動するバッチ等のプログラム(ディレクトリ)をセットします。
152         *
153         * @param dir バッチプログラムディレクトリ
154         */
155        public void setPrgDir( final String dir ){
156                prgdir = dir;
157        }
158
159        /**
160         * 起動するバッチ等のプログラムをセットします。
161         * 空の場合は起動しません。
162         *
163         * @param file バッチプログラム名
164         */
165        public void setPrgFile( final String file ){
166                prgfile = file;
167        }
168
169        /**
170         * ファイル出力時のディレクトリを指定します
171         *
172         * @param dir ファイル出力ディレクトリ
173         */
174        public void setOutDir( final String dir ){
175                outdir = dir;
176        }
177
178        /**
179         * プリンタIDを指定します
180         *
181         * @param id プリンタID
182         */
183        public void setPrtId( final String id ){
184                prtid = id;
185        }
186
187        /**
188         * プリンタのポート名
189         *
190         * @param port ポート名
191         */
192        public void setPortnm( final String port ){
193                portnm = port;
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         * 雛形ファイル名をセットします
207         *
208         * @param   name 雛形ファイル名
209         */
210        public void setModelname( final String name ) {
211                modelname = name;
212        }
213        
214        /**
215         * グループIDをセットします
216         *
217         * @param   id グループID
218         */
219        public void setGrpId( final String id ) {
220                grpid = id;
221        }
222        
223        /**
224         * デーモングループをセットします
225         *
226         * @param   name デーモングループ
227         */
228        public void setDmnGrp( final String name ) {
229                dmngrp = name;
230        }
231        
232        /**
233         * オプション文字列をセットします
234         *
235         * @param   opt オプション文字列
236         */
237        public void setOption( final String opt ) {
238                option = opt;
239        }
240        
241        /**
242         * ページエンドカットフラグをセットします
243         *
244         * @param   flg エンドカットフラグ
245         */
246        public void setFgcut( final String flg ) {
247                fgcut = flg;
248        }
249
250        /**
251         * 完成フラグを返します。
252         *
253         * @return 完成フラグ String
254         */
255        public String getFgkan(){
256                return fgkan;
257        }
258
259        /**
260         * エラーメッセージを返します。
261         *
262         * @return エラーメッセージ String
263         */
264        public String getErrMsg(){
265                return errMsg.toString();
266        }
267
268        /**
269         * シェルの実行を行います
270         *
271         * @og.rev 5.4.3.0 (2011/12/26)
272         *
273         * @return 結果 [true:正常/false:異常]
274         */
275        protected boolean programRun(){
276                Shell shell = new Shell();
277                shell.setCommand( shellCmd,true );              // BATCHプロセスで実行する
278                shell.setWait( true );                                  // プロセスの終了を待つ
279                shell.setTimeout( TIMEOUT );
280
281                int rtnCode = shell.exec();                             // 0 は正常終了を示す
282
283                if( rtnCode != 0 ) {
284                        errMsg.append( "Shell Command exequte Error." ).append( CR );
285                        errMsg.append( "==============================" ).append( CR );
286                        errMsg.append( shellCmd ).append( CR );
287                        errMsg.append( shell.getStdoutData() ).append( CR );
288                        errMsg.append( shell.getStderrData() ).append( CR );
289                        errMsg.append( CR );
290                        return false;
291                }
292
293                return true;
294        }
295
296}