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