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 org.opengion.hayabusa.common.HybsSystem; 019 import org.opengion.fukurou.util.StringUtil; 020 import org.opengion.fukurou.util.Shell; 021 import org.opengion.fukurou.util.ApplicationInfo; 022 import org.opengion.fukurou.db.DBUtil; 023 024 /** 025 * ã€ãƒ¬ãƒã?トå?力ã?DBTableModelオブジェクトをレãƒã?ト形å¼ã«è¿”é‚„ã™ã‚‹ã‚¿ã‚°ãƒªãƒ–クラスã§ã™ã? 026 * ã“ã?オブジェクトã«ã€?ãƒ??ã‚¿(DBTableModel)ã¨ã€ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©(DBTableReport クラス)を与ãˆã¦ã€? 027 * 外部ã‹ã‚‰ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã§ã€å„種形å¼ã§ ãƒ??ã‚¿(DBTableModel)を表示ã•ã›ã‚‹ã“ã¨ã? 028 * å¯èƒ½ã§ã™ã? 029 * 030 * å?±žæ?ã¯ã€{@XXXX} 変数ãŒä½¿ç”¨ã§ãã¾ã™ã? 031 * ã“れã¯ã€ServletRequest ã‹ã‚‰ã€xxxx ã‚’ã‚ーã«å€¤ã‚’å–りå?ã?ã“ã?変数㫠032 * 割り当ã¦ã¾ã™ã?ã¤ã¾ã‚Šã?ã“ã?xxxxã‚’ã‚ーã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã™ã‚Œã?ã€? 033 * ã“ã?変数ã«å€¤ã‚’ã‚»ãƒ?ƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã? 034 * 035 * http://localhost/query.jsp?KEY1=VLA1&KEY2=VAL2 036 * 037 * ã®ã‚ˆã†ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã€{@KEY1} ã¨ã™ã‚Œã°ã€?VAL1 ãŒã‚»ãƒ?ƒˆã•れã¾ã™ã? 038 * 039 * @og.group 帳票シスãƒ?ƒ 040 * 041 * @version 4.0 042 * @author Kazuhiko Hasegawa 043 * @since JDK5.0, 044 */ 045 public class ReportPrint { 046 // 3.6.1.0 (2005/01/05) Shell 㮠タイãƒ?‚¢ã‚¦ãƒˆã‚’è¨å®? 047 private final int TIMEOUT = HybsSystem.sysInt( "REPORT_DAEMON_TIMEOUT" ); 048 049 private static final String CR = HybsSystem.CR ; 050 private final StringBuilder errMsg = new StringBuilder(); 051 052 private final String SYSTEM_ID ; 053 private final String YKNO ; 054 private final String PRTID ; 055 private String PRTNM ; 056 private final String programFile ; 057 private final String htmlDir ; 058 private final String modelFile ; 059 private final String pdfFile ; 060 private final String DMN_GRP ; // 3.8.0.5 (2005/08/26) 061 private final boolean DEBUG ; // 3.8.5.0 (2006/03/06) ãƒ?ƒãƒ?‚°ç”¨ã®ãƒ•ラグを追åŠ? 062 063 private String shellCmd = null; 064 065 // GE55 ã®ãƒ—リンタåã‚’å–å¾—ã™ã‚‹SQLæ–?§ã™ã? 066 // 4.0.0 (2005/01/31) å…±æœ?system_id ã‚’ã?è€?? 067 private static final String GE55_SELECT = 068 "SELECT PRTNM,SYSTEM_ID" + 069 " FROM GE55" + 070 " WHERE FGJ = '1'" + 071 " AND SYSTEM_ID IN (?,'**')" + 072 " AND PRTID = ?" ; 073 074 private static final int GE55_PRTNM = 0; 075 private static final int GE55_SYSTEM_ID = 1; 076 077 /** コãƒã‚¯ã‚·ãƒ§ãƒ³ã«ã‚¢ãƒ—リケーションæƒ??を追記ã™ã‚‹ã‹ã©ã?‹æŒ?®?*/ 078 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 079 080 // 3.8.7.0 (2006/12/15) アクセスãƒã‚°å–å¾—ã?為,ApplicationInfoオブジェクトをè¨å®? 081 private final ApplicationInfo appInfo; 082 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付ã‘忘れ対å¿? 083 084 /** 085 * コンストラクター 086 * 087 * @og.rev 3.8.7.0 (2006/12/15) アクセスãƒã‚°å–å¾—ã?為,ApplicationInfoオブジェクトをè¨å®? 088 * 089 * @param system_id シスãƒ?ƒ ID 090 * @param ykno è¦æ±‚ç•ªå· 091 * @param prtId プリンターID 092 * @param prgFile 実行ã?ãƒã‚°ãƒ©ãƒ?D 093 * @param inDir レãƒã?トå?力ディレクトリ 094 * @param mdlFile ãƒ?ƒ³ãƒãƒ©ãƒªãƒ¼ãƒ•ァイル 095 * @param outFile 出力ファイルå? 096 * @param dmnGrp ãƒ??モングルーãƒ? 097 * @param debug ãƒ?ƒãƒ?‚°ãƒ•ラグ 098 */ 099 public ReportPrint( final String system_id, final String ykno, final String prtId, 100 final String prgFile,final String inDir,String mdlFile, 101 final String outFile,final String dmnGrp,final boolean debug ) { 102 SYSTEM_ID = system_id; 103 YKNO = ykno; 104 PRTID = prtId; 105 programFile = prgFile ; 106 htmlDir = inDir ; 107 modelFile = mdlFile ; // 4.0.1.0 (2007/12/18) 108 pdfFile = outFile ; 109 DMN_GRP = dmnGrp; // 3.8.0.5 (2005/08/26) 110 DEBUG = debug; 111 112 // 3.8.7.0 (2006/12/15) アクセスãƒã‚°å–å¾—ã?為,ApplicationInfoオブジェクトをè¨å®? 113 if( USE_DB_APPLICATION_INFO ) { 114 appInfo = new ApplicationInfo(); 115 // ユーザーID,IPアドレス,ホストå 116 appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 117 // ç”»é¢ID,æ“ä½?プãƒã‚°ãƒ©ãƒ?D 118 appInfo.setModuleInfo( "ReportPrint",YKNO,PRTID ); 119 } 120 else { 121 appInfo = null; 122 } 123 } 124 125 /** 126 * レãƒã?トå?力å?ç?‚’実行ã—ã¾ã™ã? 127 * 128 * @return çµæžœ [true:æ£å¸¸/false:異常] 129 */ 130 public boolean execute() { 131 System.out.print( "ReportPrint Started ... " ); 132 boolean flag ; 133 134 try { 135 flag = initialDataSet(); 136 if( flag ) { System.out.print( "INIT," ); } 137 138 if( flag ) { 139 flag = makeShellCommand(); 140 if( flag ) { System.out.print( "SHELL," ); } 141 } 142 143 if( flag ) { 144 flag = programRun(); 145 if( flag ) { System.out.print( "RUN," ); } 146 // 3.8.5.3 (2006/06/30) 帳票処ç?®Ÿè¡Œæ™‚エラーã®å†å®Ÿè¡? 147 // else { 148 // System.out.println(); 149 // System.out.println( "帳票å°åˆ·æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚リトライã—ã¾ã™ã?" ); 150 // System.out.println( "YKNO=[" + YKNO + "],PRTID=[" + PRTID + "],DMN_GRP=[" + DMN_GRP + "]" ); 151 // System.out.println(); 152 // flag = programRun(); 153 // if( flag ) { System.out.print( "RUN 2," ); } 154 // else { 155 // System.out.println( "帳票å°åˆ·ãƒªãƒˆãƒ©ã‚¤ã«å¤±æ•—ã—ã¾ã—ãŸã€?KNO=[" + YKNO + "]" ); 156 // } 157 // } 158 } 159 } 160 catch ( RuntimeException ex ) { 161 errMsg.append( "ReportPrint Execute Error! " ).append( CR ) ; 162 errMsg.append( "==============================" ).append( CR ); 163 errMsg.append( StringUtil.stringStackTrace( ex ) ) ; 164 errMsg.append( CR ) ; 165 flag = false; 166 } 167 168 System.out.println( "End." ); 169 return flag ; 170 } 171 172 /** 173 * åˆæœŸãƒ??ã‚¿ã‚»ãƒ?ƒˆã‚’行ã„ã¾ã™ã? 174 * ã“ã“ã§ã¯ã€GE55 ãƒ??ブルよりå¿?¦ãªæƒ??ã‚’å–å¾—ã—ã¾ã™ã? 175 * 176 * @og.rev 3.8.7.0 (2006/12/15) アクセスãƒã‚°å–å¾—ã?為,ApplicationInfoオブジェクトをè¨å®? 177 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付ã‘忘れ対ç? 178 * 179 * @return çµæžœ [true:æ£å¸¸/false:異常] 180 */ 181 private boolean initialDataSet() { 182 if( PRTID == null ) { 183 errMsg.append( "PRTID columns does not exist in GE55 table." ).append( CR ); 184 errMsg.append( "==============================" ).append( CR ); 185 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " ); 186 errMsg.append( "PRTID=[" ).append( PRTID ).append( "]" ); 187 errMsg.append( CR ); 188 return false; 189 } 190 191 String[] args = new String[] { SYSTEM_ID,PRTID }; 192 // prtnm,system_id 193 // String[][] vals = DBUtil.dbExecute( GE55_SELECT,args,appInfo ); // 3.8.7.0 (2006/12/15) 194 String[][] vals = DBUtil.dbExecute( GE55_SELECT,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 195 if( vals == null || vals.length == 0 ) { 196 errMsg.append( "Data does not exist in GE55 table." ).append( CR ); 197 errMsg.append( "==============================" ).append( CR ); 198 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " ); 199 errMsg.append( "PRTID=[" ).append( PRTID ).append( "]" ); 200 errMsg.append( CR ); 201 return false; 202 } 203 204 int row = 0; 205 // æ¤œç´¢çµæžœãŒè¤?•°å¸°ã£ãŸã¨ãã?SYSTEM_ID ã?æŒ?®šã•れã¦ã?‚‹æ–¹ã®ãƒ??ã‚¿(è¡?を採用ã™ã‚‹ã€? 206 for( int i=0; i<vals.length; i++ ) { 207 if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE55_SYSTEM_ID] ) ) { row = i; break; } 208 } 209 210 PRTNM = StringUtil.nval( vals[row][GE55_PRTNM],PRTNM ); 211 212 if( DEBUG ) { 213 System.out.println( "SYSTEM_ID =" + SYSTEM_ID ); 214 System.out.println( "YKNO =" + YKNO ); 215 System.out.println( "PRTID =" + PRTID ); 216 System.out.println( "PRTNM =" + PRTNM ); 217 System.out.println( "programFile =" + programFile ); 218 System.out.println( "htmlDir =" + htmlDir ); 219 System.out.println( "pdfFile =" + pdfFile ); 220 System.out.println( "DMN_GRP =" + DMN_GRP ); 221 System.out.println( "GE55_SELECT =" + GE55_SELECT ); 222 } 223 224 return true; 225 } 226 227 /** 228 * シェルコマンドã?æ–?—å?を作æ?ã—ã¾ã™ã? 229 * 230 * @og.rev 3.8.0.5 (2005/08/26) 引数ã«ãƒ??モングループを追åŠ? 231 * @og.rev 3.8.0.8 (2005/10/03) ãƒ??モングループã?ãƒ?ƒ•ォルトå?è¨å®? 232 * @og.rev 4.0.1.0 (2007/12/18) 帳票ã®ãƒ?ƒ³ãƒãƒ©ãƒªãƒ¼ãƒ•ァイルを追åŠ? 233 * 234 * @return çµæžœ [true:æ£å¸¸/false:異常] 235 */ 236 private boolean makeShellCommand() { 237 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL ); 238 239 buf.append( programFile ).append( " " ); // 実行ã™ã‚‹ã‚³ãƒžãƒ³ãƒ? 240 buf.append( "\"" ).append( htmlDir ).append( HybsSystem.FS ); // 入力HTMLファイル 241 buf.append( YKNO ).append( "_*.html\" " ); // 入力HTMLファイル 242 buf.append( "\"" ).append( PRTNM ).append( "\" " ); // プリンタå? 243 if( pdfFile != null ) { 244 buf.append( "\"" ).append( pdfFile ).append( "\" " ); // PDFファイルå? 245 } 246 else { 247 // ãƒ?ƒŸãƒ¼ãƒ•ァイルを指定ã™ã‚‹å¿?¦ãŒã‚ã‚‹ã€? 248 buf.append( "\"" ).append( htmlDir ).append( HybsSystem.FS ); 249 buf.append( YKNO ).append( ".xls\" " ); // ãƒ?ƒŸãƒ¼å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ« 250 } 251 252 // 3.8.5.0 (2006/03/06) EXCELをオープンã™ã‚‹ãƒ•ァイルåã«è¦æ±‚番å·ã‚’使ã? 253 // buf.append( YKNO ).append( " " ); 254 if( modelFile != null ) { // 4.0.1.0 (2007/12/18) 255 buf.append( modelFile ).append( " " ); // モãƒ?ƒ«ãƒ•ァイルå?4) 256 } 257 else { 258 buf.append( "DMY_MDL" ).append( " " ); // ãƒ?ƒŸãƒ¼ãƒ¢ãƒ?ƒ«ãƒ•ァイルå?4) 259 } 260 261 // 3.8.5.0 (2006/03/06) DMN_GRPã¯å¿?? 262 buf.append( DMN_GRP ).append( " " ); // ãƒ??モングルーãƒ? 263 264 buf.append( PRTID ); // プリンタID(ã“ã?åå‰.pdf ã§PDFファイルãŒä½œæ?ã•れるã?) 265 266 shellCmd = buf.toString(); 267 System.out.println( CR + shellCmd + CR ); 268 269 return true; 270 } 271 272 /** 273 * 実際ã®ãƒ¬ãƒã?トå?力å?ç?‚’行ã„ã¾ã™ã? 274 * 275 * @og.rev 3.1.9.0 (2003/05/16) Shell ã¸ã® stdout 㨠stderr ã®å–å¾—è¨å®šã?å»?¢ã€‚ShellTag ã§ã¯ã€æœ‰åйã€? 276 * @og.rev 3.6.1.0 (2005/01/05) Shell 㮠タイãƒ?‚¢ã‚¦ãƒˆã‚’è¨å®? 277 * 278 * @return çµæžœ [true:æ£å¸¸/false:異常] 279 */ 280 private boolean programRun() { 281 Shell shell = new Shell(); 282 shell.setCommand( shellCmd,true ); // BATCHプãƒã‚»ã‚¹ã§å®Ÿè¡Œã™ã‚? 283 shell.setWait( true ); // プãƒã‚»ã‚¹ã®çµ‚äº?‚’å¾?¤ 284 shell.setTimeout( TIMEOUT ); // 3.6.1.0 (2005/01/05) Shell 㮠タイãƒ?‚¢ã‚¦ãƒˆã‚’è¨å®? 285 286 int rtnCode = shell.exec(); // 0 ã¯æ£å¸¸çµ‚äº?‚’示ã? 287 288 if( rtnCode != 0 ) { 289 errMsg.append( "Shell Command exequte Error." ).append( CR ); 290 errMsg.append( "==============================" ).append( CR ); 291 errMsg.append( shellCmd ).append( CR ); 292 errMsg.append( shell.getStdoutData() ).append( CR ); 293 errMsg.append( shell.getStderrData() ).append( CR ); 294 errMsg.append( CR ); 295 return false; 296 } 297 298 return true; 299 } 300 301 /** 302 * エラーãŒå˜åœ¨ã—ãŸå ´åˆã«ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’è¿”ã—ã¾ã™ã? 303 * 304 * @return エラーメãƒ?‚»ãƒ¼ã‚¸ String 305 */ 306 public String getErrMsg() { 307 return errMsg.toString(); 308 } 309 }