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.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.db.DBTableModel;
021    import org.opengion.hayabusa.report.DBTableReport;
022    import org.opengion.fukurou.util.FileUtil;
023    import org.opengion.fukurou.util.Shell;
024    
025    import org.opengion.fukurou.util.StringUtil ;
026    import static org.opengion.fukurou.util.StringUtil.nval ;
027    
028    import java.io.File;
029    import java.io.IOException;
030    import java.io.ObjectOutputStream;
031    import java.io.ObjectInputStream;
032    
033    /**
034     * 検索結果の DBTableModelオブジェクトをレポ?ト形式に変換するタグです?
035     *
036     * ??タ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて?
037     * 外部からコントロールすることで、各種形式で ??タ(DBTableModel)を表示させること?
038     * 可能です?
039     *
040     * @og.formSample
041     * ●形式?lt;og:report fileURL="[???]" listId="[???]" ??? />
042     * ●body?な?
043     *
044     * ●Tag定義??
045     *   <og:report
046     *       listId           ○?TAG】帳票IDを指定します?(??)
047     *       fileURL            【TAG】雛型?HTMLファイルの保存してある ?レクトリを指定しま?
048     *       programFile        【TAG】HTMLファイルをEXCEL変換する場合に使用するBATファイルを指定しま?
049     *       outFileURL         【TAG】?力HTMLファイルの保存してある?レクトリを指定しま?
050     *       outFilename      ○?TAG】ファイルを作?するとき?出力ファイル名をセ?します?(??)
051     *       headerKeys         【TAG】固定部の{@KEY} の KEY 部?CSV形式で??しま?
052     *       headerVals         【TAG】固定部のKEY に対応する?をCSV形式で??しま?
053     *       footerKeys         【TAG】繰り返し部の終?に表示する key 部?CSV形式で??しま?
054     *       footerVals         【TAG】固定部のKEY に対応する?をCSV形式で??しま?
055     *       pageEndCut         【TAG】??ー部(繰り返し部)がなくなったときに、それ以降を表示するかど?[true/false]を指定しま?初期値:true)
056     *       reportClass        【TAG】実際に書き?すクラス名?略称(DBTableReport_**** の ****)をセ?しま?初期値:HTML)
057     *       language           【TAG】タグ?で使用する?コード[ja/en/zh/…]を指定しま?
058     *       scope              【TAG】キャ?ュする場合?スコープ[request/page/session/applicaton]を指定しま?初期値:session)
059     *       tableId            【TAG?通常使?せん)sessionから?す?DBTableModelオブジェクト? ID
060     *       debug              【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
061     *   />
062     *
063     * ●使用?
064     *
065     * @og.group そ?他??
066     *
067     * @version  4.0
068     * @author   Kazuhiko Hasegawa
069     * @since    JDK5.0,
070     */
071    public class ReportTableTag extends CommonTagSupport {
072            //* こ?プログラ??VERSION??を設定します?       {@value} */
073            private static final String VERSION = "4.0.0.0 (2005/08/31)" ;
074    
075            private static final long serialVersionUID = 4000 ;     // 4.0.0 (2005/01/31)
076    
077            // 印刷時に使用する?ポラリフォル?
078            private final String REPORT_URL =
079                    nval( HybsSystem.sys( "REPORT_FILE_URL" ) ,
080                                     HybsSystem.sys( "FILE_URL" ) + "REPORT/" ) ;
081    
082            // 3.8.0.4 (2005/08/08) 印刷時に使用するシス?ID
083            private static final String SYSTEM_ID =HybsSystem.sys( "SYSTEM_ID" );
084    
085            // 3.8.0.4 (2005/08/08) 帳票出力に準拠した方式に変更
086            private final int TIMEOUT = HybsSystem.sysInt( "REPORT_DAEMON_TIMEOUT" );
087    
088            private final String  BASE_URL  = HybsSystem.sys( "FILE_URL" );
089    
090            private String[]  headerKeys    = null;   // 固定部の{@KEY} の KEY 部??する?カンマで??できる?
091            private String[]  headerVals    = null;   // 固定部のKEY に対応する?を指定する? {@KEY} に置き換わる?
092            private String[]  footerKeys    = null;   // 繰り返し部の終?に表示する key 部??する?カンマで??できる?
093            private String[]  footerVals    = null;   // 繰り返し部の終?に表示する key に対する値を指定する?
094            private boolean   pageEndCut    = true;   // ボディー部(繰り返し部)がなくなったときに、それ以降?ペ?ジを?力するか?する?
095            private String    fileURL               = BASE_URL;             // 雛型のHTMLファイルの保存してある ?レクトリを指定します?
096            private String    outFileURL    = BASE_URL;             // 出力HTMLファイルの保存してある ?レクトリを指定します?
097            private String    outFilename   = null;                 // 出力HTMLファイル名を?します? ?レクトリ名を含んでも構いません?
098            private String    reportClass   = "HTML";
099    
100            private transient DBTableModel table    = null;
101            private String  tableId                 = HybsSystem.TBL_MDL_KEY ;
102            // 3.8.0.4 (2005/08/08) 帳票出力に準拠した方式に変更
103            private String  listId                  = null ;        // 雛型のHTMLファイル名を?します?
104            private String  programFile             = null;         // HTMLファイルのEXCEL化を行うバッチファイルを指定します?
105    //      private boolean direct                  = false;
106    //      private static final String             disposition = "inline"; // 固?
107    
108            /**
109             * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
110             *
111             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
112             * @og.rev 3.8.0.4 (2005/08/08) 帳票出力に準拠した方式に変更
113             * @og.rev 4.0.0.0 (2007/10/18) メ?ージリソース統? getResource().getMessage > getResource().getLabel )
114             * @og.rev 4.0.0.0 (2007/11/28) メソ?の戻り?をチェ?します?
115             *
116             * @return      後続????
117             */
118            @Override
119            public int doEndTag() {
120                    debugPrint();
121    
122    //              int rtnCode = EVAL_PAGE;
123                    final int rtnCode;
124    
125                    table = (DBTableModel)getObject( tableId );
126                    if( table == null || table.getRowCount() == 0 ) {
127                            rtnCode = SKIP_PAGE ;           // ペ?ジの残りの処?行わな??
128                    }
129                    else {
130    
131    //                      try {
132    
133                                    synchronized( ReportTableTag.class ) {
134                                            String reportDir  = HybsSystem.url2dir( REPORT_URL ) + SYSTEM_ID + HybsSystem.FS + listId ;
135                            //              String ykno       = HybsSystem.getDate( "yyyyMMddHHmmss" );
136                                            String ykno       = String.valueOf( Math.round( Math.random() * 1000000 ) ) ;
137    
138                                            create( reportDir,ykno ) ;
139    
140                                            // 処?ラス(reportClass)?HTML の場合?、Shell を起動して、VBS で EXCEL化が??
141                                            if( programFile != null && "HTML".equalsIgnoreCase( reportClass ) ) {
142                                                    String htmlFile = reportDir + HybsSystem.FS + ykno ;
143                                                    String cmd = makeShellCommand( htmlFile,listId );
144                                                    programRun( cmd );
145                                            }
146    
147                                            if( outFilename != null ) {
148                                                    File xlsFile = new File( reportDir,ykno + ".xls" );
149                                                    File outDir  = new File( HybsSystem.url2dir( outFileURL ) );
150    //                                              if( !outDir.exists() ) { outDir.mkdirs(); }
151                                                    if( !outDir.exists() && !outDir.mkdirs() ) {
152                                                            String errMsg = "??フォル?作?できませんでした?" + outDir + "]" ;
153                                                            throw new RuntimeException( errMsg );
154                                                    }
155                                                    File outFile = new File( outDir,outFilename );
156                    //                              File outFile = new File( outFileURL,outFilename );
157                                                    FileUtil.copy(  xlsFile , outFile );
158    
159    //                                              String msg = getResource().getMessage( "MSG0003" )              // MSG0003=ファイルの登録が完?ました?
160                                                    String msg = getResource().getLabel( "MSG0003" )                // MSG0003=ファイルの登録が完?ました?
161                                                                            + HybsSystem.BR
162    //                                                                      + getResource().getMessage( "MSG0022" )         // MSG0022=ファイル?
163                                                                            + getResource().getLabel( "MSG0022" )   // MSG0022=ファイル?
164                                                                            + ":" + outFile.getAbsolutePath() ;
165                                                    jspPrint( msg );
166    
167    //                                              if( direct ) {
168    //                                                      directLoad( outFile.getAbsolutePath(),outFilename );
169    //                                                      directLoad( xlsFile.getAbsolutePath(),outFilename );
170    //                                              }
171                                            }
172    //                                      else {
173    //                                              String redirectUrl = StringUtil.urlAppend( sys( "CONTEXT_URL" ),
174    //                                                                                              REPORT_URL + SYSTEM_ID + "/" +
175    //                                                                                              listId + "/" + ykno + ".xls" ) ;
176    //                                              HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
177    //                                              response.sendRedirect( response.encodeRedirectURL( redirectUrl ) );
178    //                                      }
179                                    }
180    //                      }
181    //                      catch(IOException ex) {
182    //                              String errMsg = "Error in ReportTableTag: " + toString();
183    //                              throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並び?更
184    //                      }
185                            rtnCode = EVAL_PAGE ;
186                    }
187    
188                    return( rtnCode );
189            }
190    
191            /**
192             * タグリブオブジェクトをリリースします?
193             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
194             *
195             * @og.rev 2.0.0.4 (2002/09/27) カスタ?グの release() メソ?を?追?
196             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
197             * @og.rev 3.1.3.0 (2003/04/10) REPORT_ENCODE(帳票エンコー?ング)を利用するように修正?
198             * @og.rev 3.8.0.4 (2005/08/08) filename 削除、listId ,programFile 追?,
199             *
200             */
201            @Override
202            protected void release2() {
203                    super.release2();
204                    headerKeys              = null;
205                    headerVals              = null;
206                    footerKeys              = null;
207                    footerVals              = null;
208                    pageEndCut              = true;
209                    fileURL                 = BASE_URL;
210                    outFileURL              = BASE_URL;
211                    outFilename             = null;                 // 出力ファイル?
212                    reportClass             = "HTML";
213                    table                   = null;
214                    tableId                 = HybsSystem.TBL_MDL_KEY ;
215                    listId                  = null ;                // 3.8.0.4 (2005/08/08)
216                    programFile             = null ;                // 3.8.0.4 (2005/08/08)
217    //              direct                  = false;
218            }
219    
220            /**
221             * TableWriter の実オブジェクトを生?して?PrintWriter に書き込みます?
222             *
223             * @og.rev 3.1.3.0 (2003/04/10) REPORT_ENCODE(帳票エンコー?ング)を利用するように修正?
224             * @og.rev 3.5.4.3 (2004/01/05) HTMLDBTableReport のクラス名変更?
225             * @og.rev 3.6.0.0 (2004/09/17) メソ?名?変更。setInputFile ?setTemplateFile
226             * @og.rev 3.8.0.0 (2005/06/07) setTemplateFile メソ?の引数?String  ?File に変更
227             * @og.rev 3.8.0.4 (2005/08/08) 帳票出力に準拠した方式に変更
228             * @og.rev 4.0.0.0 (2005/01/31) lang ?ResourceManager へ変更
229             *
230             * @param       reportDir       出力ディレクトリ?
231             * @param       ykno            要求番号
232             */
233            private void create( final String reportDir,final String ykno )  {
234    
235                    String className = "org.opengion.hayabusa.report.DBTableReport_" + reportClass  ;
236                    DBTableReport report = (DBTableReport)HybsSystem.newInstance( className );      // 3.5.5.3 (2004/04/09)
237    
238                    String MODELDIR = HybsSystem.url2dir( fileURL ) ;
239    
240                    File templateFile      = null;
241                    File firstTemplateFile = null;
242    
243                    // 本来は、各クラス中で処?べき?そ?ためのオブジェクト指向なの?ら?
244                    if( "HTML".equalsIgnoreCase( reportClass ) ) {
245                            templateFile      = FileUtil.checkFile( MODELDIR, listId + ".html" , 1 );
246                            firstTemplateFile = FileUtil.checkFile( MODELDIR, listId + "_FIRST.html" ,1 );
247                    }
248                    else if( "Excel".equalsIgnoreCase( reportClass ) ) {
249                            templateFile      = FileUtil.checkFile( MODELDIR, listId + ".xls" , 1 );
250                    }
251                    else {
252                            String errMsg = "リポ?トクラスがサポ?ト外です?[" + reportClass + "]"
253                                                    + "クラスは、HTML、Excel のみサポ?トされて?す?" ;
254                            throw new RuntimeException( errMsg );
255                    }
256    
257                    FileUtil.copy( templateFile,new File( reportDir ) );
258    
259                    report.setDBTableModel( table );
260                    report.setTemplateFile( templateFile ); // 3.6.0.0 (2004/09/17)
261                    report.setFirstTemplateFile( firstTemplateFile );       // 3.6.0.0 (2004/09/17)
262                    report.setOutputDir( reportDir );
263                    report.setOutputFileKey( ykno );
264                    report.setHeaderKeys( headerKeys );
265                    report.setHeaderVals( headerVals );
266                    report.setFooterKeys( footerKeys );
267                    report.setFooterVals( footerVals );
268                    report.setPageEndCut( pageEndCut );
269                    report.setResourceManager( getResource() );     // 4.0.0 (2005/01/31)
270                    report.setListId( listId );             // 3.6.1.0 (2005/01/05)
271                    report.writeReport();
272            }
273    
274            /**
275             * 【TAG?通常使?せん)sessionから?す?DBTableModelオブジェクト? ID?
276             *
277             * @og.tag
278             * 表示処?に???ポインタを書き換えた)DBTableModelオブジェクトを
279             * 同じキーで、sessionに登録します?
280             * 初期値は、HybsSystem.TBL_MDL_KEY です?
281             *
282             * @param   tableId sessionに登録する時? ID
283             */
284            public void setTableId( final String tableId ) {
285                    this.tableId = nval( getRequestParameter( tableId ), this.tableId );
286            }
287    
288            /**
289             * 【TAG】帳票IDを指定します?
290             *
291             * @og.tag
292             * 雛形ファイルは、帳票ID.html となります?また?ファースト?ージ対応?場合??
293             * 帳票ID_FIRST.html になります?
294             * なお?filename 属?が指定された場合?、そちらが優先されます?
295             *
296             * @og.rev 3.8.0.4 (2005/08/08) 新規追?
297             *
298             * @param       listId  帳票ID
299             */
300            public void setListId( final String listId ) {
301                    this.listId = nval( getRequestParameter( listId ), this.listId );
302            }
303    
304            /**
305             * 【TAG】固定部の{@KEY} の KEY 部?CSV形式で??します?
306             *
307             * @og.tag
308             * カンマで??できます?
309             * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します?
310             * こうしな???タ自身にカンマを持って?場合に?をミスる為です?
311             *
312             * @og.rev 3.5.6.2 (2004/07/05) 先に配?に?してからリクエスト変数の値を取?
313             *
314             * @param   hKeys 固定部の key
315             */
316            public void setHeaderKeys( final String hKeys ) {
317                    headerKeys = getCSVParameter( hKeys );
318            }
319    
320            /**
321             * 【TAG】固定部のKEY に対応する?をCSV形式で??します?
322             *
323             * @og.tag
324             * カンマで??で、リクエスト情報でも設定できます?
325             * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します?
326             * こうしな???タ自身にカンマを持って?場合に?をミスる為です?
327             *
328             * @og.rev 3.5.6.2 (2004/07/05) 先に配?に?してからリクエスト変数の値を取?
329             *
330             * @param   hVals 固定部の値
331             */
332            public void setHeaderVals( final String hVals ) {
333                    headerVals = getCSVParameter( hVals );
334            }
335    
336            /**
337             * 【TAG】繰り返し部の終?に表示する key 部?CSV形式で??します?
338             *
339             * @og.tag
340             * カンマで??できます?
341             * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します?
342             * こうしな???タ自身にカンマを持って?場合に?をミスる為です?
343             *
344             * @og.rev 3.5.6.2 (2004/07/05) 先に配?に?してからリクエスト変数の値を取?
345             *
346             * @param   ftKeys 繰り返し部の終?に表示する key
347             */
348            public void setFooterKeys( final String ftKeys ) {
349                    footerKeys = getCSVParameter( ftKeys );
350            }
351    
352            /**
353             * 【TAG】固定部のKEY に対応する?をCSV形式で??します?
354             *
355             * @og.tag
356             * カンマで??で、リクエスト情報でも設定できます?
357             * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します?
358             * こうしな???タ自身にカンマを持って?場合に?をミスる為です?
359             *
360             * @og.rev 3.5.6.2 (2004/07/05) 先に配?に?してからリクエスト変数の値を取?
361             * @og.rev 3.8.1.2 (2005/12/19) footer 関連の値とpageEndCut の関係を解除します?
362             *
363             * @param   ftVals 繰り返し部の終?に表示する値
364             */
365            public void setFooterVals( final String ftVals ) {
366                    footerVals = getCSVParameter( ftVals );
367            }
368    
369            /**
370             * 【TAG】??ー部(繰り返し部)がなくなったときに、それ以降を表示するかど?[true/false]を指定しま?初期値:true)?
371             *
372             * @og.tag
373             * true では、それ以降を出力しません?
374             * 初期値は "true" (なくなった時点で、?力しな??)です?
375             *
376             * @og.rev 3.8.1.2 (2005/12/19) footer 関連の値とpageEndCut の関係を解除します?
377             *
378             * @param   peCut 繰り返し部の終?に継続??るかど? (true:処?な?false:処??
379             */
380            public void setPageEndCut( final String peCut ) {
381                    pageEndCut = nval( getRequestParameter( peCut ),pageEndCut );
382            }
383    
384            /**
385             * 【TAG】雛型?HTMLファイルの保存してある ?レクトリを指定します?
386             *
387             * @og.tag
388             * こ?属?で?される?レクトリのファイルを読み取ります?
389             * ?方法???常の fileURL 属?と同様に、?頭が?'/' (UNIX) また??文字目が?
390             * ":" (Windows)の場合?、指定?URLそ?ままの?レクトリに、そ?な??合??
391             * シス?パラメータ の FILE_URL 属?で??フォル??下に、作?されます?
392             * fileURL = "{@USER.ID}" と?すると、FILE_URL 属?で??フォル??下に?
393             * さらに、各個人ID別のフォル?作?して、そこを操作します?
394             *
395             * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソ?の利用
396             * @og.rev 4.0.0.0 (2007/11/20) ?された?レクトリ名??が"\"or"/"で終わって???合に?/"を付加する?
397             *
398             * @param       url 雛型のHTMLファイルの?レクトリ
399             */
400            public void setFileURL( final String url ) {
401                    String furl = nval( getRequestParameter( url ),null );
402                    if( furl != null ) {
403                            char ch = furl.charAt( furl.length()-1 );
404                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
405                            fileURL = StringUtil.urlAppend( fileURL,furl );
406                    }
407            }
408    
409            /**
410             * 【TAG】HTMLファイルをEXCEL変換する場合に使用するBATファイルを指定します?
411             *
412             * @og.tag
413             * ファイルは、フルパスで?してください?
414             * ?がな??合?、変換処??行いません?
415             * 通常は、dbdef2/def/Script/runExcelPrint.bat を呼び出してください?
416             * 初期値は、null(変換処?な?です?
417             *
418             * @og.rev 3.8.0.4 (2005/08/08) 新規追?
419             *
420             * @param   programFile プログラ?ァイル?
421             */
422            public void setProgramFile( final String programFile ) {
423                    this.programFile = nval( getRequestParameter( programFile ),this.programFile );
424            }
425    
426            /**
427             * 【TAG】?力HTMLファイルの保存してある?レクトリを指定します?
428             *
429             * @og.tag
430             * こ?属?で?される?レクトリにファイルを?力します?
431             * ?方法???常の fileURL 属?と同様に、?頭が?'/' (UNIX) また??文字目が?
432             * ":" (Windows)の場合?、指定?URLそ?ままの?レクトリに、そ?な??合??
433             * シス?パラメータ の FILE_URL 属?で??フォル??下に、作?されます?
434             * fileURL = "{@USER.ID}" と?すると、FILE_URL 属?で??フォル??下に?
435             * さらに、各個人ID別のフォル?作?して、そこに出力します?
436             *
437             * @og.rev 4.0.0.0 (2007/11/20) ?された?レクトリ名??が"\"or"/"で終わって???合に?/"を付加する?
438             *
439             * @param       url 出力HTMLファイルの?レクトリ
440             */
441            public void setOutFileURL( final String url ) {
442                    String furl = nval( getRequestParameter( url ),null );
443                    if( furl != null ) {
444                            char ch = furl.charAt( furl.length()-1 );
445                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
446                            outFileURL = StringUtil.urlAppend( outFileURL,furl );
447                    }
448            }
449    
450            /**
451             * 【TAG】ファイルを作?するとき?出力ファイル名をセ?します?
452             *
453             * @og.tag ファイルを作?するとき?出力ファイル名をセ?します?
454             *
455             * @param   filename 出力ファイル?
456             */
457            public void setOutFilename( final String filename ) {
458                    this.outFilename = nval( getRequestParameter( filename ),this.outFilename );
459            }
460    
461            /**
462             * 【TAG】実際に書き?すクラス名?略称(DBTableReport_**** の ****)をセ?しま?初期値:HTML)?
463             *
464             * @og.tag
465             * これは、org.opengion.hayabusa.report 以下? DBTableReport_**** クラスの **** ?
466             * 与えます?これら?、DBTableReport インターフェースを継承したサブクラスです?
467             * 初期値は?HTML" です?
468             * 属?クラス定義の {@link org.opengion.hayabusa.report.DBTableReport DBTableReport} を参照願います?
469             *
470             * @param   reportClass クラス?の略称)
471             * @see         org.opengion.hayabusa.report.DBTableReport  DBTableReportのサブクラス
472             */
473            public void setReportClass( final String reportClass ) {
474                    this.reportClass = nval( getRequestParameter( reportClass ),this.reportClass );
475            }
476    
477            /**
478             * 【TAG】結果をダイレクトにEXCEL起動するかど?[true/false]を指定しま?初期値:false[ファイル])?
479             *
480             * @og.tag 結果をダイレクトに EXCEL ファイルとして出力するかど?をセ?します?
481             *
482             * @param  flag ?レク?true)??ファイル(そ??
483             */
484    //      public void setDirect( final String flag ) {
485    //              direct = nval( getRequestParameter( flag ),direct );
486    //      }
487    
488            /**
489             * シェルコマンド???を作?します?
490             *
491             * 処?ラス(reportClass)?HTML の場合?、Shell を起動して、VBS で EXCEL化が??
492             *
493             * @og.rev 3.8.0.4 (2005/08/08) 新規追?
494             * @og.rev 3.8.0.8 (2005/10/03) ??モングループ??ォルト?設?
495             *
496             * @param       htmlFile        パ?サ済みのHTMLファイル(拡張子な?
497             * @param       listId  雛形ファイル(帳票ID)
498             *
499             * @return シェルコマンド???
500             */
501            private String makeShellCommand( final String htmlFile,final String listId ) {
502                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
503    
504                    buf.append( programFile ).append( " " );                // 実行するコマン?
505                    buf.append( "\"" );
506                    buf.append( htmlFile ).append( "_*.html\" " );  // 入力HTMLファイル
507                    buf.append( "\"xls\" " );                                               // プリンタ?
508                    // ?ーファイルを指定する?がある?
509                    buf.append( "\"" );
510                    buf.append( htmlFile ).append( ".xls\" " );             // ?ー出力ファイル
511                    buf.append( listId );                                                   // モ?ファイル?
512                    buf.append( " NULL" );                                                  // ?ー??モングルー?
513    
514                    return buf.toString();
515            }
516    
517            /**
518             * 実際のレポ?ト?力??行います?
519             *
520             * 処?ラス(reportClass)?HTML の場合?、Shell を起動して、VBS で EXCEL化が??
521             *
522             * @og.rev 3.8.0.4 (2005/08/08) 新規追?
523             *
524             * @param       shellCmd        シェルを実行するコマンド文字?
525             */
526            private void programRun( final String shellCmd ) {
527                    Shell shell = new Shell();
528                    shell.setCommand( shellCmd,true );              // BATCHプロセスで実行す?
529                    shell.setWait( true );                                  // プロセスの終??
530                    shell.setTimeout( TIMEOUT );                    // 3.6.1.0 (2005/01/05) Shell の タイ?ウトを設?
531    
532                    int rtnCode = shell.exec();                             // 0 は正常終?示?
533    
534                    if( rtnCode != 0 ) {
535                            String errMsg = "Shell Command exequte Error." + HybsSystem.CR
536                                                    + "=============================="
537                                                    + shellCmd + HybsSystem.CR
538                                                    + shell.getStdoutData() + HybsSystem.CR
539                                                    + shell.getStderrData() + HybsSystem.CR ;
540                            throw new HybsSystemException( errMsg );                // 3.5.5.4 (2004/04/15) 引数の並び?更
541                    }
542            }
543    
544            /**
545             * Excel ファイルをダイレクトで返す forward 処?行います?
546             *
547             * @og.rev 4.0.0.0 (2007/06/11) 新規追?
548             *
549             * @param       fwdUrl  実際に転送するファイルアドレス
550             * @param       fname   転送で返すファイル?
551             */
552    //      private void directLoad( final String fwdUrl,final String fname ) {
553    //              HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
554    //
555    //              try {
556    //                      String url = response.encodeRedirectURL( fwdUrl );      // 3.5.4.9 (2004/02/25)
557    //                      String filename = StringUtil.urlEncode( fname );
558    //
559    //                      (response).setHeader( "Content-Disposition",disposition + "; filename=\"" + filename + "\"" );
560    //                      response.sendRedirect( url );
561    //      //              pageContext.forward( url );
562    //              } catch(IOException ex) {
563    //                      String errMsg = "フォワードでIOエラーが発生しました? + toString();
564    //                      throw new HybsSystemException( errMsg,ex );
565    ////            } catch( ServletException ex) {
566    ////                    String errMsg = "フォワードでServletエラーが発生しました? + toString();
567    ////                    throw new HybsSystemException( errMsg,ex );
568    //              }
569    //      }
570    
571            /**
572             * タグの名称を?返します?
573             * 自??身のクラス名より?自動的に取り出せな?め?こ?メソ?をオーバ?ライドします?
574             *
575             * @og.rev 4.0.0.0 (2005/01/31) 新規追?
576             *
577             * @return  タグの名称
578             */
579            @Override
580            protected String getTagName() {
581                    return "report" ;
582            }
583    
584            /**
585             * シリアライズ用のカスタ?リアライズ書き込みメソ?
586             *
587             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
588             * @serialData
589             *
590             * @param       strm    ObjectOutputStreamオブジェク?
591             */
592            private void writeObject( final ObjectOutputStream strm ) throws IOException {
593                    strm.defaultWriteObject();
594            }
595    
596            /**
597             * シリアライズ用のカスタ?リアライズ読み込みメソ?
598             *
599             * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します?
600             *
601             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
602             * @serialData
603             *
604             * @param       strm    ObjectInputStreamオブジェク?
605             * @see #release2()
606             */
607            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
608                    strm.defaultReadObject();
609            }
610    
611            /**
612             * こ?オブジェクト???表現を返します?
613             * 基本???目?使用します?
614             *
615             * @return こ?クラスの??表現
616             */
617            @Override
618            public String toString() {
619                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
620                                    .println( "VERSION"             ,VERSION        )
621                                    .println( "headerKeys"          ,headerKeys             )
622                                    .println( "headerVals"          ,headerVals             )
623                                    .println( "footerKeys"          ,footerKeys             )
624                                    .println( "footerVals"          ,footerVals             )
625                                    .println( "pageEndCut"          ,pageEndCut             )
626                                    .println( "fileURL"                     ,fileURL                )
627                                    .println( "outFileURL"          ,outFileURL             )
628                                    .println( "outFilename"         ,outFilename    )
629                                    .println( "reportClass"         ,reportClass    )
630                                    .println( "tableId"                     ,tableId                )
631                                    .println( "listId"                      ,listId                 )
632                                    .println( "programFile"         ,programFile    )
633                                    .println( "REPORT_FILE_URL"     ,REPORT_URL             )
634                                    .println( "SYSTEM_ID"           ,SYSTEM_ID              )
635                                    .println( "TIMEOUT"                     ,TIMEOUT                )
636                                    .println( "BASE_URL"            ,BASE_URL               )
637                                    .println( "Other..."    ,getAttributes().getAttribute() )
638                                    .fixForm().toString() ;
639            }
640    }