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.io; 017 018import org.opengion.hayabusa.db.DBTableModel; 019import org.opengion.fukurou.util.HybsEntry; 020 021import java.io.PrintWriter; 022import java.util.List; 023 024/** 025 * DBTableModel インターフェース のオブジェクトをPrintWriter を用いて出力する為の,共通インターフェースです。 026 * 027 * @og.group ファイル出力 028 * 029 * @version 4.0 030 * @author Kazuhiko Hasegawa 031 * @since JDK5.0, 032 */ 033public interface TableWriter { 034 035 /** タブ項目区切り文字 */ 036 String TAB_SEPARATOR = "\t"; // タブ項目区切り文字 037 038 /** カンマ項目区切り文字 */ 039 String CSV_SEPARATOR = ","; // カンマ項目区切り文字 3.5.6.0 (2004/06/18) 040 041 /** 042 * DBTableModel から 各形式のデータを作成して,PrintWriter に書き出します。 043 * このメソッドは、EXCEL 書き出し時に使用します。 044 * 045 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 046 * @see #isExcel() 047 */ 048 void writeDBTable() ; 049 050 /** 051 * DBTableModel から 各形式のデータを作成して,PrintWriter に書き出します。 052 * 053 * @og.rev 3.5.4.3 (2004/01/05) 引数に PrintWriter を受け取るように変更します。 054 * 055 * @param writer PrintWriterオブジェクト 056 */ 057 void writeDBTable( final PrintWriter writer ) ; 058 059 /** 060 * DBTableModel をセットします。 061 * 062 * @og.rev 3.5.4.2 (2003/12/15) lang 引数も同時に設定します。 063 * 064 * @param table DBTableModelオブジェクト 065 * @param lang 言語 066 */ 067 void setDBTableModel( final DBTableModel table, final String lang ) ; 068 069 /** 070 * 内部の DBTableModel を返します。 071 * 072 * @return DBTableModelオブジェクト 073 */ 074 DBTableModel getDBTableModel() ; 075 076 /** 077 * DBTableModelの出力順をセットします。 078 * Label,Name,Size,Class,Data の各フィールドの頭文字のアルファベットで 079 * 出力順を設定します。 080 * 081 * @param headerSequence 出力順 (LNSCD など) 082 */ 083 void setHeaderSequence( final String headerSequence ) ; 084 085 /** 086 * DBTableModelの出力順を返します。 087 * Label,Name,Size,Class,Data の各フィールドの頭文字のアルファベットで 088 * 出力順を設定します。 089 * 090 * @return 出力順 (LNSCD など) 091 */ 092 String getHeaderSequence() ; 093 094 /** 095 * データを書き込む場合の,区切り文字をセットします。 096 * なお,このメソッドは,サブクラスによっては,使用しない場合があります。 097 * もし,使用しないサブクラスを作成する場合は, UnsupportedOperationException 098 * を throw するように,サブクラスで実装して下さい。 099 * 100 * @param separator 区切り文字 101 */ 102 void setSeparator( final String separator ) ; 103 104 /** 105 * DBTableModelのデータとして書き込むときに、追加モードで書き込むかどうか[true/false]を設定します。 106 * 107 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 108 * 109 * @param flag 追加モードで書き込むかどうか[true:追加モード/false:通常モード] 110 */ 111 void setAppend( final boolean flag ) ; 112 113 /** 114 * DBTableModelのデータとして書き込むときに、追加モードで書き込むかどうかを取得します。 115 * 116 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 117 * 118 * @return 追加モードで書き込むかどうか[true:追加モード/false:通常モード] 119 */ 120 boolean isAppend() ; 121 122 /** 123 * DBTableModelのデータとして書き込むときのシート名を設定します。 124 * これは、EXCEL追加機能として実装されています。 125 * 126 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 127 * 128 * @param sheetName シート名 129 */ 130 void setSheetName( final String sheetName ) ; 131 132 /** 133 * EXCEL雛型参考ファイルのシート名を設定します。 134 * これは、EXCEL追加機能として実装されています。 135 * 136 * EXCELファイルを書き出す時に、雛型として参照するシート名を指定します。 137 * これにより、複数の形式の異なるデータを順次書き出したり(appendモードを併用)する 138 * ことや、シートを指定して新規にEXCELを作成する場合にフォームを設定する事が可能になります。 139 * 初期値は、null(第一シート) です。 140 * 141 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 142 * 143 * @param sheetName シート名 144 */ 145 void setRefSheetName( final String sheetName ) ; 146 147 /** 148 * このクラスが、EXCEL対応機能を持っているかどうかを返します。 149 * 150 * EXCEL対応機能とは、シート名のセット、雛型参照ファイル名のセット、 151 * 書き込み元ファイルのFileオブジェクト取得などの、特殊機能です。 152 * 本来は、インターフェースを分けるべきと考えますが、taglib クラス等の 153 * 関係があり、問い合わせによる条件分岐で対応します。 154 * 155 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 156 * 157 * @return EXCEL対応機能を持っているかどうか 158 */ 159 boolean isExcel() ; 160 161 /** 162 * 出力先ディレクトリとファイル名をセットします。 163 * これは、EXCEL追加機能として実装されています。 164 * 165 * @og.rev 3.5.4.3 (2004/01/05) 新規作成 166 * @og.rev 6.0.2.0 (2014/09/19) ディレクトリとファイルを分けて管理します。 167 * 168 * @param directory 出力先ディレクトリ名 169 * @param filename 出力先ファイル名 170 */ 171 void setFilename( final String directory , final String filename ) ; 172 173 /** 174 * EXCEL雛型参考ファイル名をセットします。(DIR + Filename) 175 * これは、EXCEL追加機能として実装されています。 176 * 177 * @og.rev 3.5.4.3 (2004/01/05) 新規作成 178 * 179 * @param filename EXCEL雛型参考ファイル名 180 */ 181 void setRefFilename( final String filename ) ; 182 183 /** 184 * 雛形のシート名を、そのまま使用する(true)か、新規、または、外部指定のシート名を使用する(false)を指定します。(初期値:false[外部指定のシート名を使用])。 185 * 186 * ※ Ver5では、追記モード時に、指定シートが存在した場合は上書きします(初期値:false[上書きしない])。5.9.12.1 (2016/09/09) 187 * Ver6では、追記モード時に、雛形を指定できないため、雛形のシート名を、そのまま使用する(true)か、 188 * 新規、または、外部指定のシート名を使用する(false)を指定する属性になります。 189 * 190 * @og.rev 6.5.0.0 (2016/09/30) sheetOverwrite で、雛形シートの使用時に、元のシート名を使用します。 191 * 192 * @param flag 元のシート名を使用するかどうか[true:使用する/false:新規、または、外部指定のシート名を使用] 193 */ 194 void setSheetOverwrite( final boolean flag ) ; 195 196 /** 197 * EXCELで、出力処理の最後にセルの計算式の再計算をさせるシート名をCSV形式で指定します。 198 * 199 * @og.rev 6.5.0.0 (2016/09/30) recalcSheetName で、セル内の計算式を再計算させるシート名を指定。5.9.12.1 (2016/09/09) 200 * 201 * @param sheet 対象シート名をCSV形式で指定 202 */ 203 void setRecalcSheetName( final String sheet ) ; 204 205 /** 206 * 読み取り元ファイルのエンコード文字列を指定します。 207 * ファイルは、BufferedReader で受け取る為、本来は、エンコードは不要ですが、 208 * 固定長ファイルの読み取り時のバイトコード分割時に、指定のエンコードで 209 * 分割する必要があります。(例えば、半角文字は、Shift_JIS では、1バイト) 210 * 211 * @og.rev 3.5.4.5 (2004/01/23) 新規作成 212 * 213 * @param enc ファイルのエンコード文字列 214 */ 215 void setEncode( final String enc ) ; 216 217 /** 218 * 行番号情報を、出力する(true)/しない(false)を指定します。 219 * 220 * 通常のフォーマットでは、各行の先頭に行番号を出力します。 221 * これは、#NAME 属性を使用する場合には、必ず出力する必要があります。 222 * (#NAME 属性は、読み取り時には、必須です。) 223 * この、先頭の行番号が不要な場合(つまり、他のシステムへのデータ出力、 224 * このシステムでは、#NAME 属性が出力されないため、読み込みできません。) 225 * この行番号を出力しないようにできます。 226 * 初期値は、true(出力する) です。 227 * 228 * @og.rev 3.7.0.2 (2005/02/14) 新規追加 229 * 230 * @param useNumber 行番号情報 [true:出力する/false:しない] 231 */ 232 void setUseNumber( final boolean useNumber ) ; 233 234 /** 235 * パラメーターリストをセットします。 236 * 内部は、HybsEntry クラスを持っています。 237 * 引数が、null の場合は、何もしません。 238 * 239 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 240 * 241 * @param listParam パラメーターリスト 242 */ 243 void setParam( final List<HybsEntry> listParam ) ; 244 245 /** 246 * 出力先ファイルのカラム列を、外部(タグ)より指定します。 247 * ただし、指定のカラム名は、DBTableModel上に存在している必要があります。 248 * 249 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 250 * 251 * @param clms 出力先ファイルのカラム列(CSV形式) 252 */ 253 void setColumns( final String clms ) ; 254 255 /** 256 * 書き込み対象外のカラム列を、外部(タグ)よりCSV形式で指定します。 257 * 258 * 指定するカラム名に対して、書き込み処理を行いません。 259 * ここで指定するカラム名は、検索したDBTableModel上に含まれる必要はありません。 260 * その場合は、ここでの指定は無視されます。 261 * 262 * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加 263 * 264 * @param clms 書き込み対象外のカラム列(CSV形式) 265 */ 266 void setOmitNames( final String clms ) ; 267 268 /** 269 * EXCEL出力時のデフォルトフォント名を設定します。 270 * これは、EXCEL追加機能として実装されています。 271 * 272 * EXCELファイルを書き出す時に、デフォルトフォント名を指定します。 273 * フォント名は、EXCELのフォント名をそのまま使用してください。 274 * 内部的に、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontName( String ) 275 * に設定されます。 276 * 初期値は、システムリソース の TABLE_WRITER_DEFAULT_FONT_NAME です。 277 * 278 * @og.rev 3.8.5.3 (2006/08/07) 新規追加 279 * 280 * @param fontName デフォルトフォント名 281 */ 282 void setFontName( String fontName ) ; 283 284 /** 285 * EXCEL出力時のデフォルトフォントポイント数を設定します。 286 * これは、EXCEL追加機能として実装されています。 287 * 288 * EXCELファイルを書き出す時に、デフォルトポイント数を指定します。 289 * 内部的に、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontHeightInPoints( short ) 290 * に設定されます。 291 * 初期値は、システムリソース の TABLE_WRITER_DEFAULT_FONT_POINTS です。 292 * 293 * @og.rev 3.8.5.3 (2006/08/07) 新規追加 294 * 295 * @param point フォントポイント数 296 */ 297 void setFontPoint( short point ) ; 298 299 /** 300 * データの書き込み開始位置を設定します(初期値:0)。 301 * 302 * TAB区切りテキストやEXCEL等のデータの書き込みの開始位置を指定します。 303 * 属性名は、行を飛ばす処理ということで、readTable タグと同じ名称です。 304 * ファイルの先頭行が、0行としてカウントしますので、設定値は、読み飛ばす 305 * 件数になります。(1と指定すると、1件読み飛ばし、2行目から読み込みます。) 306 * 行の読み飛ばしと、カラムの読み飛ばし(columns)、refFileURL、refFilename、 307 * refSheetName とともに使用すれば、ある程度のレイアウト設定が可能です。 308 * なお、この機能は、TableWriter_Excel のみに実装します。 309 * 310 * @og.rev 5.7.9.0 (2014/08/08) 新規作成 311 * 312 * @param skipRowCount 書き込み開始位置 313 */ 314 void setSkipRowCount( int skipRowCount ); 315 316 /** 317 * EXCEL出力時に、データを書き込んだ範囲に罫線を入れるかどうかを指定します。 318 * 319 * データを書き込んでEXCELを作成しても、ノーマルのセルに値がセットされている 320 * だけなので、ある程度加工が必要です。 321 * そこで、データのセットされたセルに罫線を入れることで、それなりのデータが 322 * 出力された感じになります。 323 * この設定と、useAutoCellSize="true" で、セルの幅を自動調整すれば、見栄えが良くなります。 324 * なお、この機能は、TableWriter_Excel のみに実装します。 325 * 326 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 327 * 328 * @param useCellStyle 罫線を入れるかどうか(true:入れる/false:入れない) 329 * @see #setUseAutoCellSize( boolean ) 330 */ 331 void setUseCellStyle( final boolean useCellStyle ); 332 333 /** 334 * EXCEL出力時に、セルの幅をデータの幅に自動的に合わせるかどうかを指定します。 335 * 336 * データを書き込んでEXCELを作成しても、ノーマルのセルに値がセットされている 337 * だけなので、ある程度加工が必要です。 338 * そこで、データのセットされたセルの幅を自動調整することで、それなりのデータが 339 * 出力された感じになります。 340 * この設定と、useCellStyle="true" で、セルの罫線を自動設定すれば、見栄えが良くなります。 341 * なお、この機能は、TableWriter_Excel のみに実装します。 342 * 343 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 344 * 345 * @param useAutoCellSize データの幅に自動的に合わせるかどうか(true:自動調整/false:何もしない) 346 * @see #setUseCellStyle( boolean ) 347 */ 348 void setUseAutoCellSize( final boolean useAutoCellSize ); 349 350 /** 351 * EXCEL出力時に、セルの有効範囲を設定するかどうかを指定します。 352 * 353 * セルの有効範囲というのは、EXCELでの 空行、空列の存在しない範囲を指します。 354 * 通常、空行でも、データとして残っている場合は、EXCELのセルオブジェクトは存在します。 355 * ここで、useActiveWorkbook="true" とすると、空行、空列を削除します。 356 * 357 * 雛形を使用した場合は、データより多めに設定した計算などは、この処理で 358 * 削除されますので、データサイズにフィットさせることができます。 359 * なお、この機能は、TableWriter_Excel のみに実装します。 360 * 361 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 362 * 363 * @param useActiveWorkbook セルの有効範囲を設定するかどうか(true:設定する/false:そのまま) 364 */ 365 void setUseActiveWorkbook( final boolean useActiveWorkbook ); 366 367 /** 368 * EXCEL出力時に、シート変更するキーとなるカラム名を指定します(このカラムの値がシート名になります)。 369 * 370 * EXCEL帳票では、帳票雛形に、PAGE_BRAKE キーを設定しましたが、TableWriterでは、 371 * メモリ上のカラムの値が変更したときに、シート変更させることができます。 372 * このカラムの値がキーブレイクすると、新しいシートに書き出し始めます。 373 * シート名は、このカラムの値(キーブレイクする値)です。 374 * 375 * 雛形ファイルを使用する場合、雛形シートもキーブレイクに伴って、+1されます。 376 * つまり、雛形シートとデータシートは同時に変更されます。 377 * ただし、雛形シートは、最後の雛形シートで止まります。 378 * これは、雛形シートにヘッダー雛形とボディ雛形を用意しておき、最初のキーブレイクで 379 * ヘッダーからボディの書き込みにチェンジするイメージで使用できます。 380 * なお、この機能は、TableWriter_Excel のみに実装します。 381 * 382 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 383 * 384 * @param pageBreakColumn シート変更するキーとなるカラム名を指定 385 * @see #setFileBreakColumn( String ) 386 */ 387 void setPageBreakColumn( final String pageBreakColumn ); 388 389 /** 390 * EXCEL出力時に、ファイル名を変更するキーとなるカラム名を指定します(このカラムの値がファイル名になります)。 391 * 392 * EXCEL帳票では、メモリ上のカラムの値が変更したときに、ファイル名を変更することができます。 393 * このカラムの値がキーブレイクすると、新しいファイルに書き出し始めます。 394 * ファイル名は、このカラムの値(キーブレイクする値)+ 元の出力ファイル名の拡張子(.xlsなど)です。 395 * この設定を使用する場合は、出力ファイル名は無視されますが、拡張子だけは使用されます。 396 * 397 * 雛形ファイルを使用する場合、雛形ファイルもキーブレイクに伴って、再利用されます。 398 * 例えば、pageBreakColumn と併用する場合、キーブレイクで雛形シートも最初から適用になります。 399 * なお、この機能は、TableWriter_Excel のみに実装します。 400 * 401 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 402 * 403 * @param fileBreakColumn ファイル名を変更するキーとなるカラム名を指定 404 * @see #setPageBreakColumn( String ) 405 */ 406 void setFileBreakColumn( final String fileBreakColumn ); 407 408 /** 409 * EXCEL出力時に、Hyperlinkを作成するキーとなるカラム名と値となるカラム名を指定します。 410 * 411 * ここで、作成するハイパーリンクは、EXCELのシートに対するハイパーリンクです。 412 * それ以外のリンク(本当のURLやファイル等)のリンクは(今は)作成できません。 413 * ハイパーリンクを作成するには、①作成するカラム と ②作成する値 が必要です。 414 * このメソッドで設定するのは、「①:②」という形式でカラム名を指定します。 415 * ②がなければ、①と同じとします。 416 * ②の値のシートの存在有無は、無視します。ハイパーリンクを作成するシートを作成する前に 417 * ハイパーリンクを作成するケースが存在します。 418 * (例えば、各シートへのリンクを持った一覧を作成してから、明細の各シートを作成する様なケース) 419 * なお、この機能は、TableWriter_Excel のみに実装します。 420 * 421 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 422 * 423 * @param hyperLinkColumn Hyperlinkを作成するキーとなるカラム名と値となるカラム名を指定 424 */ 425 void setHyperLinkColumn( final String hyperLinkColumn ) ; 426 427 /** 428 * EXCEL出力時に、Sheet一覧を先頭Sheetに作成する場合のSheet名を指定します。 429 * 430 * これは、Workbook に含まれる Sheet 一覧を作成する場合に、利用可能です。 431 * なお、この機能は、TableWriter_Excel のみに実装します。 432 * 433 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 434 * 435 * @param sheetName EXCELファイルのシート名 436 */ 437 void setAddTitleSheet( final String sheetName ); 438 439 /** 440 * 書込処理でコードリソースのラベル変換を行うかどうかを指定します。 441 * 442 * コードリソースをそのままの値で出力すると、数字や記号になり何が書かれているのか 443 * 不明になります。 444 * これは、コードリソースをラベルに変換して出力するかどうかを指定します。 445 * 当然、コードはユニークですが、ラベルはユニークになるかどうか保障はされていませんので 446 * TableReader 系で読み込む場合には、リスクが発生します。 447 * また、TableReader 系で読み込む場合にも、ラベルからコードを求める逆変換を行うように、 448 * setUseRenderer メソッドで指定する必要があります。 449 * 450 * 従来は、TableWriter 系に、TableWriter_Renderer 系のクラスを作って対応していましたが、 451 * このメソッドの属性値のフラグで、制御します。 452 * 453 * @og.rev 5.2.1.0 (2010/10/01) 新規作成 454 * 455 * @param useRenderer コードリソースのラベル変換を行うかどうかを指定 456 */ 457 void setUseRenderer( final boolean useRenderer ) ; 458 459 /** 460 * デバッグ情報を出力するかどうかを指定します。 461 * 462 * EXCELなどを書き出す場合、シートブレイクやファイルブレイク時の行番号が、検索時の行番号と 463 * 異なる為、エラー時の判定が難しくなります。 464 * そこで、どうしてもわからなくなった場合に備えて、デバッグ情報を出力できるようにします。 465 * 通常は使用しませんので、設定を無視します。 466 * 初期値は、false:デバッグ情報を出力しない です。 467 * 468 * @og.rev 6.1.0.0 (2014/12/26) デバッグ情報を出力するかどうかを指定 469 * 470 * @param useDebug デバッグ情報を出力するかどうかを指定 471 */ 472 void setDebug( final boolean useDebug ) ; 473}