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