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; 020import java.util.Locale; 021import java.util.Map; 022 023import org.opengion.fukurou.system.HybsConst ; // 6.1.0.0 (2014/12/26) 024import org.opengion.fukurou.util.StringUtil; 025import org.opengion.fukurou.util.HybsEntry; 026import org.opengion.hayabusa.common.HybsSystem; 027import org.opengion.hayabusa.common.HybsSystemException; 028import org.opengion.hayabusa.db.DBTableModel; 029import org.opengion.hayabusa.db.DBColumn; 030 031/** 032 * 区切り文字指定(初期値:タブ)ゼロカンマファイルの書き出しクラスです。 033 * 034 * ラベル,名前,データの出力部のみオーバーライドすれば,各種出力フォーマットに合わせた 035 * サブクラスを実現する事が可能です。 036 * ゼロカンマファイルとは、EXCELのゼロサプレス対策として、頭ゼロの文字型データを出力する 037 * 時に、先頭にカンマ(')を付けて、ゼロが削除(見えなくなる)現象を抑止しているファイルです。 038 * 039 * このクラスは,可変長タブ区切り文字ファイルの出力機能を実現しています。 040 * 041 * @og.group ファイル出力 042 * 043 * @version 4.0 044 * @author Kazuhiko Hasegawa 045 * @since JDK5.0, 046 */ 047public abstract class AbstractTableWriter implements TableWriter { 048 /** このプログラムのVERSION文字列を設定します。 {@value} */ 049 private static final String VERSION = "7.0.1.0 (2018/10/15)" ; 050 051 /** システムの改行コードを設定します。*/ 052 protected static final String CR = HybsConst.CR; // 6.1.0.0 (2014/12/26) refactoring 053 /** StringBilderなどの初期値を設定します。 {@value} */ 054 protected static final int BUFFER_MIDDLE = HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring 055 056 /** dbType の簡易的な設定 {@value} */ 057 public static final int STRING = 0; 058 /** dbType の簡易的な設定 {@value} */ 059 public static final int NVAR = 1; 060 /** dbType の簡易的な設定 {@value} */ 061 public static final int NUMBER = 2; 062 063 protected int numberOfColumns = -1; // 4.0.0 (2005/01/31) 出力対象のカラム数 064 protected DBTableModel table ; 065 protected DBColumn[] dbColumn ; // table に対するカラムオブジェクト(キャッシュ) 066 protected int[] clmNo ; // 出力対象のカラム番号配列 067 protected int[] dbType ; // 5.1.6.0 (2010/05/01) dbType の簡易的な設定 068 protected boolean[] isKeyLbl ; // 6.2.3.0 (2015/05/01) KeyLabel出力 069 070 private String separator = TAB_SEPARATOR; // 項目区切り文字 071 private String headerSequence = HybsSystem.sys( "WRITER_HEADER_SEQUENCE" ) ; 072 private boolean append ; // 3.5.4.2 (2003/12/15) 073 private String lang ; 074 private String columns ; // 4.0.0 (2005/11/30) 外部指定のカラム名 075 // 6.1.0.0 (2014/12/26) 書き込み対象外のカラム列を、外部(タグ)より指定する。 076 private String omitNames ; // 6.1.0.0 (2014/12/26) 077 private String encode ; // 3.5.4.5 (2004/01/23) エンコード文字列指定 078 079 private boolean useNumber = true; // 3.7.0.2 (2005/02/14) 行番号情報を、出力する(true)/しない(false)を指定 080 private boolean useRenderer ; // 5.2.1.0 (2010/10/01) 081 082 private boolean useDebug ; // 6.1.0.0 (2014/12/26) デバッグ情報の出力するかどうか 083 084 /** 085 * デフォルトコンストラクター 086 * 087 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 088 */ 089 protected AbstractTableWriter() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 090 091 /** 092 * DBTableModel から 各形式のデータを作成して,PrintWriter に書き出します。 093 * このメソッドは、EXCEL 書き出し時に使用します。 094 * 095 * @see #isExcel() 096 */ 097 public abstract void writeDBTable(); 098 099 /** 100 * DBTableModel から データを作成して,PrintWriter に書き出します。 101 * 102 * @param writer PrintWriterオブジェクト 103 */ 104 public abstract void writeDBTable( final PrintWriter writer ); 105 106 /** 107 * numberOfColumns と DBColumn を初期化します。 108 * 内部的に、DBTableModel、lang , columns を使用して、 109 * numberOfColumns 、dbColumn、clmNo、dbType の値を初期化します。 110 * カラムが1項目もない場合、言語(lnag)が未指定、DBTableModelが未指定(null) 111 * の場合は、false を返します。その場合は、以下の処理は正常に行えません。 112 * データが0件の場合は、処理を行います。通常、ヘッダーのみのファイルを 113 * 作成することになります。(これを雛形として、取込データを登録する事が可能) 114 * 115 * 6.0.1.2 (2014/08/08) 116 * clmNo 配列に、-1 がセットされた場合、DBTableModel に存在しないカラムとして 117 * そのカラム列は、書き込みしません。,,,, などを指定する事で、カラムを 118 * 飛ばして書き込むことが可能です。 119 * refFileURL、refFilename、refSheetName とともに使用すれば、ある程度の 120 * レイアウト設定が可能です。 121 * 122 * @og.rev 4.0.0.0 (2005/12/31) 外部指定のカラム名を使用 123 * @og.rev 5.1.6.0 (2010/05/01) DbType の初期値を設定 124 * @og.rev 6.0.1.2 (2014/08/08) カラム飛ばしできる機能を追加 125 * @og.rev 6.0.2.0 (2014/09/19) EXCEL新機能対応(2回呼ばれない様にする) 126 * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加 127 * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加 128 * 129 * @return 初期化成功:true / 失敗:false 130 */ 131 protected boolean createDBColumn() { 132 if( numberOfColumns >= 0 ) { return true; } // 6.0.2.0 (2014/09/19) EXCEL新機能対応(2回呼ばれない様にする) 133 134 boolean rtnFlag = false; 135 if( lang != null && table != null ) { 136 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 137 if( columns == null ) { 138 numberOfColumns = table.getColumnCount(); 139 clmNo = new int[numberOfColumns]; 140 for( int i=0; i<numberOfColumns; i++ ) { 141 clmNo[i] = i; 142 } 143 } 144 else { 145 final String[] clms = StringUtil.csv2Array( columns ); 146 numberOfColumns = clms.length; 147 clmNo = new int[numberOfColumns]; 148 for( int i=0; i<numberOfColumns; i++ ) { 149 final int no = table.getColumnNo( clms[i],false ); // 6.0.1.2 (2014/08/08) カラム飛ばし 150 clmNo[i] = no; 151 } 152 } 153 154 // 6.1.0.0 (2014/12/26) 書き込み対象外のカラム列を、外部(タグ)より指定する。(omitNames属性) 155 if( omitNames != null ) { 156 final String[] omit = StringUtil.csv2Array( omitNames ); 157 for( int j=0; j<omit.length; j++ ) { 158 // omitNames は、カラム飛ばしの機能を利用 159 final int no = table.getColumnNo( omit[j],false ); 160 if( no >= 0 ) { 161 for( int i=0; i<numberOfColumns; i++ ) { 162 if( clmNo[i] == no ) { clmNo[i] = -1 ; break; } // omitカラムは、-1 を設定する。 163 } 164 } 165 } 166 } 167 168 dbColumn = table.getDBColumns(); 169 rtnFlag = numberOfColumns > 0 ; // カラムが1項目以上あれば成功 170 171 // 5.1.6.0 (2010/05/01) DbType の初期値を設定する。 172 dbType = new int[numberOfColumns]; 173 isKeyLbl = new boolean[numberOfColumns]; // 6.2.3.0 (2015/05/01) KeyLabel出力 174 for( int i=0; i<numberOfColumns; i++ ) { 175 final int clm = clmNo[i]; // 6.2.3.0 (2015/05/01) 176 // 6.0.1.2 (2014/08/08) カラム飛ばし の場合は、clmNo[i] には、-1 が設定されている。 177 if( clm < 0 ) { continue; } 178 179 final String type = dbColumn[clm].getDbType(); 180 if( "NVAR".equals( type ) ) { 181 dbType[i] = NVAR; 182 } 183 else if( "S9".equals( type ) || "R".equals( type ) ) { 184 dbType[i] = NUMBER; 185 } 186 else { 187 dbType[i] = STRING; 188 } 189 190 // 6.2.3.0 (2015/05/01) KeyLabel出力 191 isKeyLbl[i] = dbColumn[clm].isWriteKeyLabel(); // 6.2.3.0 (2015/05/01) KeyLabel出力 192 } 193 } 194 return rtnFlag; 195 } 196 197 /** 198 * PrintWriter に DBTableModelのヘッダー情報を書き込みます。 199 * 200 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 201 * 202 * @param writer PrintWriterオブジェクト 203 */ 204 protected void writeHeader( final PrintWriter writer ) { 205 // ここでは処理を行いません。 206 } 207 208 /** 209 * PrintWriter に DBTableModelのラベル情報を書き込みます。 210 * 第一カラム目は、ラベル情報を示す "#Label" を書き込みます。 211 * この行は、出力形式に無関係に、TableWriter.TAB_SEPARATOR で区切られます。 212 * 213 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 214 * @og.rev 3.7.0.2 (2005/02/14) 行番号情報を、出力する(true)/しない(false)を指定 215 * @og.rev 4.0.0.0 (2005/12/31) 外部指定のカラム名を使用 216 * @og.rev 6.0.1.2 (2014/08/08) カラム飛ばしできる機能を追加 217 * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加 218 * @og.rev 6.2.4.2 (2015/05/29) StringUtil#tagCut(String) をラベルに適用します。 219 * 220 * @param table DBTableModelオブジェクト 221 * @param writer PrintWriterオブジェクト 222 */ 223 protected void writeLabel( final DBTableModel table,final PrintWriter writer ) { 224 if( useNumber ) { 225 writer.print( "#Label" ); 226 writer.print( separator ); 227 } 228 else { 229 writer.print( "#" ); 230 } 231 232 for( int i=0; i<numberOfColumns; i++ ) { 233 if( i != 0 ) { writer.print( separator ); } 234 final int clm = clmNo[i]; 235 if( clm < 0 ) { continue; } // 6.0.1.2 (2014/08/08) カラム飛ばし 236 final String val = StringUtil.tagCut( dbColumn[clm].getLabel() ); // 6.2.4.2 (2015/05/29) 237 writer.print( val ); 238 // keyLabelの場合は、後ろのカラムのラベルを付けません。 239 if( isKeyLbl[i] ) { writer.print( separator ); } // 6.2.3.0 (2015/05/01) writeKeyLabel 属性 240 } 241 writer.println(); 242 } 243 244 /** 245 * PrintWriter に DBTableModelの項目名情報を書き込みます。 246 * 第一カラム目は、項目名情報を示す "#Name" を書き込みます。 247 * useNumber=fale の場合は、最初のカラム名の先頭に、# が書き込まれます。 248 * 249 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 250 * @og.rev 3.7.0.2 (2005/02/14) 行番号情報を、出力する(true)/しない(false)を指定 251 * @og.rev 6.0.1.2 (2014/08/08) カラム飛ばしできる機能を追加 252 * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加 253 * 254 * @param table DBTableModelオブジェクト 255 * @param writer PrintWriterオブジェクト 256 */ 257 protected void writeName( final DBTableModel table,final PrintWriter writer ) { 258 if( useNumber ) { 259 writer.print( "#Name" ); 260 writer.print( separator ); 261 } 262 else { 263 writer.print( "#" ); 264 } 265 266 for( int i=0; i<numberOfColumns; i++ ) { 267 if( i != 0 ) { writer.print( separator ); } 268 final int clm = clmNo[i]; 269 if( clm < 0 ) { continue; } // 6.0.1.2 (2014/08/08) カラム飛ばし 270 writer.print( table.getColumnName(clm) ); 271 // keyLabelの場合は、後ろのカラムの名前を付けません。 272 if( isKeyLbl[i] ) { writer.print( separator ); } // 6.2.3.0 (2015/05/01) writeKeyLabel 属性 273 } 274 writer.println(); 275 } 276 277 /** 278 * PrintWriter に DBTableModelのサイズ情報を書き込みます。 279 * 第一カラム目は、サイズ情報を示す "#Size" を書き込みます。 280 * この行は、出力形式に無関係に、TableWriter.TAB_SEPARATOR で区切られます。 281 * 282 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 283 * @og.rev 3.5.5.5 (2004/04/23) DBColumn の size と maxlength の 意味を変更 284 * @og.rev 3.7.0.2 (2005/02/14) 行番号情報を、出力する(true)/しない(false)を指定 285 * @og.rev 6.0.1.2 (2014/08/08) カラム飛ばしできる機能を追加 286 * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加 287 * 288 * @param table DBTableModelオブジェクト 289 * @param writer PrintWriterオブジェクト 290 */ 291 protected void writeSize( final DBTableModel table,final PrintWriter writer ) { 292 if( useNumber ) { 293 writer.print( "#Size" ); 294 writer.print( separator ); 295 } 296 else { 297 writer.print( "#" ); 298 } 299 300 for( int i=0; i<numberOfColumns; i++ ) { 301 if( i != 0 ) { writer.print( separator ); } 302 final int clm = clmNo[i]; 303 if( clm < 0 ) { continue; } // 6.0.1.2 (2014/08/08) カラム飛ばし 304 writer.print( dbColumn[clm].getTotalSize() ); // 4.0.0 (2005/01/31) メソッド名変更 305 // keyLabelの場合は、後ろのカラムのサイズを付けません。 306 if( isKeyLbl[i] ) { writer.print( separator ); } // 6.2.3.0 (2015/05/01) writeKeyLabel 属性 307 } 308 writer.println(); 309 } 310 311 /** 312 * PrintWriter に DBTableModelのクラス名情報を書き込みます。 313 * 第一カラム目は、サイズ情報を示す "#Class" を書き込みます。 314 * この行は、出力形式に無関係に、TableWriter.TAB_SEPARATOR で区切られます。 315 * 316 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 317 * @og.rev 6.0.1.2 (2014/08/08) カラム飛ばしできる機能を追加 318 * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加 319 * 320 * @param table DBTableModelオブジェクト 321 * @param writer PrintWriterオブジェクト 322 */ 323 protected void writeClass( final DBTableModel table,final PrintWriter writer ) { 324 if( useNumber ) { 325 writer.print( "#Class" ); 326 writer.print( separator ); 327 } 328 else { 329 writer.print( "#" ); 330 } 331 332 for( int i=0; i<numberOfColumns; i++ ) { 333 if( i != 0 ) { writer.print( separator ); } 334 final int clm = clmNo[i]; 335 if( clm < 0 ) { continue; } // 6.0.1.2 (2014/08/08) カラム飛ばし 336 writer.print( dbColumn[clm].getClassName() ); 337 // keyLabelの場合は、後ろのカラムのクラスを付けません。 338 if( isKeyLbl[i] ) { writer.print( separator ); } // 6.2.3.0 (2015/05/01) writeKeyLabel 属性 339 } 340 writer.println(); 341 } 342 343 /** 344 * PrintWriter に セパレーターを書き込みます。 345 * 第一カラム目は、サイズ情報を示す "#----" を書き込みます。 346 * この行は、出力形式に無関係に、TableWriter.TAB_SEPARATOR で区切られます。 347 * 348 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 349 * @og.rev 3.7.0.2 (2005/02/14) 行番号情報を、出力する(true)/しない(false)を指定 350 * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加 351 * 352 * @param table DBTableModelオブジェクト 353 * @param writer PrintWriterオブジェクト 354 */ 355 protected void writeSeparator( final DBTableModel table,final PrintWriter writer ) { 356 final String sep = "----" ; 357 if( useNumber ) { 358 writer.print( "#----" ); 359 writer.print( separator ); 360 } 361 else { 362 writer.print( "#" ); 363 } 364 365 for( int i=0; i<numberOfColumns; i++ ) { 366 if( i != 0 ) { writer.print( separator ); } 367 writer.print( sep ); 368 // keyLabelの場合は、後ろのカラムのセパレーターを付けません。 369 if( isKeyLbl[i] ) { writer.print( separator ); } // 6.2.3.0 (2015/05/01) writeKeyLabel 属性 370 } 371 writer.println(); 372 } 373 374 /** 375 * PrintWriter に DBTableModelのテーブル情報を書き込みます。 376 * このクラスでは,データを ダブルコーテーション(")で囲みます。 377 * PrintWriter に DBTableModelのテーブル情報を書き込みます。 378 * 379 * @og.rev 2.0.0.5 (2002/09/30) 先頭が0 でかつ数字タイプ(S9 or R)でない場合に ' を出力するように修正。 380 * @og.rev 2.3.1.2 (2003/01/28) データ出力時に、改行が余分に出される箇所を修正。 381 * @og.rev 3.1.0.0 (2003/03/20) DBColumn から、getDbType() キーを直接取り出す 382 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 383 * @og.rev 3.3.3.1 (2003/07/18) ファイルリード/ライト時に後ろスペースの除去を行います。 384 * @og.rev 3.7.0.2 (2005/02/14) 行番号情報を、出力する(true)/しない(false)を指定 385 * @og.rev 3.8.0.1 (2005/06/17) DBTypeが NVAR の場合は、元のUnicodeに戻します。 386 * @og.rev 5.1.6.0 (2010/05/01) DbType の初期値(dbType)を利用する。 387 * @og.rev 5.2.1.0 (2010/10/01) このメソッドは、abstract 化します。 388 * 389 * @param table DBTableModelオブジェクト 390 * @param writer PrintWriterオブジェクト 391 */ 392 protected abstract void writeData( final DBTableModel table,final PrintWriter writer ) ; 393 394 /** 395 * DBTableModel をセットします。 396 * 397 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 398 * @og.rev 3.5.4.2 (2003/12/15) lang 引数も同時に設定します。 399 * 400 * @param table DBTableModelオブジェクト 401 * @param lang 言語コード 402 */ 403 public void setDBTableModel( final DBTableModel table, final String lang ) { 404 this.table = table; 405 this.lang = lang; 406 } 407 408 /** 409 * 内部の DBTableModel を返します。 410 * 411 * @return DBTableModelオブジェクト 412 */ 413 public DBTableModel getDBTableModel() { 414 return table; 415 } 416 417 /** 418 * DBTableModelの出力順をセットします。 419 * Label,Name,Size,Class,Data の各フィールドの頭文字のアルファベットで 420 * 出力順を設定します。 421 * 422 * なお,出力順に指定しない項目は出力されません 423 * 424 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 425 * 426 * @param hs 出力順 (LNSCD など) 427 */ 428 public void setHeaderSequence( final String hs ) { 429 if( hs != null ) { headerSequence = hs ; } 430 } 431 432 /** 433 * DBTableModelの出力順を返します。 434 * Label,Name,Size,Class,Data の各フィールドの頭文字のアルファベットで 435 * 出力順を設定します。 436 * 437 * なお,出力順に指定しない項目は出力されません 438 * 439 * @return 出力順 (LNSCD など) 440 */ 441 public String getHeaderSequence() { 442 return headerSequence ; 443 } 444 445 /** 446 * データを書き込む場合の,区切り文字をセットします。 447 * 448 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 449 * 450 * @param sep 区切り文字 451 */ 452 public void setSeparator( final String sep ) { 453 if( sep != null ) { this.separator = sep; } 454 } 455 456 /** 457 * データを書き込む場合の,区切り文字を返します。 458 * 459 * @return 区切り文字 460 */ 461 public String getSeparator() { 462 return separator; 463 } 464 465 /** 466 * DBTableModelのデータとして書き込むときに、追加モードで書き込むかどうかを設定します。 467 * 初期値は、false(新規モード)です。 468 * 469 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 470 * 471 * @param flag [true:追加モード/false:新規モード] 472 */ 473 public void setAppend( final boolean flag ) { 474 append = flag; 475 } 476 477 /** 478 * DBTableModelのデータとして書き込むときに、追加モードで書き込むかどうかを取得します。 479 * 初期値は、false(新規モード)です。 480 * 481 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 482 * 483 * @return true(追加モード)/false(新規モード) 484 */ 485 public boolean isAppend() { 486 return append ; 487 } 488 489 /** 490 * DBTableModelのデータとして読み込むときのシート名を設定します。 491 * 初期値は、"Sheet1" です。 492 * これは、EXCEL追加機能として実装されています。 493 * ※ このクラスでは実装されていません。 494 * 495 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 496 * @og.rev 3.5.4.3 (2004/01/05) 実装廃止(TableWriter_Excel へ移動) 497 * @og.rev 6.0.2.0 (2014/09/19) isExcel() で判定しているので、Exception は投げない。 498 * 499 * @param sheetName シート名 500 */ 501 public void setSheetName( final String sheetName ) { 502 final String errMsg = "sheetName は、EXCEL専用機能なので使用できません。[" + sheetName + "]"; 503 System.err.println( errMsg ); 504 } 505 506 /** 507 * EXCEL雛型参考ファイルのシート名を設定します。 508 * これは、EXCEL追加機能として実装されています。 509 * 510 * EXCELファイルを書き出す時に、雛型として参照するシート名を指定します。 511 * これにより、複数の形式の異なるデータを順次書き出したり(appendモードを併用)する 512 * ことや、シートを指定して新規にEXCELを作成する場合にフォームを設定する事が可能になります。 513 * 初期値は、null(第一シート) です。 514 * ※ このクラスでは実装されていません。 515 * 516 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 517 * @og.rev 6.0.2.0 (2014/09/19) isExcel() で判定しているので、Exception は投げない。 518 * 519 * @param sheetName シート名 520 */ 521 public void setRefSheetName( final String sheetName ) { 522 final String errMsg = "refSheetName は、EXCEL専用機能なので使用できません。[" + sheetName + "]"; 523 System.err.println( errMsg ); 524 } 525 526 /** 527 * このクラスが、EXCEL対応機能を持っているかどうかを返します。 528 * 529 * EXCEL対応機能とは、シート名のセット、雛型参照ファイル名のセット、 530 * 書き込み元ファイルのFileオブジェクト取得などの、特殊機能です。 531 * 本来は、インターフェースを分けるべきと考えますが、taglib クラス等の 532 * 関係があり、問い合わせによる条件分岐で対応します。 533 * 534 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 535 * 536 * @return EXCEL対応機能を持っているかどうか(ここでは、false固定です) 537 */ 538 public boolean isExcel() { 539 return false; 540 } 541 542 /** 543 * 出力先ディレクトリとファイル名をセットします。 544 * これは、EXCEL追加機能として実装されています。 545 * ※ このクラスでは実装されていません。 546 * このメソッドでは、必ず、UnsupportedOperationException が、throw されます。 547 * 548 * @og.rev 3.5.4.3 (2004/01/05) 新規作成 549 * @og.rev 6.0.2.0 (2014/09/19) ディレクトリとファイルを分けて管理します。 550 * 551 * @param directory 出力先ディレクトリ名 552 * @param filename 出力先ファイル名 553 */ 554 public void setFilename( final String directory , final String filename ) { 555 final String errMsg = "filename は、メソッドは、EXCEL追加機能ですので、使用できません。"; 556 throw new UnsupportedOperationException( errMsg ); 557 } 558 559 /** 560 * EXCEL雛型参考ファイル名をセットします。(DIR + Filename) 561 * これは、EXCEL追加機能として実装されています。 562 * ※ このクラスでは実装されていません。 563 * このメソッドでは、必ず、UnsupportedOperationException が、throw されます。 564 * 565 * @og.rev 3.5.4.3 (2004/01/05) 新規作成 566 * @og.rev 6.0.2.0 (2014/09/19) isExcel() で判定しているので、Exception は投げない。 567 * 568 * @param filename EXCEL雛型参考ファイル名 569 */ 570 public void setRefFilename( final String filename ) { 571 final String errMsg = "refFilename は、EXCEL専用機能なので使用できません。[" + filename + "]"; 572 System.err.println( errMsg ); 573 } 574 575 /** 576 * 雛形のシート名を、そのまま使用する(true)か、新規、または、外部指定のシート名を使用する(false)を指定します。(初期値:false[外部指定のシート名を使用])。 577 * 578 * ※ Ver5では、追記モード時に、指定シートが存在した場合は上書きします(初期値:false[上書きしない])。5.9.12.1 (2016/09/09) 579 * Ver6では、追記モード時に、雛形を指定できないため、雛形のシート名を、そのまま使用する(true)か、 580 * 新規、または、外部指定のシート名を使用する(false)を指定する属性になります。 581 * 582 * @og.rev 6.5.0.0 (2016/09/30) sheetOverwrite で、雛形シートの使用時に、元のシート名を使用します。 583 * 584 * @param flag 元のシート名を使用するかどうか[true:使用する/false:新規、または、外部指定のシート名を使用] 585 */ 586 public void setSheetOverwrite( final boolean flag ) { 587 final String errMsg = "sheetOverwrite は、このメソッドは、EXCEL追加機能ですので、使用できません。"; 588 System.err.println( errMsg ); 589 } 590 591 /** 592 * EXCELで、出力処理の最後にセルの計算式の再計算をさせるシート名をCSV形式で指定します。 593 * 594 * @og.rev 6.5.0.0 (2016/09/30) recalcSheetName で、セル内の計算式を再計算させるシート名を指定。5.9.12.1 (2016/09/09) 595 * 596 * @param sheet 対象シート名をCSV形式で指定 597 */ 598 public void setRecalcSheetName( final String sheet ){ 599 final String errMsg = "recalcSheetName は、メソッドは、EXCEL追加機能ですので、使用できません。"; 600 System.err.println( errMsg ); 601 } 602 603 /** 604 * EXCEL出力時のデフォルトフォント名を設定します。 605 * これは、EXCEL追加機能として実装されています。 606 * 607 * EXCELファイルを書き出す時に、デフォルトフォント名を指定します。 608 * フォント名は、EXCELのフォント名をそのまま使用してください。 609 * 内部的に、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontName( String ) 610 * に設定されます。 611 * 初期値は、システムリソース の TABLE_WRITER_DEFAULT_FONT_NAME です。 612 * 613 * ※ このクラスでは実装されていません。 614 * このメソッドでは、必ず、UnsupportedOperationException が、throw されます。 615 * 616 * @og.rev 3.8.5.3 (2006/08/07) 新規追加 617 * @og.rev 6.0.2.0 (2014/09/19) isExcel() で判定しているので、Exception は投げない。 618 * 619 * @param fontName フォント名 620 */ 621 public void setFontName( final String fontName ) { 622 final String errMsg = "fontName は、EXCEL専用機能なので使用できません。[" + fontName + "]"; 623 System.err.println( errMsg ); 624 } 625 626 /** 627 * EXCEL出力時のデフォルトフォントポイント数を設定します。 628 * これは、EXCEL追加機能として実装されています。 629 * 630 * EXCELファイルを書き出す時に、デフォルトポイント数を指定します。 631 * 内部的に、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontHeightInPoints( short ) 632 * に設定されます。 633 * 初期値は、システムリソース の TABLE_WRITER_DEFAULT_FONT_POINTS です。 634 * 635 * ※ このクラスでは実装されていません。 636 * このメソッドでは、必ず、UnsupportedOperationException が、throw されます。 637 * 638 * @og.rev 3.8.5.3 (2006/08/07) 新規追加 639 * @og.rev 6.0.2.0 (2014/09/19) isExcel() で判定しているので、Exception は投げない。 640 * 641 * @param point フォントポイント数 642 */ 643 public void setFontPoint( final short point ) { 644 final String errMsg = "fontPoint は、EXCEL専用機能なので使用できません。[" + point + "]"; 645 System.err.println( errMsg ); 646 } 647 648 /** 649 * 読み取り元ファイルのエンコード文字列を指定します。 650 * ファイルは、BufferedReader で受け取る為、本来は、エンコードは不要ですが、 651 * 固定長ファイルの読み取り時のバイトコード分割時に、指定のエンコードで 652 * 分割する必要があります。(例えば、半角文字は、Shift_JIS では、1バイト) 653 * 654 * @og.rev 3.5.4.5 (2004/01/23) 新規作成 655 * 656 * @param enc ファイルのエンコード文字列 657 */ 658 public void setEncode( final String enc ) { 659 encode = enc; 660 } 661 662 /** 663 * 読み取り元ファイルのエンコード文字列を取得します。 664 * ファイルは、BufferedReader で受け取る為、本来は、エンコードは不要ですが、 665 * 固定長ファイルの読み取り時のバイトコード分割時に、指定のエンコードで 666 * 分割する必要があります。(例えば、半角文字は、Shift_JIS では、1バイト) 667 * 668 * @og.rev 3.5.4.5 (2004/01/23) 新規作成 669 * 670 * @return ファイルのエンコード文字列 671 */ 672 protected String getEncode() { 673 return encode; 674 } 675 676 /** 677 * 行番号情報を、出力する(true)/しない(false)を指定します。 678 * 679 * 通常のフォーマットでは、各行の先頭に行番号を出力します。 680 * これは、#NAME 属性を使用する場合には、必ず出力する必要があります。 681 * (#NAME 属性は、読み取り時には、必須です。) 682 * この、先頭の行番号が不要な場合(つまり、他のシステムへのデータ出力、 683 * このシステムでは、#NAME 属性が出力されないため、読み込みできません。) 684 * この行番号を出力しないようにできます。 685 * 初期値は、true(出力する) です。 686 * 687 * @og.rev 3.7.0.2 (2005/02/14) 新規追加 688 * 689 * @param useNumber 行番号情報を [true:出力する/false:しない] 690 */ 691 public void setUseNumber( final boolean useNumber ) { 692 this.useNumber = useNumber; 693 } 694 695 /** 696 * 行番号情報を、出力する(true)/しない(false)を返します。 697 * 698 * 通常のフォーマットでは、各行の先頭に行番号を出力します。 699 * これは、#NAME 属性を使用する場合には、必ず出力する必要があります。 700 * (#NAME 属性は、読み取り時には、必須です。) 701 * この、先頭の行番号が不要な場合(つまり、他のシステムへのデータ出力、 702 * このシステムでは、#NAME 属性が出力されないため、読み込みできません。) 703 * この行番号を出力しないようにできます。 704 * 初期値は、true(出力する) です。 705 * 706 * @og.rev 3.7.0.2 (2005/02/14) 新規追加 707 * 708 * @return 行番号情報を、出力する(true)/しない(false) 709 */ 710 protected boolean isUseNumber() { 711 return useNumber; 712 } 713 714 /** 715 * パラメーターリストをセットします。 716 * 内部は、HybsEntry クラスを持っています。 717 * 引数が、null の場合は、何もしません。 718 * ※ このクラスでは実装されていません。 719 * 720 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 721 * 722 * @param listParam パラメーターリスト 723 */ 724 public void setParam( final List<HybsEntry> listParam ) { 725 final String errMsg = "param は、XML追加機能ですので、使用できません。"; 726 throw new UnsupportedOperationException( errMsg ); 727 } 728 729 /** 730 * 出力先ファイルのカラム列を、外部(タグ)よりCSV形式の文字列で指定します。 731 * ただし、指定のカラム名は、DBTableModel上に存在している必要があります。 732 * 733 * @og.rev 4.0.0.0 (2005/11/30) 新規追加 734 * 735 * @param clms 出力先ファイルのカラム列(CSV形式) 736 */ 737 public void setColumns( final String clms ) { 738 columns = clms ; 739 } 740 741 /** 742 * 書き込み対象外のカラム列を、外部(タグ)よりCSV形式で指定します。 743 * 744 * 指定するカラム名に対して、書き込み処理を行いません。 745 * ここで指定するカラム名は、検索したDBTableModel上に含まれる必要はありません。 746 * その場合は、ここでの指定は無視されます。 747 * 748 * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加 749 * 750 * @param clms 書き込み対象外のカラム列(CSV形式) 751 */ 752 public void setOmitNames( final String clms ) { 753 omitNames = clms; 754 } 755 756 /** 757 * データの書き込み開始行番号を設定します(初期値:0)。 758 * 759 * TAB区切りテキストやEXCEL等のデータの書き込みの開始行番号を指定します。 760 * 属性名は、行を飛ばす処理ということで、readTable タグと同じ名称です。 761 * ファイルの先頭行が、0行としてカウントしますので、設定値は、読み飛ばす 762 * 件数になります。(1と指定すると、1件読み飛ばし、2行目から読み込みます。) 763 * 行の読み飛ばしと、カラムの読み飛ばし(columns)、refFileURL、refFilename、 764 * refSheetName とともに使用すれば、ある程度のレイアウト設定が可能です。 765 * なお、この機能は、TableWriter_Excel のみに実装します。 766 * 767 * @og.rev 5.7.9.0 (2014/08/08) 新規作成 768 * @og.rev 6.0.2.0 (2014/09/19) isExcel() で判定しているので、Exception は投げない。 769 * 770 * @param skipRowCount 書き込み開始行番号 771 */ 772 public void setSkipRowCount( final int skipRowCount ) { 773 if( skipRowCount != 0 ) { 774 final String errMsg = "skipRowCount は、EXCEL専用機能なので使用できません。[" + skipRowCount + "]"; 775 System.err.println( errMsg ); 776 } 777 } 778 779 /** 780 * EXCEL出力時に、データを書き込んだ範囲に罫線を入れるかどうかを指定します。 781 * 782 * データを書き込んでEXCELを作成しても、ノーマルのセルに値がセットされている 783 * だけなので、ある程度加工が必要です。 784 * そこで、データのセットされたセルに罫線を入れることで、それなりのデータが 785 * 出力された感じになります。 786 * この設定と、useAutoCellSize="true" で、セルの幅を自動調整すれば、見栄えが良くなります。 787 * なお、この機能は、TableWriter_Excel のみに実装します。 788 * 789 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 790 * 791 * @param useCellStyle 罫線を入れるかどうか(true:入れる/false:入れない) 792 * @see #setUseAutoCellSize( boolean ) 793 */ 794 public void setUseCellStyle( final boolean useCellStyle ) { 795 final String errMsg = "useCellStyle は、EXCEL専用機能なので使用できません。[" + useCellStyle + "]"; 796 System.err.println( errMsg ); 797 } 798 799 /** 800 * EXCEL出力時に、セルの幅をデータの幅に自動的に合わせるかどうかを指定します。 801 * 802 * データを書き込んでEXCELを作成しても、ノーマルのセルに値がセットされている 803 * だけなので、ある程度加工が必要です。 804 * そこで、データのセットされたセルの幅を自動調整することで、それなりのデータが 805 * 出力された感じになります。 806 * この設定と、useCellStyle="true" で、セルの罫線を自動設定すれば、見栄えが良くなります。 807 * なお、この機能は、TableWriter_Excel のみに実装します。 808 * 809 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 810 * 811 * @param useAutoCellSize データの幅に自動的に合わせるかどうか(true:自動調整/false:何もしない) 812 * @see #setUseCellStyle( boolean ) 813 */ 814 public void setUseAutoCellSize( final boolean useAutoCellSize ) { 815 final String errMsg = "useAutoCellSize は、EXCEL専用機能なので使用できません。[" + useAutoCellSize + "]"; 816 System.err.println( errMsg ); 817 } 818 819 /** 820 * EXCEL出力時に、セルの有効範囲を設定するかどうかを指定します。 821 * 822 * セルの有効範囲というのは、EXCELでの 空行、空列の存在しない範囲を指します。 823 * 通常、空行でも、データとして残っている場合は、EXCELのセルオブジェクトは存在します。 824 * ここで、useActiveWorkbook="true" とすると、空行、空列を削除します。 825 * 826 * 雛形を使用した場合は、データより多めに設定した計算などは、この処理で 827 * 削除されますので、データサイズにフィットさせることができます。 828 * なお、この機能は、TableWriter_Excel のみに実装します。 829 * 830 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 831 * 832 * @param useActiveWorkbook セルの有効範囲を設定するかどうか(true:設定する/false:そのまま) 833 */ 834 public void setUseActiveWorkbook( final boolean useActiveWorkbook ) { 835 final String errMsg = "useActiveWorkbook は、EXCEL専用機能なので使用できません。[" + useActiveWorkbook + "]"; 836 System.err.println( errMsg ); 837 } 838 839 /** 840 * EXCEL出力時に、シート変更するキーとなるカラム名を指定します(このカラムの値がシート名になります)。 841 * 842 * EXCEL帳票では、帳票雛形に、PAGE_BRAKE キーを設定しましたが、TableWriterでは、 843 * メモリ上のカラムの値が変更したときに、シート変更させることができます。 844 * このカラムの値がキーブレイクすると、新しいシートに書き出し始めます。 845 * シート名は、このカラムの値(キーブレイクする値)です。 846 * 847 * 雛形ファイルを使用する場合、雛形シートもキーブレイクに伴って、+1されます。 848 * つまり、雛形シートとデータシートは同時に変更されます。 849 * ただし、雛形シートは、最後の雛形シートで止まります。 850 * これは、雛形シートにヘッダー雛形とボディ雛形を用意しておき、最初のキーブレイクで 851 * ヘッダーからボディの書き込みにチェンジするイメージで使用できます。 852 * なお、この機能は、TableWriter_Excel のみに実装します。 853 * 854 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 855 * 856 * @param pageBreakColumn シート変更するキーとなるカラム名を指定 857 * @see #setFileBreakColumn( String ) 858 */ 859 public void setPageBreakColumn( final String pageBreakColumn ) { 860 final String errMsg = "pageBreakColumn は、EXCEL専用機能なので使用できません。[" + pageBreakColumn + "]"; 861 System.err.println( errMsg ); 862 } 863 864 /** 865 * EXCEL出力時に、ファイル名を変更するキーとなるカラム名を指定します(このカラムの値がファイル名になります)。 866 * 867 * EXCEL帳票では、メモリ上のカラムの値が変更したときに、ファイル名を変更することができます。 868 * このカラムの値がキーブレイクすると、新しいファイルに書き出し始めます。 869 * ファイル名は、このカラムの値(キーブレイクする値)+ 元の出力ファイル名の拡張子(.xlsなど)です。 870 * この設定を使用する場合は、出力ファイル名は無視されますが、拡張子だけは使用されます。 871 * 872 * 雛形ファイルを使用する場合、雛形ファイルもキーブレイクに伴って、再利用されます。 873 * 例えば、pageBreakColumn と併用する場合、キーブレイクで雛形シートも最初から適用になります。 874 * なお、この機能は、TableWriter_Excel のみに実装します。 875 * 876 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 877 * 878 * @param fileBreakColumn ファイル名を変更するキーとなるカラム名を指定 879 * @see #setPageBreakColumn( String ) 880 */ 881 public void setFileBreakColumn( final String fileBreakColumn ) { 882 final String errMsg = "fileBreakColumn は、EXCEL専用機能なので使用できません。[" + fileBreakColumn + "]"; 883 System.err.println( errMsg ); 884 } 885 886 /** 887 * EXCEL出力時に、Hyperlinkを作成するキーとなるカラム名と値となるカラム名を指定します。 888 * 889 * ここで、作成するハイパーリンクは、EXCELのシートに対するハイパーリンクです。 890 * それ以外のリンク(本当のURLやファイル等)のリンクは(今は)作成できません。 891 * ハイパーリンクを作成するには、①作成するカラム と ②作成する値 が必要です。 892 * このメソッドで設定するのは、「①:②」という形式でカラム名を指定します。 893 * ②がなければ、①と同じとします。 894 * ②の値のシートの存在有無は、無視します。ハイパーリンクを作成するシートを作成する前に 895 * ハイパーリンクを作成するケースが存在します。 896 * (例えば、各シートへのリンクを持った一覧を作成してから、明細の各シートを作成する様なケース) 897 * なお、この機能は、TableWriter_Excel のみに実装します。 898 * 899 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 900 * 901 * @param hyperLinkColumn Hyperlinkを作成するキーとなるカラム名と値となるカラム名を指定 902 */ 903 public void setHyperLinkColumn( final String hyperLinkColumn ) { 904 final String errMsg = "hyperLinkColumn は、EXCEL専用機能なので使用できません。[" + hyperLinkColumn + "]"; 905 System.err.println( errMsg ); 906 } 907 908 /** 909 * EXCEL出力時に、Sheet一覧を先頭Sheetに作成する場合のSheet名を指定します。 910 * 911 * これは、Workbook に含まれる Sheet 一覧を作成する場合に、利用可能です。 912 * なお、この機能は、TableWriter_Excel のみに実装します。 913 * 914 * @og.rev 6.0.2.0 (2014/09/19) 新規作成 915 * 916 * @param sheetName EXCELファイルのシート名 917 */ 918 public void setAddTitleSheet( final String sheetName ) { 919 final String errMsg = "addTitleSheet は、EXCEL専用機能なので使用できません。[" + sheetName + "]"; 920 System.err.println( errMsg ); 921 } 922 923 /** 924 * 書込処理でコードリソースのラベル変換を行うかどうか[true/false]を指定します。 925 * 926 * コードリソースをそのままの値で出力すると、数字や記号になり何が書かれているのか 927 * 不明になります。 928 * これは、コードリソースをラベルに変換して出力するかどうかを指定します。 929 * 当然、コードはユニークですが、ラベルはユニークになるかどうか保障はされていませんので 930 * TableReader 系で読み込む場合には、リスクが発生します。 931 * また、TableReader 系で読み込む場合にも、ラベルからコードを求める逆変換を行うように、 932 * setUseRenderer メソッドで指定する必要があります。 933 * 934 * 従来は、TableWriter 系に、TableWriter_Renderer 系のクラスを作って対応していましたが、 935 * このメソッドの属性値のフラグで、制御します。 936 * 937 * @og.rev 5.2.1.0 (2010/10/01) 新規作成 938 * 939 * @param useRenderer コードリソースのラベル変換を行うかどうか [true:行う/false:行わない] 940 */ 941 public void setUseRenderer( final boolean useRenderer ) { 942 this.useRenderer = useRenderer; 943 } 944 945 /** 946 * 書き出し処理でコードリソースのラベル変換を行うかどうかを返します。 947 * 初期値は、false(行わない) です。 948 * 949 * @og.rev 5.2.1.0 (2010/10/01) 新規作成 950 * 951 * @return ラベル変換を行うかどうか(true:行う/false:行わない) 952 */ 953 protected boolean isUseRenderer() { 954 return useRenderer ; 955 } 956 957 /** 958 * データを ダブルコーテーション(")で囲みます。 959 * 960 * この処理では、前後をダブルクオートで囲うため、改行の有無は判定する 961 * 必要はありません。 962 * ダブルクオートを含む場合は、その直前にダブルクオートを強制的に追加します。 963 * 964 * @param data 元のString文字列 965 * 966 * @return ダブルコーテーションで囲まれた文字列 967 * @og.rtnNotNull 968 */ 969 protected String quotation( final String data ) { 970 return "\"" + StringUtil.replace( data,"\"","\"\"" ) + "\"" ; 971 } 972 973 /** 974 * データに対して 改行、ダブルクオート等の処理を行います。 975 * 976 * これは、データの前後をダブルクオートで括る quotation(String)と異なり 977 * 前後には、ダブルクオート を追加しません。 978 * ただし、以下の2つの条件で処理を行います。 979 * 1.改行を含む場合は、ダブルクオートを強制的に前後に追加する。 980 * 2.ダブルクオートを含む場合は、その直前にダブルクオートを強制的に追加する。 981 * 982 * @og.rev 5.2.2.0 (2010/11/01) 新規追加 983 * 984 * @param data 元のString文字列 985 * 986 * @return 改行、ダブルクオート等の処理 987 */ 988 protected String quotation2( final String data ) { 989 String rtn = StringUtil.replace( data,"\"","\"\"" ); 990 if( rtn != null && rtn.indexOf( CR ) >= 0 ) { 991 rtn = "\"" + rtn + "\"" ; 992 } 993 994 return rtn ; 995 } 996 997 /** 998 * keys の整合性チェックを行います。 999 * 1000 * キーかkeysMapのどちらかが null の場合は、何もしません。 1001 * チェックするキーは、内部で大文字に変換しておきます。 1002 * keysMap に登録するキーは、大文字で登録しておいてください。 1003 * ここのチェックでは、キーマップに存在しなければ、エラーになります。 1004 * 1005 * @og.rev 5.6.6.1 (2013/07/12) keys の整合性チェックを行います。 1006 * @og.rev 6.4.3.4 (2016/03/11) forループを、forEach メソッドに置き換えます。 1007 * @og.rev 7.0.1.0 (2018/10/15) XHTML → HTML5 対応(空要素の、"/>" 止めを、">" に変更します)。 1008 * 1009 * @param key チェックするキー文字列(null の場合は、処理しない) 1010 * @param keysMap 利用可能なキーのマップ(大文字に統一) 1011 */ 1012 protected void checkParam( final String key,final Map<String,String> keysMap ) { 1013 // key か keysMap かどちらかが null の場合は、処理を行わない。 1014 if( key == null || keysMap == null ) { return; } 1015 1016 final String upKey = key.toUpperCase(Locale.JAPAN); 1017 1018 if( ! keysMap.containsKey( upKey ) ) { 1019// final String BR = "<br />" + CR ; 1020 final String BR = "<br>" + CR ; // 7.0.1.0 (2018/10/15) 1021 final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE ) 1022 // 6.0.2.5 (2014/10/31) char を append する。 1023 .append( BR ) 1024 .append( "指定のキーは、この tableWriter では、使用できません。" ).append( BR ) 1025 .append( " class=[" ).append( getClass().getName() ).append( ']' ).append( BR ) 1026 .append( " key =[" ).append( key ).append( ']' ).append( BR ) 1027 .append( " ======== usage keys ======== " ).append( BR ) ; 1028 1029 // 6.4.3.4 (2016/03/11) forループを、forEach メソッドに置き換えます。 1030 keysMap.forEach( (k,v) -> errMsg.append( ' ' ).append( k ).append( ':' ).append( v ).append( BR ) ); 1031 errMsg.append( " ============================ " ).append( BR ); 1032 1033 throw new HybsSystemException( errMsg.toString() ); 1034 } 1035 } 1036 1037 /** 1038 * デバッグ情報を出力するかどうか[true:する/false:しない]を指定します。 1039 * 1040 * EXCELなどを書き出す場合、シートブレイクやファイルブレイク時の行番号が、検索時の行番号と 1041 * 異なる為、エラー時の判定が難しくなります。 1042 * そこで、どうしてもわからなくなった場合に備えて、デバッグ情報を出力できるようにします。 1043 * 通常は使用しませんので、設定を無視します。 1044 * 初期値は、false:デバッグ情報を出力しない です。 1045 * 1046 * @og.rev 6.1.0.0 (2014/12/26) デバッグ情報を出力するかどうかを指定 1047 * 1048 * @param useDebug デバッグ出力するか [true:する/false:しない] 1049 */ 1050 public void setDebug( final boolean useDebug ) { 1051 this.useDebug = useDebug; 1052 } 1053 1054 /** 1055 * デバッグ情報を出力するかどうか[true:する/false:しない]を取得します。 1056 * 1057 * EXCELなどを書き出す場合、シートブレイクやファイルブレイク時の行番号が、検索時の行番号と 1058 * 異なる為、エラー時の判定が難しくなります。 1059 * そこで、どうしてもわからなくなった場合に備えて、デバッグ情報を出力できるようにします。 1060 * 1061 * @og.rev 6.1.0.0 (2014/12/26) デバッグ情報を出力するかどうかを指定 1062 * 1063 * @return デバッグ出力 [true:する/false:しない] 1064 */ 1065 protected boolean isDebug() { 1066 return useDebug ; 1067 } 1068}