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 */
016 package org.opengion.hayabusa.io;
017
018 import java.io.PrintWriter;
019 import java.util.List;
020 import java.util.Locale;
021 import java.util.Map;
022 import java.util.Map.Entry;
023
024 import org.opengion.hayabusa.common.HybsSystem;
025 import org.opengion.hayabusa.common.HybsSystemException;
026 import org.opengion.hayabusa.db.DBTableModel;
027 import org.opengion.hayabusa.db.DBColumn;
028 import org.opengion.fukurou.util.StringUtil;
029 import org.opengion.fukurou.util.HybsEntry;
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 */
047 public abstract class AbstractTableWriter implements TableWriter {
048 /** こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
049 private static final String VERSION = "5.7.9.0 (2014/08/08)" ;
050
051 // 5.1.6.0 (2010/05/01) dbType の簡易的な設å®?
052 /** dbType の簡易的な設å®?{@value} */
053 public static final int STRING = 0;
054 /** dbType の簡易的な設å®?{@value} */
055 public static final int NVAR = 1;
056 /** dbType の簡易的な設å®?{@value} */
057 public static final int NUMBER = 2;
058
059 protected DBTableModel table = null;
060 protected DBColumn[] dbColumn = null; // table に対するカラãƒ?‚ªブジェクãƒ?キャãƒ?‚·ュ)
061 protected int numberOfColumns = -1; // 4.0.0 (2005/01/31) 出力対象のカラãƒ?•°
062 protected int[] clmNo = null; // 出力対象のカラãƒ?•ª号配å?
063 protected int[] dbType = null;
064
065 private String separator = TAB_SEPARATOR; // é ?›®区åˆ?‚Šæ–??
066 private String headerSequence = HybsSystem.sys( "WRITER_HEADER_SEQUENCE" ) ;
067 private boolean append = false; // 3.5.4.2 (2003/12/15)
068 private String lang = null;
069 private String columns = null; // 4.0.0 (2005/11/30) 外部æŒ?®šã?カラãƒ?��
070 private String encode = null; // 3.5.4.5 (2004/01/23) エンコード文字å?æŒ?®?
071
072 private boolean useNumber = true; // 3.7.0.2 (2005/02/14) 行番号æƒ??をã?出力すã‚?true)/しなã�?false)を指å®?
073 private boolean useRenderer = false; // 5.2.1.0 (2010/10/01)
074
075 /**
076 * DBTableModel から å�?½¢式ã?ãƒ??タを作æ?して,PrintWriter に書きå?しますã?
077 * こã?メソãƒ?ƒ‰は、EXCEL 書きå?し時に使用しますã?
078 *
079 * @see #isExcel()
080 */
081 abstract public void writeDBTable();
082
083 /**
084 * DBTableModel から ãƒ??タを作æ?して,PrintWriter に書きå?しますã?
085 *
086 * @param writer PrintWriterオブジェクãƒ?
087 */
088 abstract public void writeDBTable( final PrintWriter writer );
089
090 /**
091 * numberOfColumns と DBColumn をå?期化しますã?
092 * å†?ƒ¨çš?�«、DBTableModel、lang , columns を使用してã€?
093 * numberOfColumns 、dbColumn、clmNo、dbType の値をå?期化しますã?
094 * カラãƒ?�Œ?‘é?目もなã�??合ã?è¨?ª?lnag)が未æŒ?®šã?DBTableModelが未æŒ?®?null)
095 * の場合ã?、false を返しますã?そã?場合ã?、以下ã?処ç�??正常に行えませんã€?
096 * ãƒ??タが0件の場合ã?、å?ç�?‚’行いますã?通常、ã?ãƒ?ƒ€ーのみのファイルã‚?
097 * 作æ?することになりますã?(これを雛形として、取込ãƒ??タを登録する事が可能)
098 *
099 * @og.rev 4.0.0.0 (2005/12/31) 外部æŒ?®šã?カラãƒ?��を使用
100 * @og.rev 5.1.6.0 (2010/05/01) DbType の初期値を設定するã?
101 *
102 * @return 初期化æ?功:true / 失敗:false
103 */
104 protected boolean createDBColumn() {
105
106 boolean rtnFlag = false;
107 if( lang != null && table != null ) {
108 if( columns != null ) {
109 String[] clms = StringUtil.csv2Array( columns );
110 numberOfColumns = clms.length;
111 clmNo = new int[numberOfColumns];
112 for( int i=0; i<numberOfColumns; i++ ) {
113 int no = table.getColumnNo( clms[i] );
114 clmNo[i] = no;
115 }
116 }
117 else {
118 numberOfColumns = table.getColumnCount();
119 clmNo = new int[numberOfColumns];
120 for( int i=0; i<numberOfColumns; i++ ) {
121 clmNo[i] = i;
122 }
123 }
124
125 dbColumn = table.getDBColumns();
126 rtnFlag = (numberOfColumns > 0); // カラãƒ?�Œ?‘é?目以上あれã?成功
127
128 // 5.1.6.0 (2010/05/01) DbType の初期値を設定するã?
129 dbType = new int[numberOfColumns];
130 for( int i=0; i<numberOfColumns; i++ ) {
131 String type = dbColumn[clmNo[i]].getDbType();
132
133 if( "NVAR".equals( type ) ) {
134 dbType[i] = NVAR;
135 }
136 else if( "S9".equals( type ) || "R".equals( type ) ) {
137 dbType[i] = NUMBER;
138 }
139 else {
140 dbType[i] = STRING;
141 }
142 }
143 }
144 return rtnFlag;
145 }
146
147 /**
148 * PrintWriter に DBTableModelのヘッãƒ??æƒ??を書き込みますã?
149 *
150 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
151 *
152 * @param writer PrintWriterオブジェクãƒ?
153 */
154 protected void writeHeader( final PrintWriter writer ) {
155 // ここでは処ç�?‚’行いませんã€?
156 }
157
158 /**
159 * PrintWriter に DBTableModelのラベルæƒ??を書き込みますã?
160 * 第ä¸?‚«ラãƒ?›®は、ラベルæƒ??を示ã�?"#Label" を書き込みますã?
161 * こã?行ã?、å?力形式に無関係に、TableWriter.TAB_SEPARATOR で区åˆ?‚‰れますã?
162 *
163 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
164 * @og.rev 3.7.0.2 (2005/02/14) 行番号æƒ??をã?出力すã‚?true)/しなã�?false)を指å®?
165 * @og.rev 4.0.0.0 (2005/12/31) 外部æŒ?®šã?カラãƒ?��を使用
166 *
167 * @param table DBTableModelオブジェクãƒ?
168 * @param writer PrintWriterオブジェクãƒ?
169 */
170 protected void writeLabel( final DBTableModel table,final PrintWriter writer ) {
171 if( useNumber ) {
172 writer.print( "#Label" );
173 writer.print( separator );
174 }
175 else {
176 writer.print( "#" );
177 }
178
179 for( int i=0; i<numberOfColumns; i++ ) {
180 if( i != 0 ) { writer.print( separator ); }
181 int clm = clmNo[i];
182 writer.print( dbColumn[clm].getLabel() );
183 }
184 writer.println();
185 }
186
187 /**
188 * PrintWriter に DBTableModelのé ?›®名情報を書き込みますã?
189 * 第ä¸?‚«ラãƒ?›®はã€??目名情報を示ã�?"#Name" を書き込みますã?
190 * こã?行ã?、å?力形式に無関係に、TableWriter.TAB_SEPARATOR で区åˆ?‚‰れますã?
191 *
192 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
193 * @og.rev 3.7.0.2 (2005/02/14) 行番号æƒ??をã?出力すã‚?true)/しなã�?false)を指å®?
194 *
195 * @param table DBTableModelオブジェクãƒ?
196 * @param writer PrintWriterオブジェクãƒ?
197 */
198 protected void writeName( final DBTableModel table,final PrintWriter writer ) {
199 if( useNumber ) {
200 writer.print( "#Name" );
201 writer.print( separator );
202 }
203 else {
204 writer.print( "#" );
205 }
206
207 for( int i=0; i<numberOfColumns; i++ ) {
208 if( i != 0 ) { writer.print( separator ); }
209 int clm = clmNo[i];
210 writer.print( table.getColumnName(clm) );
211 }
212 writer.println();
213 }
214
215 /**
216 * PrintWriter に DBTableModelのサイズæƒ??を書き込みますã?
217 * 第ä¸?‚«ラãƒ?›®は、サイズæƒ??を示ã�?"#Size" を書き込みますã?
218 * こã?行ã?、å?力形式に無関係に、TableWriter.TAB_SEPARATOR で区åˆ?‚‰れますã?
219 *
220 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
221 * @og.rev 3.5.5.5 (2004/04/23) DBColumn の size と maxlength の 意味を変更
222 * @og.rev 3.7.0.2 (2005/02/14) 行番号æƒ??をã?出力すã‚?true)/しなã�?false)を指å®?
223 *
224 * @param table DBTableModelオブジェクãƒ?
225 * @param writer PrintWriterオブジェクãƒ?
226 */
227 protected void writeSize( final DBTableModel table,final PrintWriter writer ) {
228 if( useNumber ) {
229 writer.print( "#Size" );
230 writer.print( separator );
231 }
232 else {
233 writer.print( "#" );
234 }
235
236 for( int i=0; i<numberOfColumns; i++ ) {
237 if( i != 0 ) { writer.print( separator ); }
238 int clm = clmNo[i];
239 writer.print( dbColumn[clm].getTotalSize() ); // 4.0.0 (2005/01/31) メソãƒ?ƒ‰名変更
240 }
241 writer.println();
242 }
243
244 /**
245 * PrintWriter に DBTableModelのクラス名情報を書き込みますã?
246 * 第ä¸?‚«ラãƒ?›®は、サイズæƒ??を示ã�?"#Class" を書き込みますã?
247 * こã?行ã?、å?力形式に無関係に、TableWriter.TAB_SEPARATOR で区åˆ?‚‰れますã?
248 *
249 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
250 *
251 * @param table DBTableModelオブジェクãƒ?
252 * @param writer PrintWriterオブジェクãƒ?
253 */
254 protected void writeClass( final DBTableModel table,final PrintWriter writer ) {
255 if( useNumber ) {
256 writer.print( "#Class" );
257 writer.print( separator );
258 }
259 else {
260 writer.print( "#" );
261 }
262
263 for( int i=0; i<numberOfColumns; i++ ) {
264 if( i != 0 ) { writer.print( separator ); }
265 int clm = clmNo[i];
266 writer.print( dbColumn[clm].getClassName() );
267 }
268 writer.println();
269 }
270
271 /**
272 * PrintWriter に セパレーターを書き込みますã?
273 * 第ä¸?‚«ラãƒ?›®は、サイズæƒ??を示ã�?"#----" を書き込みますã?
274 * こã?行ã?、å?力形式に無関係に、TableWriter.TAB_SEPARATOR で区åˆ?‚‰れますã?
275 *
276 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
277 * @og.rev 3.7.0.2 (2005/02/14) 行番号æƒ??をã?出力すã‚?true)/しなã�?false)を指å®?
278 *
279 * @param table DBTableModelオブジェクãƒ?
280 * @param writer PrintWriterオブジェクãƒ?
281 */
282 protected void writeSeparator( final DBTableModel table,final PrintWriter writer ) {
283 String sep = "----" ;
284 if( useNumber ) {
285 writer.print( "#----" );
286 writer.print( separator );
287 }
288 else {
289 writer.print( "#" );
290 }
291
292 for( int i=0; i<numberOfColumns; i++ ) {
293 if( i != 0 ) { writer.print( separator ); }
294 writer.print( sep );
295 }
296 writer.println();
297 }
298
299 /**
300 * PrintWriter に DBTableModelのãƒ??ブルæƒ??を書き込みますã?
301 * こã?クラスでは?Œデータã‚?ãƒ?ƒ–ルコーãƒ??ション(")で囲みますã?
302 * PrintWriter に DBTableModelのãƒ??ブルæƒ??を書き込みますã?
303 *
304 * @og.rev 2.0.0.5 (2002/09/30) 先é?ã�? でかつ数字タイãƒ?S9 or R)でなã�??合に ' をå?力するよã�?�«修正ã€?
305 * @og.rev 2.3.1.2 (2003/01/28) ãƒ??タ出力時に、改行が余å?に出されるç®?‰€を修正ã€?
306 * @og.rev 3.1.0.0 (2003/03/20) DBColumn から、getDbType() キーを直接取り出ã�?
307 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
308 * @og.rev 3.3.3.1 (2003/07/18) ファイルリーãƒ?ライト時に後ろスペã?スの除去を行いますã?
309 * @og.rev 3.7.0.2 (2005/02/14) 行番号æƒ??をã?出力すã‚?true)/しなã�?false)を指å®?
310 * @og.rev 3.8.0.1 (2005/06/17) DBTypeã�?NVAR の場合ã?、å?のUnicodeに戻しますã?
311 * @og.rev 5.1.6.0 (2010/05/01) DbType の初期値(dbType)を利用するã€?
312 * @og.rev 5.2.1.0 (2010/10/01) こã?メソãƒ?ƒ‰は、abstract 化しますã?
313 *
314 * @param table DBTableModelオブジェクãƒ?
315 * @param writer PrintWriterオブジェクãƒ?
316 */
317 abstract protected void writeData( final DBTableModel table,final PrintWriter writer ) ;
318 // protected void writeData( final DBTableModel table,final PrintWriter writer ) {
319 // int numberOfRows = table.getRowCount();
320 //
321 // for( int row=0; row<numberOfRows; row++ ) {
322 // if( useNumber ) {
323 // writer.print( row+1 );
324 // writer.print( separator );
325 // }
326 //
327 // for( int i=0; i<numberOfColumns; i++ ) {
328 // if( i != 0 ) { writer.print( separator ); }
329 //
330 // int clm = clmNo[i];
331 // String val = table.getValue(row,clm);
332 //// if( "NVAR".equals( dbColumn[clm].getDbType()) ) {
333 // if( dbType[i] == NVAR ) {
334 // val = StringUtil.getReplaceEscape( val );
335 // }
336 //
337 // if( val != null && val.length() > 0 && val.charAt(0) == '0' &&
338 //// NUMBER_TYPE_LIST.indexOf( dbColumn[clm].getDbType() ) < 0 ) {
339 // dbType[i] == NUMBER ) {
340 // writer.print( "'" ); // 開始日などの 00000000 を文字å?タイプで渡ã�?
341 // }
342 // writer.print( StringUtil.rTrim( val ) );
343 // }
344 // writer.println();
345 // }
346 // }
347
348 /**
349 * DBTableModel をセãƒ?ƒˆしますã?
350 *
351 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
352 * @og.rev 3.5.4.2 (2003/12/15) lang 引数も同時に設定しますã?
353 *
354 * @param table DBTableModelオブジェクãƒ?
355 * @param lang è¨?ªžコーãƒ?
356 */
357 public void setDBTableModel( final DBTableModel table, final String lang ) {
358 this.table = table;
359 this.lang = lang;
360 }
361
362 /**
363 * å†?ƒ¨の DBTableModel を返しますã?
364 *
365 * @return DBTableModelオブジェクãƒ?
366 */
367 public DBTableModel getDBTableModel() {
368 return table;
369 }
370
371 /**
372 * DBTableModelの出力é?をセãƒ?ƒˆしますã?
373 * Label,Name,Size,Class,Data のå�?ƒ•ィールドã?頭æ–?—ã?アルファベットで
374 * 出力é?を設定しますã?
375 *
376 * なお,å?力é?にæŒ?®šしなã�??目は出力されません
377 *
378 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
379 *
380 * @param hs 出力é? (LNSCD など)
381 */
382 public void setHeaderSequence( final String hs ) {
383 if( hs != null ) { headerSequence = hs ; }
384 }
385
386 /**
387 * DBTableModelの出力é?を返しますã?
388 * Label,Name,Size,Class,Data のå�?ƒ•ィールドã?頭æ–?—ã?アルファベットで
389 * 出力é?を設定しますã?
390 *
391 * なお,å?力é?にæŒ?®šしなã�??目は出力されません
392 *
393 * @return 出力é? (LNSCD など)
394 */
395 public String getHeaderSequence() {
396 return headerSequence ;
397 }
398
399 /**
400 * ãƒ??タを書き込ã‚??合ã?,区åˆ?‚Šæ–?—をセãƒ?ƒˆしますã?
401 *
402 * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
403 *
404 * @param sep 区åˆ?‚Šæ–??
405 */
406 public void setSeparator( final String sep ) {
407 if( sep != null ) { this.separator = sep; }
408 }
409
410 /**
411 * ãƒ??タを書き込ã‚??合ã?,区åˆ?‚Šæ–?—を返しますã?
412 *
413 * @return 区åˆ?‚Šæ–??
414 */
415 public String getSeparator() {
416 return separator;
417 }
418
419 /**
420 * DBTableModelのãƒ??タとして書き込ã‚?�¨きに、追åŠ?ƒ¢ードで書き込ã‚?�‹どã�?�‹を設定しますã?
421 * 初期値は、false(新規モーãƒ?ですã?
422 *
423 * @og.rev 3.5.4.2 (2003/12/15) 新規追åŠ?
424 *
425 * @param flag [true:追åŠ?ƒ¢ーãƒ?false:新規モード]
426 */
427 public void setAppend( final boolean flag ) {
428 append = flag;
429 }
430
431 /**
432 * DBTableModelのãƒ??タとして書き込ã‚?�¨きに、追åŠ?ƒ¢ードで書き込ã‚?�‹どã�?�‹を取得しますã?
433 * 初期値は、false(新規モーãƒ?ですã?
434 *
435 * @og.rev 3.5.4.2 (2003/12/15) 新規追åŠ?
436 *
437 * @return true(追åŠ?ƒ¢ーãƒ?/false(新規モーãƒ?
438 */
439 public boolean isAppend() {
440 return append ;
441 }
442
443 /**
444 * DBTableModelのãƒ??タとして読み込ã‚?�¨きã?シート名を設定しますã?
445 * 初期値はã€?Sheet1" ですã?
446 * これは、EXCEL追åŠ?©Ÿè?として実è£?�•れてã�?�¾すã?
447 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
448 *
449 * @og.rev 3.5.4.2 (2003/12/15) 新規追åŠ?
450 * @og.rev 3.5.4.3 (2004/01/05) 実è£?»?¢(TableWriter_Excel へ移å‹?
451 *
452 * @param sheetName シート名
453 */
454 public void setSheetName( final String sheetName ) {
455 String errMsg = "こã?メソãƒ?ƒ‰は、EXCEL追åŠ?©Ÿè?ですã?で、使用できませんã€?;
456 throw new UnsupportedOperationException( errMsg );
457 }
458
459 /**
460 * EXCEL雛型参è?ファイルのシート名を設定しますã?
461 * これは、EXCEL追åŠ?©Ÿè?として実è£?�•れてã�?�¾すã?
462 *
463 * EXCELファイルを書きå?す時にã€?››型として参ç?するシート名を指定しますã?
464 * これにより、è¤?•°の形式ã?異なるデータをé?次書きå?したã‚?appendモードを併用)する
465 * ことã‚??シートをæŒ?®šして新規にEXCELを作æ?する場合にフォーãƒ?‚’設定する事が可能になりますã?
466 * 初期値は、null(第ä¸?‚·ーãƒ? ですã?
467 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
468 *
469 * @og.rev 3.5.4.3 (2004/01/05) 新規追åŠ?
470 *
471 * @param sheetName シート名
472 */
473 public void setRefSheetName( final String sheetName ) {
474 String errMsg = "こã?メソãƒ?ƒ‰は、EXCEL追åŠ?©Ÿè?ですã?で、使用できませんã€?;
475 throw new UnsupportedOperationException( errMsg );
476 }
477
478 /**
479 * こã?クラスがã?EXCEL対応機è?を持ってã�?‚‹かどã�?�‹を返しますã?
480 *
481 * EXCEL対応機è?とは、シート名のセãƒ?ƒˆã€?››型参照ファイル名ã?セãƒ?ƒˆã€?
482 * 書き込みå…?ƒ•ァイルのFileオブジェクト取得などの、特殊機è?ですã?
483 * 本来は、インターフェースをå?けるべきとè€?�ˆますが、taglib クラス等ã?
484 * 関係があり、問ã�?�ˆわせによる条件åˆ?²�で対応しますã?
485 *
486 * @og.rev 3.5.4.3 (2004/01/05) 新規追åŠ?
487 *
488 * @return EXCEL対応機è?を持ってã�?‚‹かどã�?�‹(ここでは、false固定でã�?
489 */
490 public boolean isExcel() {
491 return false;
492 }
493
494 /**
495 * 出力å?ファイル名をセãƒ?ƒˆしますã?(DIR + Filename)
496 * これは、EXCEL追åŠ?©Ÿè?として実è£?�•れてã�?�¾すã?
497 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
498 * こã?メソãƒ?ƒ‰では、å¿?�š、UnsupportedOperationException がã?throw されますã?
499 *
500 * @og.rev 3.5.4.3 (2004/01/05) 新規作æ?
501 *
502 * @param filename EXCEL雛型参è?ファイルå�?
503 */
504 public void setFilename( final String filename ) {
505 String errMsg = "こã?メソãƒ?ƒ‰は、EXCEL追åŠ?©Ÿè?ですã?で、使用できませんã€?;
506 throw new UnsupportedOperationException( errMsg );
507 }
508
509 /**
510 * EXCEL雛型参è?ファイル名をセãƒ?ƒˆしますã?(DIR + Filename)
511 * これは、EXCEL追åŠ?©Ÿè?として実è£?�•れてã�?�¾すã?
512 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
513 * こã?メソãƒ?ƒ‰では、å¿?�š、UnsupportedOperationException がã?throw されますã?
514 *
515 * @og.rev 3.5.4.3 (2004/01/05) 新規作æ?
516 *
517 * @param filename EXCEL雛型参è?ファイルå�?
518 */
519 public void setRefFilename( final String filename ) {
520 String errMsg = "こã?メソãƒ?ƒ‰は、EXCEL追åŠ?©Ÿè?ですã?で、使用できませんã€?;
521 throw new UnsupportedOperationException( errMsg );
522 }
523
524 /**
525 * EXCEL出力時のãƒ?ƒ•ォルトフォント名を設定しますã?
526 * これは、EXCEL追åŠ?©Ÿè?として実è£?�•れてã�?�¾すã?
527 *
528 * EXCELファイルを書きå?す時に、デフォルトフォント名を指定しますã?
529 * フォント名は、EXCELのフォント名をそのまま使用してくださいã€?
530 * å†?ƒ¨çš?�«、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontName( String )
531 * に設定されますã?
532 * 初期値は、シスãƒ?ƒ リソース の TABLE_WRITER_DEFAULT_FONT_NAME ですã?
533 *
534 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
535 * こã?メソãƒ?ƒ‰では、å¿?�š、UnsupportedOperationException がã?throw されますã?
536 *
537 * @og.rev 3.8.5.3 (2006/08/07) 新規追åŠ?
538 *
539 * @param fontName フォント名
540 */
541 public void setFontName( final String fontName ) {
542 String errMsg = "こã?メソãƒ?ƒ‰は、EXCEL追åŠ?©Ÿè?ですã?で、使用できませんã€?;
543 throw new UnsupportedOperationException( errMsg );
544 }
545
546 /**
547 * EXCEL出力時のãƒ?ƒ•ォルトフォントã?イント数を設定しますã?
548 * これは、EXCEL追åŠ?©Ÿè?として実è£?�•れてã�?�¾すã?
549 *
550 * EXCELファイルを書きå?す時に、デフォルトã?イント数を指定しますã?
551 * å†?ƒ¨çš?�«、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontHeightInPoints( short )
552 * に設定されますã?
553 * 初期値は、シスãƒ?ƒ リソース の TABLE_WRITER_DEFAULT_FONT_POINTS ですã?
554 *
555 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
556 * こã?メソãƒ?ƒ‰では、å¿?�š、UnsupportedOperationException がã?throw されますã?
557 *
558 * @og.rev 3.8.5.3 (2006/08/07) 新規追åŠ?
559 *
560 * @param point フォントã?イント数
561 */
562 public void setFontPoint( final short point ) {
563 String errMsg = "こã?メソãƒ?ƒ‰は、EXCEL追åŠ?©Ÿè?ですã?で、使用できませんã€?;
564 throw new UnsupportedOperationException( errMsg );
565 }
566
567 /**
568 * 読み取りå…?ƒ•ァイルのエンコード文字å?を指定しますã?
569 * ファイルは、BufferedReader で受け取る為、本来は、エンコードã?不要ですがã€?
570 * 固定長ファイルの読み取り時ã?バイトコードå?割時に、指定ã?エンコードで
571 * åˆ?‰²するå¿?¦�がありますã?(例えば、半角文字ã?、Shift_JIS ではã€?¼‘バイãƒ?
572 *
573 * @og.rev 3.5.4.5 (2004/01/23) 新規作æ?
574 *
575 * @param enc ファイルのエンコード文字å?
576 */
577 public void setEncode( final String enc ) {
578 encode = enc;
579 }
580
581 /**
582 * 読み取りå…?ƒ•ァイルのエンコード文字å?を取得しますã?
583 * ファイルは、BufferedReader で受け取る為、本来は、エンコードã?不要ですがã€?
584 * 固定長ファイルの読み取り時ã?バイトコードå?割時に、指定ã?エンコードで
585 * åˆ?‰²するå¿?¦�がありますã?(例えば、半角文字ã?、Shift_JIS ではã€?¼‘バイãƒ?
586 *
587 * @og.rev 3.5.4.5 (2004/01/23) 新規作æ?
588 *
589 * @return ファイルのエンコード文字å?
590 */
591 protected String getEncode() {
592 return encode;
593 }
594
595 /**
596 * 行番号æƒ??をã?出力すã‚?true)/しなã�?false)を指定しますã?
597 *
598 * 通常のフォーマットでは、各行ã?先é?に行番号をå?力しますã?
599 * これはã€?NAME 属æ?を使用する場合には、å¿?�š出力するå¿?¦�がありますã?
600 * (#NAME 属æ?は、読み取り時には、å¿??ですã?)
601 * こã?、å?頭の行番号が不要な場å�?つまりã?他ã?シスãƒ?ƒ へのãƒ??タ出力ã?
602 * こã?シスãƒ?ƒ ではã€?NAME 属æ?がå?力されなã�?�Ÿめã?読み込みできませんã€?
603 * こã?行番号をå?力しなã�?‚ˆã�?�«できますã?
604 * 初期値は、true(出力すã‚? ですã?
605 *
606 * @og.rev 3.7.0.2 (2005/02/14) 新規追åŠ?
607 *
608 * @param useNumber 行番号æƒ??ã‚?[true:出力すã‚?false:しない]
609 */
610 public void setUseNumber( final boolean useNumber ) {
611 this.useNumber = useNumber;
612 }
613
614 /**
615 * 行番号æƒ??をã?出力すã‚?true)/しなã�?false)を返しますã?
616 *
617 * 通常のフォーマットでは、各行ã?先é?に行番号をå?力しますã?
618 * これはã€?NAME 属æ?を使用する場合には、å¿?�š出力するå¿?¦�がありますã?
619 * (#NAME 属æ?は、読み取り時には、å¿??ですã?)
620 * こã?、å?頭の行番号が不要な場å�?つまりã?他ã?シスãƒ?ƒ へのãƒ??タ出力ã?
621 * こã?シスãƒ?ƒ ではã€?NAME 属æ?がå?力されなã�?�Ÿめã?読み込みできませんã€?
622 * こã?行番号をå?力しなã�?‚ˆã�?�«できますã?
623 * 初期値は、true(出力すã‚? ですã?
624 *
625 * @og.rev 3.7.0.2 (2005/02/14) 新規追åŠ?
626 *
627 * @return 行番号æƒ??をã?出力すã‚?true)/しなã�?false)
628 */
629 protected boolean isUseNumber() {
630 return useNumber;
631 }
632
633 /**
634 * パラメーターリストをセãƒ?ƒˆしますã?
635 * å†?ƒ¨は、HybsEntry クラスを持ってã�?�¾すã?
636 * 引数がã?null の場合ã?、何もしませんã€?
637 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
638 *
639 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
640 *
641 * @param listParam パラメーターリスãƒ?
642 */
643 public void setParam( final List<HybsEntry> listParam ) {
644 String errMsg = "こã?メソãƒ?ƒ‰は、XML追åŠ?©Ÿè?ですã?で、使用できませんã€?;
645 throw new UnsupportedOperationException( errMsg );
646 }
647
648 /**
649 * 出力å?ファイルのカラãƒ??をã?外部(タグ)よりCSV形式ã?æ–?—å?でæŒ?®šしますã?
650 * ただしã?æŒ?®šã?カラãƒ?��は、DBTableModel上に存在してã�?‚‹å¿?¦�がありますã?
651 *
652 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
653 *
654 * @param clms 出力å?ファイルのカラãƒ??(カンマ区åˆ?‚Šæ–??
655 */
656 public void setColumns( final String clms ) {
657 columns = clms ;
658 }
659
660 /**
661 * ãƒ??タの書き込み開始行番号を設定しまã�?初期値:0)ã€?
662 *
663 * TAB区åˆ?‚Šãƒ?‚ストやEXCEL等ã?ãƒ??タの書き込みの開始行番号を指定しますã?
664 * 属æ?名ã?、行を飛ã?すå?ç�?�¨ã�?�†ことで、readTable タグと同じ名称ですã?
665 * ファイルの先é?行がã€?¼�行としてカウントしますã?で、設定å?は、読み飛ã?ã�?
666 * 件数になりますã?(?‘とæŒ?®šするとã€?¼‘件読み飛ã?しã??’行目から読み込みますã?)
667 * 行ã?読み飛ã?しと、カラãƒ??読み飛ã?ã�?columns)、refFileURL、refFilenameã€?
668 * refSheetName とともに使用すれば、ある程度のレイアウト設定が可能ですã?
669 * なおã?こã?機è?は、TableWriter_Excel のみに実è£?�—ますã?
670 *
671 * @og.rev 5.7.9.0 (2014/08/08) 新規作æ?
672 *
673 * @param skipRowCount 書き込み開始行番号
674 */
675 public void setSkipRowCount( final int skipRowCount ) {
676 if( skipRowCount != 0 ) {
677 String errMsg = "こã?メソãƒ?ƒ‰は、TableWriter_Excel のみの機è?ですã?で、使用できませんã€?;
678 throw new UnsupportedOperationException( errMsg );
679 }
680 }
681
682 /**
683 * 書込処ç�?�§コードリソースのラベル変換を行うかどã�?�‹[true/false]を指定しますã?
684 *
685 * コードリソースをそのままの値で出力すると、数字や記号になり何が書かれてã�?‚‹のã�?
686 * 不æ?になりますã?
687 * これは、コードリソースをラベルに変換して出力するかどã�?�‹を指定しますã?
688 * 当然、コードã?ユニã?クですが、ラベルはユニã?クになるかどã�?�‹保障はされてã�?�¾せんので
689 * TableReader 系で読み込ã‚??合には、リスクが発生しますã?
690 * またã?TableReader 系で読み込ã‚??合にもã?ラベルからコードを求めるé?変換を行うようにã€?
691 * setUseRenderer メソãƒ?ƒ‰でæŒ?®šするå¿?¦�がありますã?
692 *
693 * 従来は、TableWriter 系に、TableWriter_Renderer 系のクラスを作って対応してã�?�¾したがã?
694 * こã?メソãƒ?ƒ‰の属æ?値のフラグで、制御しますã?
695 *
696 * @og.rev 5.2.1.0 (2010/10/01) 新規作æ?
697 *
698 * @param useRenderer コードリソースのラベル変換を行うかどã�?�‹ [true:行う/false:行わない]
699 */
700 public void setUseRenderer( final boolean useRenderer ) {
701 this.useRenderer = useRenderer;
702 }
703
704 /**
705 * 書きå?しå?ç�?�§コードリソースのラベル変換を行うかどã�?�‹を返しますã?
706 * 初期値は、false(行わなã�? ですã?
707 *
708 * @og.rev 5.2.1.0 (2010/10/01) 新規作æ?
709 *
710 * @return ラベル変換を行うかどã�?�‹(true:行う/false:行わなã�?
711 */
712 protected boolean isUseRenderer() {
713 return useRenderer ;
714 }
715
716 /**
717 * ãƒ??タã‚?ãƒ?ƒ–ルコーãƒ??ション(")で囲みますã?
718 *
719 * こã?処ç�?�§は、前後をãƒ?ƒ–ルクオートで囲ã�?�Ÿめã?改行ã?有無は判定すã‚?
720 * å¿?¦�ã?ありませんã€?
721 * ãƒ?ƒ–ルクオートを含ã‚??合ã?、その直前にãƒ?ƒ–ルクオートを強制çš?�«追åŠ?�—ますã?
722 *
723 * @param data å…??Stringæ–?—å?
724 *
725 * @return ãƒ?ƒ–ルコーãƒ??ションで囲まれたæ–?—å?
726 */
727 protected String quotation( final String data ) {
728 return "\"" + StringUtil.replace( data,"\"","\"\"" ) + "\"" ;
729 }
730
731 /**
732 * ãƒ??タに対して 改行ã?ãƒ?ƒ–ルクオート等ã?処ç�?‚’行いますã?
733 *
734 * これは、データの前後をãƒ?ƒ–ルクオートで括ã‚?quotation(String)と異なã‚?
735 * 前後には、ダブルクオーãƒ?を追åŠ?�—ませんã€?
736 * ただしã?以下ã??’つの条件で処ç�?‚’行いますã?
737 * ?‘.改行を含ã‚??合ã?、ダブルクオートを強制çš?�«前後に追åŠ?�™るã?
738 * ?’.ダブルクオートを含ã‚??合ã?、その直前にãƒ?ƒ–ルクオートを強制çš?�«追åŠ?�™るã?
739 *
740 * @og.rev 5.2.2.0 (2010/11/01) 新規追åŠ?
741 *
742 * @param data å…??Stringæ–?—å?
743 *
744 * @return 改行ã?ãƒ?ƒ–ルクオート等ã?処ç�?
745 */
746 protected String quotation2( final String data ) {
747 String rtn = StringUtil.replace( data,"\"","\"\"" );
748 if( rtn != null && rtn.indexOf( HybsSystem.CR ) >= 0 ) {
749 rtn = "\"" + rtn + "\"" ;
750 }
751
752 return rtn ;
753 }
754
755 /**
756 * keys の整合æ?チェãƒ?‚¯を行いますã?
757 *
758 * キーかkeysMapのどちらかã�?null の場合ã?、何もしませんã€?
759 * チェãƒ?‚¯するキーは、å?部で大æ–?—に変換しておきますã?
760 * keysMap に登録するキーは、大æ–?—で登録しておいてくださいã€?
761 * ここのチェãƒ?‚¯では、キーマップに存在しなければ、エラーになりますã?
762 *
763 * @og.rev 5.6.6.1 (2013/07/12) keys の整合æ?チェãƒ?‚¯を行いますã?
764 *
765 * @param key チェãƒ?‚¯するキーæ–?—å?(null の場合ã?、å?ç�?�—なã�?
766 * @param keysMap 利用可能なキーのマッãƒ?大æ–?—に統ä¸?
767 */
768 protected void checkParam( final String key,final Map<String,String> keysMap ) {
769 // key ã�?keysMap かどちらかã�?null の場合ã?、å?ç�?‚’行わなã�??
770 if( key == null || keysMap == null ) { return; }
771
772 String upKey = key.toUpperCase(Locale.JAPAN);
773
774 if( ! keysMap.containsKey( upKey ) ) {
775 String BR = "<br />" + HybsSystem.CR ;
776 StringBuilder errMsg = new StringBuilder();
777 errMsg.append( BR )
778 .append( "æŒ?®šã?キーは、この tableWriter では、使用できませんã€? ).append( BR )
779 .append( " class=[" ).append( getClass().getName() ).append( "]" ).append( BR )
780 .append( " key =[" ).append( key ).append( "]" ).append( BR )
781 .append( " ======== usage keys ======== " ).append( BR ) ;
782 for( Map.Entry<String, String> entry : keysMap.entrySet() ) {
783 errMsg.append( " " ).append( entry.getKey() ).append( " : " )
784 .append( entry.getValue() ).append( BR ) ;
785 }
786 errMsg.append( " ============================ " ).append( BR );
787
788 throw new HybsSystemException( errMsg.toString() );
789 }
790 }
791 }