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    }