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