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