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 static org.opengion.fukurou.util.StringUtil.nval; 019 020 import java.io.IOException; 021 import java.io.ObjectInputStream; 022 import java.io.ObjectOutputStream; 023 024 import org.opengion.fukurou.util.StringUtil; 025 import org.opengion.hayabusa.common.HybsSystem; 026 import org.opengion.hayabusa.db.DBTableModel; 027 import org.opengion.hayabusa.db.DBTableModelUtil; 028 import org.opengion.hayabusa.report2.QueueManager_DIRECT; 029 030 /** 031 * 検索結果の DBTableModelオブジェクトをレポ?ト形式に変換するタグです? 032 * 033 * ??タ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて? 034 * 外部からコントロールすることで、各種形式で ??タ(DBTableModel)を表示させること? 035 * 可能です? 036 * こ?タグを使用するには、OpenOffice.orgのモジュールがインスト?ルされてて??があります? 037 * また?出力するために帳票シス?関連の??タ設定やマスタ設定????ありません? 038 * 039 * @og.formSample 040 * ●形式?lt;og:report fileURL="[???]" listId="[???]" ??? /> 041 * ●body?な? 042 * 043 * ●Tag定義?? 044 * <og:report2 045 * fileURL 【TAG】雛型?HTMLファイルの保存してある ?レクトリを指定しま? 046 * listId ○?TAG】帳票IDを指定しま???)? 047 * outFileURL 【TAG】?力HTMLファイルの保存してある?レクトリを指定しま? 048 * outFilename ○?TAG】ファイルを作?するとき?出力ファイル名をセ?しま???)? 049 * headerKeys 【TAG】固定部の{@KEY} の KEY 部?CSV形式で??しま? 050 * headerVals 【TAG】固定部のKEY に対応する?をCSV形式で??しま? 051 * footerKeys 【TAG】繰り返し部の終?に表示する key 部?CSV形式で??しま? 052 * footerVals 【TAG】固定部のKEY に対応する?をCSV形式で??しま? 053 * pageEndCut 【TAG】??ー部(繰り返し部)がなくなったときに、それ以降を表示するかど?[true/false]を指定しま?初期値:true) 054 * useLocalResource 【TAG】各シス?のリソース(ローカルリソース)を使用するか[true/false]を指定しま?初期値:true) 055 * useSheetName 【TAG】PAGEBREAKカラ??値を?シート名として使?ど?[true/false]を指定しま?初期値:false) 056 * fgrun 【TAG】?力方法を?しま?初期値:P(PDF出?) 057 * printerName 【TAG】?リンター名を?しま? 058 * language 【TAG】タグ?で使用する?コード[ja/en/zh/…]を指定しま? 059 * scope 【TAG】キャ?ュする場合?スコープ[request/page/session/applicaton]を指定しま?初期値:session) 060 * tableId 【TAG?通常使?せん)sessionから?す?DBTableModelオブジェクト? ID 061 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 062 * /> 063 * 064 * ●使用? 065 * 066 * @og.group そ?他?? 067 * 068 * @version 4.0 069 * @author Hiroki Nakamura 070 * @since JDK5.0, 071 */ 072 public class ReportTableTag2 extends CommonTagSupport { 073 private static final String VERSION = "5.7.6.2 (2014/05/16)" ; 074 075 private static final long serialVersionUID = 576220140516L ; 076 077 private final String BASE_URL = HybsSystem.sys( "FILE_URL" ); 078 079 private String fileURL = BASE_URL; // 雛形ファイルURL 080 private String listId = null; // 帳票ID 081 private String outFileURL = BASE_URL; // 出力ファイルURL 082 private String outFilename = null; // 出力ファイル? 083 private String[] headerKeys = null; // 固定部の{@KEY} の KEY 部??する?カンマで??できる? 084 private String[] headerVals = null; // 固定部のKEY に対応する?を指定する? {@KEY} に置き換わる? 085 private String[] footerKeys = null; // 繰り返し部の終?に表示する key 部??する?カンマで??できる? 086 private String[] footerVals = null; // 繰り返し部の終?に表示する key に対する値を指定する? 087 private boolean pageEndCut = true; // ペ?ジエンドカ?をするか 088 private boolean useLocalResource= true; // ローカルリソースを使用する? 089 private boolean useSheetName = false; // 5.7.6.2 (2014/05/16) PAGEBREAKカラ??値を?シート名として使?ど?? 090 091 private String fgrun = "P"; // PDF出? 092 private String printerName = null; // プリンタ? 093 094 private String tableId = HybsSystem.TBL_MDL_KEY ; 095 096 private transient DBTableModel body = null; 097 private transient DBTableModel header = null; 098 private transient DBTableModel footer = null; 099 100 /** 101 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします? 102 * 103 * @return 後続???? 104 */ 105 @Override 106 public int doEndTag() { 107 debugPrint(); 108 109 final int rtnCode; 110 111 body = (DBTableModel)getObject( tableId ); 112 if( body == null || body.getRowCount() == 0 ) { 113 rtnCode = SKIP_PAGE ; // ペ?ジの残りの処?行わな?? 114 } 115 else { 116 exec(); 117 rtnCode = EVAL_PAGE ; 118 } 119 120 return rtnCode ; 121 } 122 123 /** 124 * タグリブオブジェクトをリリースします? 125 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 126 * 127 * @og.rev 5.7.6.2 (2014/05/16) PAGEBREAKカラ??値を?シート名として使?ど?? 128 */ 129 @Override 130 protected void release2() { 131 super.release2(); 132 fileURL = BASE_URL; 133 listId = null; 134 outFileURL = BASE_URL; 135 outFilename = null; 136 headerKeys = null; 137 headerVals = null; 138 footerKeys = null; 139 footerVals = null; 140 pageEndCut = true; 141 useLocalResource= true; 142 useSheetName = false; // 5.7.6.2 (2014/05/16) PAGEBREAKカラ??値を?シート名として使?ど?? 143 fgrun = "P"; 144 printerName = null; 145 tableId = HybsSystem.TBL_MDL_KEY ; 146 body = null; 147 header = null; 148 footer = null; 149 } 150 151 /** 152 * 帳票処?行います? 153 * 154 * @og.rev 4.3.3.4 (2008/11/01) ヘッ??、フ?ー値が設定されて???合にNullPointerExceptionが?るバグを修正 155 * @og.rev 4.3.3.4 (2008/11/01) 雛形のパス及?、?力?のパスを実ディレクトリのパスに変換 156 * @og.rev 5.7.6.2 (2014/05/16) PAGEBREAKカラ??値を?シート名として使?ど?? 157 * 158 */ 159 private void exec() { 160 QueueManager_DIRECT manager = new QueueManager_DIRECT(); 161 manager.setListId( listId ); 162 manager.setLang( getLanguage() ); 163 manager.setOutputName( HybsSystem.url2dir( outFileURL ) + outFilename ); 164 manager.setOutputType( fgrun ); 165 manager.setTemplateName( HybsSystem.url2dir( fileURL ) + listId ); 166 manager.setPrinterName( printerName ); 167 manager.setFgcut( pageEndCut ); 168 manager.setFglocal( useLocalResource ); 169 manager.setUseSheetName( useSheetName ); // 5.7.6.2 (2014/05/16) PAGEBREAKカラ??値を?シート名として使?ど?? 170 171 manager.setBody( body ); 172 173 // 4.3.3.4 (2008/11/01) 174 if( headerVals != null && headerVals.length > 0 ) { 175 String[][] hvals = new String[headerVals.length][1]; 176 hvals[0] = headerVals; 177 header = DBTableModelUtil.makeDBTable( headerKeys, hvals, getResource() ); 178 manager.setHeader( header ); 179 } 180 181 // 4.3.3.4 (2008/11/01) 182 if( footerVals != null && footerVals.length > 0 ) { 183 String[][] fvals = new String[footerVals.length][1]; 184 fvals[0] = footerVals; 185 footer = DBTableModelUtil.makeDBTable( footerKeys, fvals, getResource() ); 186 manager.setFooter( footer ); 187 } 188 189 manager.create(); 190 manager.waitExec(); 191 } 192 193 /** 194 * 【TAG】雛型?HTMLファイルの保存してある ?レクトリを指定します? 195 * 196 * @og.tag 197 * こ?属?で?される?レクトリのファイルを読み取ります? 198 * ?方法???常の fileURL 属?と同様に、?頭が?'/' (UNIX) また??文字目が? 199 * ":" (Windows)の場合?、指定?URLそ?ままの?レクトリに、そ?な??合?? 200 * シス?パラメータ の FILE_URL 属?で??フォル??下に、作?されます? 201 * fileURL = "{@USER.ID}" と?すると、FILE_URL 属?で??フォル??下に? 202 * さらに、各個人ID別のフォル?作?して、そこを操作します? 203 * 204 * @param url 雛型のHTMLファイルの?レクトリ 205 */ 206 public void setFileURL( final String url ) { 207 String furl = nval( getRequestParameter( url ),null ); 208 if( furl != null ) { 209 char ch = furl.charAt( furl.length()-1 ); 210 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; } 211 fileURL = StringUtil.urlAppend( fileURL,furl ); 212 } 213 } 214 215 /** 216 * 【TAG】帳票IDを指定します? 217 * 218 * @og.tag 219 * 帳票IDを指定します? 220 * 221 * @param listId 帳票ID 222 */ 223 public void setListId( final String listId ) { 224 this.listId = nval( getRequestParameter( listId ), this.listId ); 225 } 226 227 /** 228 * 【TAG】?力HTMLファイルの保存してある?レクトリを指定します? 229 * 230 * @og.tag 231 * こ?属?で?される?レクトリにファイルを?力します? 232 * ?方法???常の fileURL 属?と同様に、?頭が?'/' (UNIX) また??文字目が? 233 * ":" (Windows)の場合?、指定?URLそ?ままの?レクトリに、そ?な??合?? 234 * シス?パラメータ の FILE_URL 属?で??フォル??下に、作?されます? 235 * fileURL = "{@USER.ID}" と?すると、FILE_URL 属?で??フォル??下に? 236 * さらに、各個人ID別のフォル?作?して、そこに出力します? 237 * 238 * @param url 出力HTMLファイルの?レクトリ 239 */ 240 public void setOutFileURL( final String url ) { 241 String furl = nval( getRequestParameter( url ),null ); 242 if( furl != null ) { 243 char ch = furl.charAt( furl.length()-1 ); 244 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; } 245 outFileURL = StringUtil.urlAppend( outFileURL,furl ); 246 } 247 } 248 249 /** 250 * 【TAG】ファイルを作?するとき?出力ファイル名をセ?します? 251 * 252 * @og.tag 253 * ファイルを作?するとき?出力ファイル名をセ?します? 254 * 紙に印字する?合などファイルに出力しな??合?不要です? 255 * 256 * @param filename 出力ファイル? 257 */ 258 public void setOutFilename( final String filename ) { 259 this.outFilename = nval( getRequestParameter( filename ),this.outFilename ); 260 } 261 262 /** 263 * 【TAG】固定部の{@KEY} の KEY 部?CSV形式で??します? 264 * 265 * @og.tag 266 * カンマで??できます? 267 * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します? 268 * こうしな???タ自身にカンマを持って?場合に?をミスる為です? 269 * 270 * @param hKeys 固定部の key 271 */ 272 public void setHeaderKeys( final String hKeys ) { 273 headerKeys = getCSVParameter( hKeys ); 274 } 275 276 /** 277 * 【TAG】固定部のKEY に対応する?をCSV形式で??します? 278 * 279 * @og.tag 280 * カンマで??で、リクエスト情報でも設定できます? 281 * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します? 282 * こうしな???タ自身にカンマを持って?場合に?をミスる為です? 283 * 284 * @param hVals 固定部の値 285 */ 286 public void setHeaderVals( final String hVals ) { 287 headerVals = getCSVParameter( hVals ); 288 } 289 290 /** 291 * 【TAG】繰り返し部の終?に表示する key 部?CSV形式で??します? 292 * 293 * @og.tag 294 * カンマで??できます? 295 * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します? 296 * こうしな???タ自身にカンマを持って?場合に?をミスる為です? 297 * 298 * @param ftKeys 繰り返し部の終?に表示する key 299 */ 300 public void setFooterKeys( final String ftKeys ) { 301 footerKeys = getCSVParameter( ftKeys ); 302 } 303 304 /** 305 * 【TAG】固定部のKEY に対応する?をCSV形式で??します? 306 * 307 * @og.tag 308 * カンマで??で、リクエスト情報でも設定できます? 309 * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します? 310 * こうしな???タ自身にカンマを持って?場合に?をミスる為です? 311 * 312 * @param ftVals 繰り返し部の終?に表示する値 313 */ 314 public void setFooterVals( final String ftVals ) { 315 footerVals = getCSVParameter( ftVals ); 316 } 317 318 /** 319 * 【TAG】??ー部(繰り返し部)がなくなったときに、それ以降を表示するかど?[true/false]を指定しま?初期値:true)? 320 * 321 * @og.tag 322 * true では、それ以降を出力しません? 323 * 初期値は "true" (なくなった時点で、?力しな??)です? 324 * 325 * @param peCut 繰り返し部の終?に継続??るかど? (true:処?な?false:処?? 326 */ 327 public void setPageEndCut( final String peCut ) { 328 pageEndCut = nval( getRequestParameter( peCut ),pageEndCut ); 329 } 330 331 /** 332 * 【TAG】各シス?のリソース(ローカルリソース)を使用するか[true/false]を指定しま?初期値:true)? 333 * 334 * @og.tag 335 * true の場合??ス?に登録されたリソース??を使用して帳票??タが変換されます? 336 * false の場合?、帳票??モンが起動して?シス?(通常は'GE')のリソースが適用されます? 337 * 初期値は "true" (ローカルリソースを使用する)です? 338 * 339 * @param fgl ローカルリソースを使用する?true:処?な?false:処?? 340 */ 341 public void setUseLocalResource( final String fgl ) { 342 useLocalResource = nval( getRequestParameter( fgl ),useLocalResource ); 343 } 344 345 /** 346 * 【TAG】PAGEBREAKカラ??値を?シート名として使?ど?をセ?しま?初期値:false)? 347 * 348 * @og.tag 349 * PAGEBREAK で、シートチェンジを行う場合?シート名も指定したい場合があります? 350 * そ?場合?こ?、useSheetName="true" とすることで、PAGEBREAKカラ??値を?シート名として 351 * 使用します? 352 * useSheetName="false" の場合??Page"+ペ?ジ番号+"_Row"+現在行番号 がシート名になります? 353 * 354 * PAGEBREAK は、FIRSTシート雛形にも適用されます? 355 * ちなみに、FIRSTシート雛形は、特殊で、useSheetName="false" の場合でも? 356 * FIRST_**** などと記述した場合??*** ??をシート名に使用します? 357 * FIRST ?の場合?、従来と同じシート名になります? 358 * 初期値は、互換性を?慮し?false:シート名として使用しな?です? 359 * 360 * @og.rev 5.7.6.2 (2014/05/16) 新規追? 361 * 362 * @param useSName PAGEBREAKカラ??シート名使用可否[true:使用/false:使用しない] 363 */ 364 public void setUseSheetName( final String useSName ) { 365 useSheetName = nval( getRequestParameter( useSName ),useSheetName ); 366 } 367 368 /** 369 * 【TAG】?力方法を?しま?初期値:P(PDF出?)? 370 * 371 * @og.tag 372 * 出力方法?コード?、FGRUNのコードリソースと同じも?が指定できます? 373 * 初期値は "P" (PDF出?です? 374 * 375 * @param flg 出力方? 376 */ 377 public void setFgrun( final String flg ) { 378 fgrun= nval( getRequestParameter( flg ),fgrun ); 379 } 380 381 /** 382 * 【TAG】?リンター名を?します? 383 * 384 * @og.tag 385 * プリンター名を?します?こ?プリンター名?帳票サーバ?上でのプリンタ名です? 386 * ファイル出力等?紙に印刷しな??合?不要です? 387 * 388 * @param ptnm プリンター? 389 */ 390 public void setPrinterName( final String ptnm ) { 391 printerName = nval( getRequestParameter( ptnm ),printerName ); 392 } 393 394 /** 395 * 【TAG?通常は使?せん)結果のDBTableModelを?sessionに登録するとき?キーを指定しま? 396 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])? 397 * 398 * @og.tag 399 * 検索結果より、DBTableModelオブジェクトを作?します?これを?下流?viewタグ等に 400 * 渡す?合に??常は、session を利用します?そ?場合?登録キーです? 401 * query タグを同時に実行して、結果を求める?合?同?モリに配置される為? 402 * こ? tableId 属?を利用して、メモリ空間を?ます? 403 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])? 404 * 405 * @param id sessionに登録する時? ID 406 */ 407 public void setTableId( final String id ) { 408 tableId = nval( getRequestParameter( id ), tableId ); 409 } 410 411 /** 412 * タグの名称を?返します? 413 * 自??身のクラス名より?自動的に取り出せな?め?こ?メソ?をオーバ?ライドします? 414 * 415 * @og.rev 4.0.0.0 (2005/01/31) 新規追? 416 * 417 * @return タグの名称 418 */ 419 @Override 420 protected String getTagName() { 421 return "report2" ; 422 } 423 424 /** 425 * シリアライズ用のカスタ?リアライズ書き込みメソ? 426 * 427 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 428 * @serialData ?のオブジェクト?、シリアライズされません? 429 * 430 * @param strm ObjectOutputStreamオブジェク? 431 * @throws IOException 入出力エラーが発生した?? 432 */ 433 private void writeObject( final ObjectOutputStream strm ) throws IOException { 434 strm.defaultWriteObject(); 435 } 436 437 /** 438 * シリアライズ用のカスタ?リアライズ読み込みメソ? 439 * 440 * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します? 441 * 442 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 443 * @serialData ?のオブジェクト?、シリアライズされません? 444 * 445 * @param strm ObjectInputStreamオブジェク? 446 * @see #release2() 447 * @throws IOException シリアライズに関する入出力エラーが発生した?? 448 * @throws ClassNotFoundException クラスを見つけることができなかった?? 449 */ 450 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 451 strm.defaultReadObject(); 452 } 453 454 /** 455 * こ?オブジェクト???表現を返します? 456 * 基本???目?使用します? 457 * 458 * @return こ?クラスの??表現 459 */ 460 @Override 461 public String toString() { 462 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 463 .println( "VERSION" ,VERSION ) 464 .println( "fileURL" ,fileURL ) 465 .println( "listId" ,listId ) 466 .println( "outFileURL" ,outFileURL ) 467 .println( "outFilename" ,outFilename ) 468 .println( "headerKeys" ,headerKeys ) 469 .println( "headerVals" ,headerVals ) 470 .println( "footerKeys" ,footerKeys ) 471 .println( "footerVals" ,footerVals ) 472 .println( "pageEndCut" ,pageEndCut ) 473 .println( "useLocalResource",useLocalResource ) 474 .println( "fgrun" ,fgrun ) 475 .println( "printerName" ,printerName ) 476 .println( "tableId" ,tableId ) 477 .println( "BASE_URL" ,BASE_URL ) 478 .println( "Other..." ,getAttributes().getAttribute() ) 479 .fixForm().toString() ; 480 } 481 }