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.db;
017    
018    import org.opengion.fukurou.model.NativeType;
019    import org.opengion.fukurou.util.Attributes;
020    import org.opengion.fukurou.util.ErrorMessage;
021    import org.opengion.fukurou.util.TagBuffer;
022    import org.opengion.hayabusa.common.HybsSystem;
023    import org.opengion.hayabusa.common.HybsSystemException;
024    import org.opengion.hayabusa.resource.CodeData;
025    import org.opengion.hayabusa.resource.ColumnData;
026    import org.opengion.hayabusa.resource.LabelData;
027    import org.opengion.hayabusa.resource.RoleMode;
028    
029    /**
030     * DBType インターフェースを継承した Abstractクラスですã?
031     * getRendererValue( String value ) 、getEditorValue( String value ) ã€?
032     * isValueChack( String ) メソãƒ?ƒ‰をã?サブクラスで実è£?�™るå¿?¦�がありますã?
033     *
034     * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編é›?ƒ‘ラメータ、文字パラメータの追åŠ??
035     * @og.group ãƒ??ブル管ç�?
036     *
037     * @version  4.0
038     * @author   Kazuhiko Hasegawa
039     * @since    JDK5.0,
040     */
041    public final class DBColumn {
042    
043            // 3.5.4.2 (2003/12/15) COLUMNS_MAXSIZE を定義しておきますã?
044            private final int COLUMNS_MAXSIZE = HybsSystem.sysInt( "HTML_COLUMNS_MAXSIZE" ) ;   // 表示フィールドã?大きさ
045    
046            private final ColumnData columnData ;
047            private final LabelData  labelData ;
048            private final CodeData   codeData ;
049    
050            private final CellRenderer      cellRenderer    ;               // 表示用レンãƒ?ƒ©ー
051            private final CellEditor        cellEditor              ;               // 編é›?”¨エãƒ?‚£ター
052            private final DBType            dbType                  ;               // ãƒ??タのタイãƒ?
053    
054            private final String            lang                    ;               // è¨?ª?
055            private final boolean           writable                ;               // カラãƒ?�Œ書き込み可能かどã�?�‹
056            private final String            defValue                ;               // ãƒ??タのãƒ?ƒ•ォルトå?
057            private final Attributes        rendAttri               ;               // 表示用レンãƒ?ƒ©ー追åŠ?”¨属æ?
058            private final Attributes        editAttri               ;               // 編é›?”¨エãƒ?‚£ター追åŠ?”¨属æ?
059            private final boolean           addNoValue              ;               // メニューに空の選択リストを追åŠ?�™るかどã�?�‹ // 3.5.5.7 (2004/05/10)
060            private final String            dbid                    ;               // ãƒ??タベã?ス接続å?ID
061            private final boolean           official                ;               // カラãƒ?ƒªソースから作æ?されたかどã�?�‹               // 3.6.0.7 (2004/11/06)
062    
063            private final int                       checkLevel              ;               // DBColumn の 整合æ?チェãƒ?‚¯を行うレベルを規定しますã?
064    
065            private final Selection         selection               ;               // 4.0.0.0 (2007/11/07)
066    
067            private final String            eventColumn             ;       // 4.3.6.0 (2009/04/01) イベントカラãƒ?
068            private final String            rawEditParameter;       // 4.3.6.0 (2009/04/01) {@XXXX}の変換がされてã�?�ªã�?”Ÿパラメータ
069            private final String            rawRendParameter;       // 5.1.7.0  (2009/04/01) {@XXXX}の変換がされてã�?�ªã�?”Ÿパラメータ
070            private final String            eventURL                ;       // 4.3.6.0 (2009/04/01) イベントカラãƒ?�§利用するURL
071    
072            private final String            useSLabel               ;       // 5.5.1.0 (2012/04/03) MENUのベã?ス表示のåˆ?‚Š替ã�?
073            private final String            noDisplayVal    ;       // 5.6.2.3 (2013/03/22) 非表示æ–?­—ã?設å®?
074    
075            private final boolean           stringOutput    ;       // 5.7.6.3 (2013/05/23) ファイルレンãƒ?ƒ©出力時のフラグ
076    
077            /**
078             * DBColumnConfig オブジェクトより作æ?されるコンストラクター
079             * すべてのæƒ??は、インスタンス作æ?時に設定しますã?
080             * こã?オブジェクトã?ã€?¼‘度作æ?されると変更されることはありませんã€?
081             *
082             * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
083             * @og.rev 4.0.0.0 (2007/11/07) Selectionオブジェクトをキャãƒ?‚·ュする
084             * @og.rev 4.3.6.0 (2009/04/01) eventColumnの対å¿?
085             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
086             * @og.rev 5.5.1.0 (2012/04/03) useSLabel対å¿?
087             * @og.rev 5.6.2.3 (2013/03/22) 非表示æ–?­—ã?設定ã?noDisplayVal追åŠ?
088             * @og.rev 5.7.3.0 (2014/02/07) SelectionFactory 対å¿?
089             * @og.rev 5.7.6.3 (2014/05/23) stringOutput対å¿?
090             *
091             * @param   lang    è¨?ª?
092             * @param   clmData カラãƒ?ƒ‡ータオブジェクãƒ?
093             * @param   lblData ラベルãƒ??タオブジェクãƒ?
094             * @param   cdData  コードデータオブジェクãƒ?
095             */
096            public DBColumn( final String     lang,
097                                             final ColumnData clmData ,
098                                             final LabelData  lblData ,
099                                             final CodeData   cdData ) {
100                    this.lang       = lang ;
101                    this.columnData = clmData ;
102                    this.labelData  = lblData ;
103                    this.codeData   = cdData  ;
104    
105                    writable  = true ;
106    
107                    try {
108                            dbType = DBTypeFactory.newInstance( columnData.getDbType() );
109                    }
110                    catch( RuntimeException ex ) {
111                            String errMsg = "dbType の作æ?に失敗しましたã€?
112                                                    + " name=[" + columnData.getName() + "]"
113                                                    + " dbType=[" + columnData.getDbType() + "] "
114                                                    + ex.getMessage();
115                            throw new HybsSystemException( errMsg,ex );
116                    }
117    
118                    rendAttri       = null  ;
119                    editAttri       = null  ;
120                    addNoValue      = false ;
121                    official        = true  ;               // 3.6.0.7 (2004/11/06)
122                    checkLevel      = -1;
123                    dbid            = null  ;               // 標準から作æ?されるカラãƒ?‚ªブジェクトã?、DEFAULT 接続å?を設定するã?
124    
125                    eventColumn  = null;            // 4.3.6.0 (2009/04/01)
126                    rawEditParameter = clmData.getEditorParam(); // 4.3.6.0 (2009/04/01)
127                    rawRendParameter = clmData.getRendererParam(); // 5.1.7.0 (2010/06/01)
128                    eventURL         = null;                // 4.3.6.0 (2009/04/01)
129    
130                    useSLabel       = "auto";               // 5.5.1.0
131                    noDisplayVal= null;                     // 5.6.2.3 (2013/03/22) 非表示æ–?­—ã?設å®?
132    
133                    stringOutput = HybsSystem.sysBool( "USE_STRING_EXCEL_OUTPUT" );         // 5.7.6.3 (2014/05/23)
134    
135                    String def = columnData.getDefault();
136                    if( def != null ) { defValue = def; }
137                    else {              defValue = dbType.getDefault() ; }
138    
139                    // 5.7.3.0 (2014/02/07) SelectionFactory 対å¿?
140                    selection = ( codeData == null ? null : SelectionFactory.newSelection( "MENU",codeData ) );
141    
142                    try {
143                            cellRenderer = DBCellFactory.newRenderer( columnData.getRenderer(),this );
144                            cellEditor   = DBCellFactory.newEditor(   columnData.getEditor(),  this );
145                    }
146                    catch( RuntimeException ex ) {
147                            String errMsg = "Renderer,Editor の作æ?に失敗しましたã€?
148                                                    + " name=[" + columnData.getName() + "]"
149                                                    + " Renderer=[" + columnData.getRenderer() + "] "
150                                                    + " Editor=[" + columnData.getEditor() + "] "
151                                                    + ex.getMessage();
152                            throw new HybsSystemException( errMsg,ex );
153                    }
154            }
155    
156            /**
157             * DBColumnConfig オブジェクトより作æ?されるコンストラクター
158             * すべてのæƒ??は、インスタンス作æ?時に設定しますã?
159             * こã?オブジェクトã?ã€?¼‘度作æ?されると変更されることはありませんã€?
160             *
161             * @og.rev 4.0.0.0 (2007/11/07) Selectionオブジェクトをキャãƒ?‚·ュする
162             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
163             * @og.rev 5.1.8.0 (2010/07/01) メソãƒ?ƒ‰名変更(getDefValue â‡?getDefault)
164             * @og.rev 5.5.1.0 (2012/04/03) useSLabel対å¿?
165             * @og.rev 5.6.2.3 (2013/03/22) 非表示æ–?­—ã?設定ã?noDisplayVal追åŠ?
166             * @og.rev 5.6.6.0 (2013/07/05) codeKeyVal 属æ?を使用した、Selection_KEYVAL オブジェクトã?作æ?
167             * @og.rev 5.7.3.0 (2014/02/07) SelectionFactory 対å¿?
168             * @og.rev 5.7.6.3 (2014/05/23) stringOutput対å¿?
169             *
170             * @param   config DBColumnConfigオブジェクãƒ?
171             */
172            public DBColumn( final DBColumnConfig config ) {
173                    lang      = config.getLang()            ;
174    
175                    columnData      = config.getColumnData();
176                    labelData       = config.getLabelData();
177                    codeData        = config.getCodeData();
178    
179                    writable        = config.isWritable();
180                    dbType          = DBTypeFactory.newInstance( columnData.getDbType() );
181                    rendAttri       = config.getRendererAttributes();
182                    editAttri       = config.getEditorAttributes();
183                    addNoValue      = config.isAddNoValue();
184                    official        = config.isOfficial();          // 3.6.0.7 (2004/11/06)
185                    dbid            = config.getDbid();
186    
187                    eventColumn      = config.getEventColumn();      // 4.3.6.0 (2009/04/01)
188                    rawEditParameter = config.getRawEditParameter(); // 4.3.6.0 (2009/04/01)
189                    rawRendParameter = config.getRawRendParameter(); // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
190                    eventURL                 = config.getEventURL();                 // 4.3.6.0 (2009/04/01)
191    
192                    useSLabel                = config.getUseSLabel();               // 5.5.1.0 (2012/04/03)
193                    noDisplayVal     = config.getNoDisplayVal();    // 5.6.2.3 (2013/03/22) 非表示æ–?­—ã?設å®?
194    
195                    stringOutput     = config.isStringOutput();             // 5.7.6.3 (2014/05/23)
196    
197                    // DBColumn の 整合æ?チェãƒ?‚¯を行うレベルを規定しますã?
198                    String CHECK_LEVEL = HybsSystem.sys( "DB_OFFICIAL_COLUMN_CHECK_LEVEL" );
199                    if( !official && CHECK_LEVEL != null && CHECK_LEVEL.length() > 0 ) {
200                            checkLevel = Integer.parseInt( CHECK_LEVEL );
201                    }
202                    else {
203                            checkLevel = -1;
204                    }
205    
206                    String def = config.getDefault();
207                    if( def != null ) { defValue = def; }
208                    else {              defValue = dbType.getDefault() ; }
209    
210                    // 5.6.6.0 (2013/07/05) codeKeyVal 属æ?を使用した、Selection_KEYVAL オブジェクトã?作æ?
211                    // 優先é?位ã?、codeData オブジェクトで、codeKeyVal を利用したSelectionは、DBColumnConfig からのみ作æ?可能
212                    if( codeData != null ) {
213                            // 5.7.3.0 (2014/02/07) SelectionFactory 対å¿?
214                            selection = SelectionFactory.newSelection( "MENU",codeData );
215                    }
216                    else {
217                            String codeKeyVal = config.getCodeKeyVal();
218                            if( codeKeyVal != null ) {
219                                    // 5.7.3.0 (2014/02/07) SelectionFactory 対å¿?
220                                    selection = SelectionFactory.newSelection( "KEYVAL", codeKeyVal );
221                            }
222                            else {
223                                    selection = null;
224                            }
225                    }
226    
227                    cellRenderer = DBCellFactory.newRenderer( columnData.getRenderer(),this );
228                    cellEditor   = DBCellFactory.newEditor( columnData.getEditor(),this );
229            }
230    
231            /**
232             * è¨?ªžを返しますã?
233             *
234             * @return  è¨?ª?
235             */
236            public String getLang() {
237                    return lang;
238            }
239    
240            /**
241             * カラãƒ?��を返しますã?
242             *
243             * @return  カラãƒ?��
244             */
245            public String getName() {
246                    return columnData.getName();
247            }
248    
249            /**
250             * カラãƒ??ラベル名を返しますã?
251             *
252             * @return  カラãƒ??ラベルå�?
253             */
254            public String getLabel() {
255                    return labelData.getLabel();
256            }
257    
258            /**
259             * カラãƒ??ラベル名を返しますã?
260             *
261             * @return  カラãƒ??ラベルå�?名前(短))
262             */
263            public String getShortLabel() {
264                    return labelData.getShortLabel();
265            }
266    
267            /**
268             * カラãƒ??ラベル名を返しますã?
269             *
270             * @return  カラãƒ??ラベルå�?名前(長))
271             */
272            public String getLongLabel() {
273                    return labelData.getLongLabel();
274            }
275    
276            /**
277             * カラãƒ??クラスを文字å?にした名称を返しますã?
278             * これは?ŒHTML上ã?å�?¨®タグに?Œデータベã?ス定義に応じたクラス名を
279             * 表しますã?(VARCHAR2、NUMBER など)
280             *
281             * これは、カラãƒ??ãƒ??タタイãƒ?X,S9など)と機è?çš?�«重è¤?�—ますが?¤
282             * そã?カラãƒ?�Œ、大まかなåˆ?¡žで、文字å?であるかã?数字であるかを示しますã?
283             *
284             * 画面表示上ã?右å¯?�›、左å¯?�›ã‚??IMEのON/OFFなどの CSSファイルのæŒ?®šã?ã€?
285             * カラãƒ??ãƒ??タタイãƒ?X,S9など)ですが、テーブルソート時のソート条件
286             * は、この クラスæ–?­—å?(VARCHAR2、NUMBER)を参照しますã?
287             *
288             * @return  カラãƒ??クラスを文字å?にした名称(VARCHAR2、NUMBER など)
289             */
290            public String getClassName() {
291                    return columnData.getClassName();
292            }
293    
294            /**
295             * フィールドã?ãƒ??タ長を返しますã?
296             * 通常は、整数型ã?æ–?­—å?とãƒ??タ長は同じですが,小数点を表すデータ長は
297             * x,y 形式ã?場合ã?x + 2 桁で表されますã?(マイナス記号と小数点記号)
298             * 7,3 はã€?xxxx,yyy のフォーマットで、データ長はã€? になりますã?
299             *
300             * @og.rev 2.1.1.2 (2002/11/21) æœ?¤§桁数入力時の桁数チェãƒ?‚¯の間違ã�?‚’訂正ã€?
301             * @og.rev 4.0.0.0 (2005/01/31) メソãƒ?ƒ‰名変更 getMaxlength() â†?getTotalSize()
302             *
303             * @return  ãƒ??タ長定義æ–?­—å?
304             */
305            public int getTotalSize() {
306                    return columnData.getTotalSize();
307            }
308    
309            /**
310             * フィールドã?使用桁数を返しますã?
311             * 少数æŒ?®šã?場合ã?ã€?7,3" のようなカンマで整数部、小数部を区åˆ?�£た書式になりますã?
312             * 7,3 はã€?xxxx,yyy のフォーマットで、整数部?”桁ã?小数部?“桁を意味しますã?
313             *
314             * @return  使用桁数
315             */
316            public String getMaxlength() {
317                    return columnData.getMaxlength();
318            }
319    
320            /**
321             * フィールドã?整数部のãƒ??タ長を返しますã?
322             * 通常は、整数型ã?æ–?­—å?とãƒ??タ長は同じですが,小数点を表すデータ長は
323             * x,y 形式ã?場合ã?x - y 桁で表されますã?(マイナス記号含まã�?
324             * 7,3 はã€?xxxx,yyy のフォーマットで、データ長はã€? になりますã?
325             *
326             * @return  ãƒ??タ長定義æ–?­—å?
327             */
328            public int getSizeX() {
329                    return columnData.getSizeX() ;
330            }
331    
332            /**
333             * フィールドã?小数部のãƒ??タ長を返しますã?
334             * 通常は、整数型ã?æ–?­—å?ではã€? になりますが,小数点を表すデータ長は
335             * x,y 形式ã?場合ã?y 桁で表されますã?
336             * 7,3 はã€?xxxx,yyy のフォーマットで、データ長はã€? になりますã?
337             *
338             * @return  ãƒ??タ長定義æ–?­—å?
339             */
340            public int getSizeY() {
341                    return columnData.getSizeY() ;
342            }
343    
344            /**
345             * カラãƒ??表示桁数を返しますã?
346             * viewLength は、設定したå?合ã?み、使用できますã?通常は、null が返りますã?
347             *
348             * @og.rev 3.5.5.5 (2004/04/23) 新規追åŠ?
349             * @og.rev 4.0.0.0 (2005/01/31) メソãƒ?ƒ‰名変更 getSize() â†?getViewLength()
350             *
351             * @return      カラãƒ??æ–?­—桁数
352             */
353            public String getViewLength() {
354                    return columnData.getViewLength();
355            }
356    
357            /**
358             * カラãƒ?�Œ書き込み可能かどã�?�‹を返しますã?
359             *
360             * @return  カラãƒ?�Œ書き込み可能かどã�?�‹
361             */
362            public boolean isWritable() {
363                    return writable;
364            }
365    
366            /**
367             * ãƒ??タの値そã?もã?ではなくã?そã?値のラベルæ–?­—を返しますã?
368             *
369             * @og.rev 3.5.5.4 (2004/04/15) value ã�?null の場合ã?ã€?"(ゼロストリング)にするã€?
370             *
371             * @param   value       入力å?
372             *
373             * @return  ãƒ??タ表示用のæ–?­—å?
374             */
375            public String getRendererValue( final String value ) {
376                    return cellRenderer.getValue( (value != null ) ? value : "" );
377            }
378    
379            /**
380             * ãƒ??タ表示用のHTMLæ–?­—å?を作æ?しますã?
381             * 行番号毎に異なるå?を返すことの出来ã‚?DBCellRenderer を使用することがå?来ますã?
382             *
383             * @og.rev 3.5.5.7 (2004/05/10) 行番号に無関係に、å?を返すように変更しますã?
384             * @og.rev 4.0.0.0 (2005/11/30) 行番号に対応したå?を返すように変更しますã?
385             *
386             * @param   row         行番号
387             * @param   value       入力å?
388             *
389             * @return  ãƒ??タ編é›?”¨のæ–?­—å?
390             */
391            public String getRendererValue( final int row,final String value ) {
392                    return cellRenderer.getValue( row,(value != null ) ? value : "" );
393            }
394    
395            /**
396             * ãƒ??タ編é›?”¨のHTMLæ–?­—å?を作æ?しますã?
397             *
398             * @og.rev 3.5.5.4 (2004/04/15) value ã�?null の場合ã?ã€?"(ゼロストリング)にするã€?
399             *
400             * @param   value       入力å?
401             *
402             * @return  ãƒ??タ編é›?”¨のæ–?­—å?
403             */
404            public String getEditorValue( final String value ) {
405                    return cellEditor.getValue( (value != null ) ? value : "" );
406            }
407    
408            /**
409             * ãƒ??タ編é›?”¨のHTMLæ–?­—å?を作æ?しますã?
410             * 行番号付ã?編é›?ƒ‡ータを作æ?しますã?名前_行番号 で登録する為ã€?
411             * リクエスト情報を1つ毎ã?フィールドで処ç�?�§きますã?
412             *
413             * @param   row         行番号
414             * @param   value       入力å?
415             *
416             * @return  ãƒ??タ編é›?”¨のæ–?­—å?
417             */
418            public String getEditorValue( final int row,final String value ) {
419                    return cellEditor.getValue( row,(value != null ) ? value : "" );
420            }
421    
422            /**
423             * ãƒ??タ出力用の固定長æ–?­—å?を作æ?しますã?
424             * HOST送信用桁数がセãƒ?ƒˆされてã�?‚Œば、そちらを優先しますã?
425             *
426             * @og.rev 3.5.4.5 (2004/01/23) エンコード指定に変更しますã?
427             *
428             * @param   value       対象の値
429             * @param   encode      固定長で変換するæ–?­—エンコーãƒ?
430             *
431             * @return  ãƒ??タ編é›?”¨のæ–?­—å?
432             */
433            public String getWriterValue( final String value,final String encode ) {
434                    return dbType.valueFill( value ,columnData.getSizeX(), columnData.getSizeY(), encode );
435            }
436    
437            /**
438             * ãƒ??タの表示用レンãƒ?ƒ©ーを返しますã?
439             *
440             * @og.rev 3.8.0.2 (2005/07/11) 新規追åŠ?
441             *
442             * @return      ãƒ??タの表示用レンãƒ?ƒ©ー
443             */
444            public String getRenderer() {
445                    return columnData.getRenderer() ;
446            }
447    
448            /**
449             * ãƒ??タの編é›?”¨エãƒ?‚£ターを返しますã?
450             *
451             * @og.rev 3.8.0.2 (2005/07/11) 新規追åŠ?
452             *
453             * @return      ãƒ??タの編é›?”¨エãƒ?‚£ター
454             */
455            public String getEditor() {
456                    return columnData.getEditor() ;
457            }
458    
459            /**
460             * æ–?­—種別名を返しますã?
461             * カラãƒ??æ–?­—種別名名称を返しますã?
462             * これは?ŒHTML上ã?å�?¨®タグに?Œデータベã?ス定義に応じたクラスã‚?
463             * セãƒ?ƒˆã�?CSS(Cascading Style Sheet)の class="xxxxx" とする事により
464             * å�?¨®スタイルを表現するのに使用しますã?
465             *
466             * ここでは, カラãƒ?ƒªソースの DBTYPE 属æ?でæŒ?®šã?æ–?­—å?(X,S9,KXなど)を返しますã?
467             *
468             * @return  ãƒ??タのæ–?­—種別(X,KX,S9 など)
469             */
470            public String getDbType() {
471                    return columnData.getDbType() ;
472            }
473    
474            /**
475             * ãƒ??タのNATIVEの型ã?識別コードを返しますã?
476             *
477             * @og.rev 4.1.1.2 (2008/02/28) Enumåž?fukurou.model.NativeType)に変更
478             *
479             * @return  NATIVEの型ã?識別コーãƒ?DBType で規å®?
480             * @see org.opengion.fukurou.model.NativeType
481             */
482            public NativeType getNativeType() {
483                    return dbType.getNativeType();
484            }
485    
486            /**
487             * そã?カラãƒ??,ãƒ?ƒ•ォルトå?の値を返しますã?
488             *
489             * カラãƒ?ƒªソースに ãƒ?ƒ•ォルト情報が登録されてã�?‚‹場合ã?,そã?値を返しますã?
490             * ãƒ?ƒ•ォルトå?が設定されてã�?�ªã�??合ã?, null を返しますã?
491             *
492             * @return  ãƒ?ƒ•ォルトå?(無ければ null)
493             */
494            public String getDefault() {
495                    return defValue;
496            }
497    
498            /**
499             * 表示用レンãƒ?ƒ©ーのパラメータを取得しますã?
500             *
501             * @og.rev 3.4.0.0 (2003/09/01) 新規追åŠ?
502             *
503             * @return      表示用レンãƒ?ƒ©ーのパラメータ
504             */
505            public String getRendererParam() {
506                    return columnData.getRendererParam();
507            }
508    
509            /**
510             * 編é›?”¨エãƒ?‚£ターのパラメータを取得しますã?
511             *
512             * @og.rev 3.4.0.0 (2003/09/01) 新規追åŠ?
513             *
514             * @return      編é›?”¨エãƒ?‚£ターのパラメータ
515             */
516            public String getEditorParam() {
517                    return columnData.getEditorParam();
518            }
519    
520            /**
521             * ãƒ??タタイプã?パラメータを取得しますã?
522             *
523             * @og.rev 3.4.0.0 (2003/09/01) 新規追åŠ?
524             *
525             * @return      ãƒ??タタイプã?パラメータ
526             */
527            public String getDbTypeParam() {
528                    return columnData.getDbTypeParam();
529            }
530    
531            /**
532             * カラãƒ?ƒ­ールを取得しますã?
533             *
534             * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
535             *
536             * @return      カラãƒ?ƒ­ール
537             */
538            public String getRoles() {
539                    return columnData.getRoles();
540            }
541    
542            /**
543             * カラãƒ?‚ªブジェクトã?ロールモードを返しますã?
544             *
545             * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
546             *
547             * @return カラãƒ?‚ªブジェクトã?ロールモーãƒ?
548             */
549            public RoleMode getRoleMode() {
550                    return columnData.getRoleMode();
551            }
552    
553            /**
554             * 接続å?IDを返しますã?
555             *
556             * @return  接続å?ID
557             */
558            public String getDbid() {
559                    return dbid;
560            }
561    
562            /**
563             * String引数のæ–?­—å?を+1した文字å?を返しますã?
564             * これは、英字ã?場å�?A,B,C など)は、B,C,D のように,æœ?µ‚桁ã?æ–?­—コードを
565             * ?‹ï¼?しますã?
566             * æ–?­—å?が数字タイプã?場合ã?, 数字に変換してã€?1 しますã?(桁上がりもあり)
567             * 混在タイプã?場合ã?,æœ?¾Œã?桁だけを確認して ?‹1しますã?
568             * 引数ã�?null の場合と、ゼロæ–?­—å?("")の場合ã?,引数ã‚?そã?まま返しますã?
569             *
570             * ※ 機è?拡張?š第?’引数にæŒ?®šã?æ–?­—å?(数字ã?日付ç­?を指定する事でã€?
571             *    引数のæ–?­—å?に、任意ã?値を加算できるようにしますã?
572             *    ただしã?すべての DBTypeではなくã?ある程度特定しますã?
573             *    対象外ã? DBTypeで、第?’引数ã�?null 出なã�??合ã?、Exception ã‚?Throwsしますã?
574             *    第?’引数がã?null の場合ã?、従来と同じ?‹1しますã?
575             *
576             * @og.rev 5.6.0.3 (2012/01/24) ADD に、引数の値を加算する機è?を追åŠ?�—ますã?
577             *
578             * @param   value  引数のæ–?­—å?
579             * @param   add    åŠ?®—する文字å?(null の場合ã?、従来と同じã€?1 しますã?)
580             *
581             * @return  引数のæ–?­—å?を+1した文字å?。またã?、任意ã?値を加算した文字å?ã€?
582             */
583            public String valueAdd( final String value,final String add ) {
584                    // DBType の実è£??関係で、旧メソãƒ?ƒ‰は残しておきますã?
585                    if( add == null || add.isEmpty()  ) {
586                            return dbType.valueAdd( value );
587                    }
588                    else {
589                            return dbType.valueAdd( value , add );
590                    }
591            }
592    
593            /**
594             * ãƒ??タが登録可能かどã�?�‹をチェãƒ?‚¯しますã?
595             * ãƒ??タがエラーの場合ã?、そのエラーå†?®¹を返しますã?
596             *
597             * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数に追åŠ?
598             * @og.rev 3.6.0.7 (2004/11/06) official属æ?がfalseの場合ã?チェãƒ?‚¯レベルに対応したチェãƒ?‚¯を行うã€?
599             * @og.rev 3.8.0.8 (2005/10/03) 企画改å–?61200-050921-02 ラベルからHTMLタグを削除するã€?
600             * @og.rev 5.2.2.0 (2010/11/01) å†?ƒ¨処ç�?‚’ã€?valueCheck( value , true ) に委譲ã€?
601             *
602             * @param   value       チェãƒ?‚¯対象の値
603             *
604             * @return  エラーå†?®¹  正常時ã? null
605             * @see         #valueCheck( String , boolean )
606             */
607            public ErrorMessage valueCheck( final String value ) {
608                    return valueCheck( value , true );
609            }
610    
611            /**
612             * ãƒ??タが登録可能かどã�?�‹をチェãƒ?‚¯しますã?
613             * ãƒ??タがエラーの場合ã?、そのエラーå†?®¹を返しますã?
614             *
615             * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数に追åŠ?
616             * @og.rev 3.6.0.7 (2004/11/06) official属æ?がfalseの場合ã?チェãƒ?‚¯レベルに対応したチェãƒ?‚¯を行うã€?
617             * @og.rev 3.8.0.8 (2005/10/03) 企画改å–?61200-050921-02 ラベルからHTMLタグを削除するã€?
618             * @og.rev 5.2.2.0 (2010/11/01) 厳å¯?�«チェãƒ?‚¯(isStrict=true)するフラグを追åŠ?
619             *
620             * @param   value               チェãƒ?‚¯対象の値
621             * @param   isStrict    厳å¯?�«チェãƒ?‚¯(isStrict=true)するかどã�?�‹
622             *
623             * @return  エラーå†?®¹  正常時ã? null
624             */
625            public ErrorMessage valueCheck( final String value , final boolean isStrict ) {
626    
627                    // 3.8.0.8 (2005/10/03) ラベルからHTMLタグを削除するã€?
628                    String lbl = labelData.getLabel() ;
629                    if( lbl.indexOf( '<' ) >= 0 ) {
630                            lbl = lbl.replaceAll( "<[^>]*>","" );
631                    }
632    
633                    // 5.2.2.0 (2010/11/01) 厳å¯?�«チェãƒ?‚¯(isStrict=true)するフラグを追åŠ?
634                    ErrorMessage errMsg = dbType.valueCheck( lbl,value,columnData.getSizeX(), columnData.getSizeY(),columnData.getDbTypeParam() , isStrict );
635                    if( checkLevel >= 0 ) {
636                            // ERR0034:æŒ?®šã?カラãƒ?‚ªブジェクトには、カラãƒ?ƒªソースが存在しません。name={0} label={1}
637                            errMsg.addMessage( 0,checkLevel,"ERR0034", columnData.getName(),labelData.getLabel() );
638                    }
639                    return errMsg ;
640            }
641    
642            /**
643             * エãƒ?‚£ターで編é›?�•れたãƒ??タを登録する場合に、データそã?もã?ã‚?
644             * 変換して、実登録ãƒ??タを作æ?しますã?
645             * 例えば,大æ–?­—ã?みのフィールドならã?大æ–?­—化しますã?
646             * 実登録ãƒ??タの作æ?は、DBType オブジェクトを利用しますã?で,
647             * これと DBCellEditor とがアンマッチã?場合ã?、うまくデータ変換
648             * されなã�?�¯能性がありますã?で、注意願いますã?
649             *
650             * @param   value ä¸?ˆ¬に編é›?ƒ‡ータとして登録されたデータ
651             *
652             * @return  修正後ã?æ–?­—å?(ä¸?ˆ¬にãƒ??タベã?スに登録するãƒ??タ)
653             */
654            public String valueSet( final String value ) {
655                    return dbType.valueSet( value );
656            }
657    
658            /**
659             * action でæŒ?®šされたコマンドを実行して、å?の変換を行いますã?
660             * oldValue(旧ãƒ??タ)は、å?のDBTableModelに設定されてã�?�Ÿ値ですã?通常はã€?
661             * こã?値を使用してカラãƒ?¯Žに変換を行いますã?newValue(新ãƒ??タ)は、引数で
662             * æŒ?®šされた新しい値ですã?こã?値には、パラメータを指定して変換方法を
663             * 制御することも可能ですã?
664             * æŒ?®šã?アクションがカラãƒ?�§処ç�?�§きなã�??合ã?、エラーになりますã?
665             *
666             * @param   action アクションコマンãƒ?
667             * @param   oldValue 入力データ(旧ãƒ??タ)
668             * @param   newValue 入力データ(新ãƒ??タ)
669             *
670             * @return      実行後ã?ãƒ??タ
671             */
672            public String valueAction( final String action,final String oldValue,final String newValue ) {
673                    return dbType.valueAction( action,oldValue,newValue );
674            }
675    
676            /**
677             * å†?ƒ¨の設定情報オブジェクトを返しますã?
678             * こã?オブジェクトを ローカルで書き換えて、DBColumn を作るようにしますã?
679             *
680             * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig 関係ã?見直しã?
681             * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編é›?ƒ‘ラメータ、文字パラメータの追åŠ??
682             * @og.rev 3.5.5.5 (2004/04/23) size 属æ?の意味を変更、maxlength 属æ?を追åŠ??
683             * @og.rev 3.5.5.8 (2004/05/20) codeName 属æ?を追åŠ??
684             * @og.rev 3.6.0.7 (2004/11/06) カラãƒ?ƒªソースから作æ?されたかどã�?�‹(official属æ?追åŠ?
685             * @og.rev 5.1.8.0 (2010/07/01) すべての属æ?を設定するよã�?�«しますã?
686             * @og.rev 5.5.1.0 (2012/04/03) useSLabel対å¿?
687             * @og.rev 5.6.2.3 (2013/03/22) 非表示æ–?­—ã?設定ã?noDisplayVal追åŠ?
688             * @og.rev 5.7.6.3 (2014/05/23) stringOutput対å¿?
689             *
690             * @return      設定情報オブジェクãƒ?
691             */
692            public DBColumnConfig getConfig() {
693                    // 互換性確保ã?ため、DBColumnConfig の コンストラクタは修正してã�?�¾せんã€?
694    
695                    DBColumnConfig config =
696                            new DBColumnConfig(
697                                                    lang                                                    ,
698                                                    columnData.getName()                    ,
699                                                    labelData                                               ,
700                                                    columnData.getClassName()               ,
701                                                    columnData.getMaxlength()               ,
702                                                    String.valueOf( writable )              ,
703                                                    columnData.getRenderer()                ,
704                                                    columnData.getEditor()                  ,
705                                                    codeData                                                ,
706                                                    columnData.getDbType()                  ,
707                                                    defValue                                                ,
708                                                    columnData.getRendererParam()   ,
709                                                    columnData.getEditorParam()             ,
710                                                    columnData.getDbTypeParam()             ,
711                                                    columnData.getRoles()                   ,               // 4.0.0 (2005/11/30)
712                                                    official                                                ,               // 3.6.0.7 (2004/11/06)
713                                                    dbid     ) ;
714                    config.setViewLength( columnData.getViewLength() );
715    
716                    // 5.1.8.0 (2010/07/01) すべての属æ?を設定するよã�?�«しますã?
717                    // コンストラクタは修正してã�?�ªã�?�Ÿめã?セãƒ?‚¿ーメソãƒ?ƒ‰経由で渡しますã?
718                    config.setRendererAttributes( rendAttri );
719                    config.setEditorAttributes( editAttri );
720                    config.setAddNoValue( addNoValue );
721                    config.setEventColumn( eventColumn );
722                    config.setRawEditParameter( rawEditParameter );
723                    config.setRawRendParameter( rawRendParameter );
724                    config.setEventURL( eventURL );
725    
726                    config.setUseSLabel( useSLabel );                       // 5.5.1.0 (2012/04/03)
727                    config.setNoDisplayVal( noDisplayVal );         // 5.6.2.3 (2013/03/22) 非表示æ–?­—ã?設å®?
728    
729                    config.setStringOutput( stringOutput );         // 5.7.6.3 (2014/05/23) 
730    
731                    return config ;
732            }
733    
734            /**
735             * 表示用レンãƒ?ƒ©ーの追åŠ?±žæ?を返しますã?
736             *
737             * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig オブジェクトã?å†?ƒ¨キープをå»?­¢
738             *
739             * @return   属æ?リスãƒ?
740             */
741            public Attributes getRendererAttributes() {
742                    return rendAttri ;
743            }
744    
745            /**
746             * 編é›?”¨エãƒ?‚£ター用の追åŠ?±žæ?を返しますã?
747             *
748             * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig オブジェクトã?å†?ƒ¨キープをå»?­¢
749             *
750             * @return   属æ?リスãƒ?
751             */
752            public Attributes getEditorAttributes() {
753                    return editAttri ;
754            }
755    
756            /**
757             * メニューに空の選択リストを追åŠ?�™るかどã�?�‹を取得しますã?
758             *
759             * @og.rev 3.5.5.7 (2004/05/10) 新規追åŠ?
760             *
761             * @return      空の選択リストを追åŠ?�™るかどã�?�‹(true:追åŠ?�™ã‚?false:追åŠ?�—なã�?
762             */
763            public boolean isAddNoValue() {
764                    return addNoValue ;
765            }
766    
767            /**
768             * こã?カラãƒ?‚ªブジェクトがカラãƒ?ƒªソースより正式に作られたかどã�?�‹を取得しますã?
769             * カラãƒ?ƒªソースが無ã�??合ã?、仮オブジェクトかãƒ??タベã?スメタãƒ??タより作æ?されますã?
770             * そã?場合ã?、チェãƒ?‚¯機è?が緩くなるためã?正式なカラãƒ?‚ªブジェクトと区別する為に
771             * こã?属æ?を持ちますã?
772             *
773             * @og.rev 3.6.0.7 (2004/11/06) 新規追åŠ?
774             *
775             * @return      正式に作られたかどã�?�‹(true:正å¼?false:暫å®?
776             */
777            public boolean isOfficial() {
778                    return official ;
779            }
780    
781            /**
782             * カラãƒ??ラベルãƒ??タオブジェクトを返しますã?
783             *
784             * @return  カラãƒ??ラベルãƒ??タオブジェクãƒ?
785             */
786            public LabelData getLabelData() {
787                    return labelData;
788            }
789    
790            /**
791             * カラãƒ??コードデータオブジェクトを返しますã?
792             * コードデータが存在しなã�??合ã?、null を返しますã?
793             * 受け取り側で、null かどã�?�‹判定してから使用してくださいã€?
794             *
795             * @og.rev 5.2.1.0 (2010/10/01) codeData ã�?null でもã?そã?まま返しますã?
796             *
797             * @return  カラãƒ??コードデータオブジェクãƒ?
798             */
799            public CodeData getCodeData() {
800                    return codeData;
801            }
802    
803            /**
804             * æœ?¤§入力サイズ(maxlength)より、実際のフィールドã?サイズを求めますã?
805             *
806             * maxlength : colums_maxsize ?? â‡?size="maxlength"  変換しませんã€?
807             *
808             * ただしã?maxlength がã?colums_maxsize をè¶?�ˆるå?合ã?、colums_maxsize としますã?
809             *
810             * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソãƒ?ƒ‰ã‚?XHTMLTag から DBColumn へ移å‹?
811             * @og.rev 4.0.0.0 (2007/02/05) ADJUSTMENT 処ç�?‚’å»?­¢しますã?(CSSにて対å¿?
812             *
813             * @param maxlength       実際のæœ?¤§桁数
814             * @param colums_maxsize 表示上ã?æœ?¤§桁数ã€?
815             *
816             * @return 表示すべきサイズ
817             * @see #getFieldSize( int )
818             */
819            public int getFieldSize( final int maxlength,final int colums_maxsize ) {
820                    int size = maxlength;
821    
822                    if( size <= 0 || size > colums_maxsize ) {
823                            size = colums_maxsize;
824                    }
825    
826                    return size;
827            }
828    
829            /**
830             * æœ?¤§入力サイズ(maxlength)より、実際のフィールドã?サイズを求めますã?
831             *
832             * maxlength : colums_maxsize ?? â‡?size="maxlength"  変換しませんã€?
833             *
834             * ただしã?maxlength がã?COLUMNS_MAXSIZE をè¶?�ˆるå?合ã?、COLUMNS_MAXSIZE としますã?
835             *
836             * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソãƒ?ƒ‰ã‚?XHTMLTag から DBColumn へ移å‹?
837             * @og.rev 4.0.0.0 (2007/02/05) ADJUSTMENT 処ç�?‚’å»?­¢しますã?(CSSにて対å¿?
838             *
839             * @param maxlength       実際のæœ?¤§桁数
840             *
841             * @return 表示すべきサイズ
842             * @see #getFieldSize( int ,int )
843             */
844            public int getFieldSize( final int maxlength ) {
845                    return getFieldSize( maxlength,COLUMNS_MAXSIZE );
846            }
847    
848            /**
849             * コードリソースSelectionオブジェクトを返しますã?
850             *
851             * @og.rev 4.0.0.0 (2007/11/02) 新規追åŠ?
852             * @og.rev 5.7.3.0 (2014/02/07) null 対å¿?コードリソースの設定不良ç­?
853             * @og.rev 5.7.7.1 (2014/06/13) XXXMENU の editor は、警告を出さなã�??
854             *
855             * @return コードSelectionオブジェクãƒ?
856             */
857            public Selection getSelection() {
858            // 5.6.1.1 (2013/02/08) 暫定å?置。とりあえずエラーは発生させなã�??
859            //      if( selection == null ) {
860            //              String errMsg = "コードリソースが定義されてã�?�¾せんã€? + HybsSystem.CR
861            //                                      + "name=[" + getName() + "],label=[" + getLabel() + "]" ;       // 5.1.8.0 (2010/07/01) errMsg 修正
862            //              throw new HybsSystemException( errMsg );
863            //      }
864    
865                    // 5.7.3.0 (2014/02/07) null 対å¿?コードリソースの設定不良ç­?
866                    if( selection == null ) {
867                            // 5.7.7.1 (2014/06/13) XXXMENU の editor は、警告を出さなã�??
868                            String editor = getEditor();
869                            if( editor != null && editor.contains( "MENU" ) ) {
870                                    return null;
871                            }
872                            else {
873                                    String errMsg = "clm=[" + getName() + "],label=[" + getLabel() + "]のコードリソースが定義されてã�?�¾せんã€? ;
874                                    System.err.println( "警告ï¼? + errMsg );
875                                    return SelectionFactory.newSelection( "NULL",errMsg );
876                            }
877                    }
878    
879                    return selection ;
880            }
881    
882            /**
883             * イベントカラãƒ?親カラãƒ?
884             *
885             * @og.rev 4.3.6.0 (2009/04/01)
886             *
887             * @return イベントカラãƒ?
888             */
889            public String getEventColumn() {
890                    return eventColumn ;
891            }
892    
893            /**
894             * {&#064;XXXX}を変換してã�?�ªã�?ж態ã?編é›?ƒ‘ラメータを返しますã?
895             *
896             * @og.rev 4.3.6.0 (2009/04/01)
897             *
898             * @return 生編é›?ƒ‘ラメータ
899             */
900            public String getRawEditParam() {
901                    return rawEditParameter ;
902            }
903    
904            /**
905             * {&#064;XXXX}を変換してã�?�ªã�?ж態ã?編é›?ƒ‘ラメータを返しますã?
906             *
907             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
908             *
909             * @return 生表示パラメータ
910             */
911            public String getRawRendParam() {
912                    return rawRendParameter ;
913            }
914    
915            /**
916             * eventColumn利用時にJSで利用するURL
917             *
918             * @og.rev 4.3.6.0 (2009/04/01)
919             *
920             * @return イベンãƒ?RL
921             */
922            public String getEventURL() {
923                    return eventURL ;
924            }
925    
926            /**
927             * 引数のタグæ–?­—å?に対して、イベントカラãƒ??実行にå¿?¦�なspanタグを付加した
928             * æ–?­—å?を返しますã?
929             *
930             * @param tag タグæ–?­—å?
931             * @param initVal 子カラãƒ??初期値
932             * @param writable タグの要ç´?�Œ書き込み可能かどã�?�‹
933             *
934             * @return spanタグを付加したタグæ–?­—å?
935             */
936            public String getEventColumnTag( final String tag, final String initVal, final boolean writable ) {
937                    return getEventColumnTag( tag, initVal, -1, writable );
938            }
939    
940            /**
941             * 引数のタグæ–?­—å?に対して、イベントカラãƒ??実行にå¿?¦�なspanタグを付加した
942             * æ–?­—å?を返しますã?
943             *
944             * @param tag タグæ–?­—å?
945             * @param initVal 子カラãƒ??初期値
946             * @param row 行番号
947             * @param writable タグの要ç´?�Œ書き込み可能かどã�?�‹
948             *
949             * @return spanタグを付加したタグæ–?­—å?
950             */
951            public String getEventColumnTag( final String tag, final String initVal, final int row, final boolean writable ) {
952                    TagBuffer span = new TagBuffer( "span" );
953                    span.add( "class", HybsSystem.EVENT_COLUMN_CLASS );
954                    span.add( HybsSystem.EVENT_COLUMN_ID,  columnData.getName() + ( row < 0 ? "" : HybsSystem.JOINT_STRING + row ) );
955                    span.add( HybsSystem.EVENT_COLUMN_INITVAL, initVal );
956                    span.add( HybsSystem.EVENT_COLUMN_WRITABLE, String.valueOf( writable ) );
957                    span.setBody( tag );
958                    return span.makeTag();
959            }
960    
961            /**
962             * セãƒ?ƒˆされてã�?‚‹表示パラメータ、編é›?ƒ‘ラメータに"{&#064;XXXX}"が含まれてã�?‚‹ã�?パラメーターのパã?スがå¿?¦�か)ã‚?
963             * 返しますã?
964             *
965             * @og.rev 6.0.0.1 (2014/04/25) å†?ƒ¨処ç�?¤‰更
966             *
967             * @return "{&#064;XXXX}"が含まれてã�?‚‹ã�?含まれてã�?‚‹場å�?rue)
968             */
969            public boolean isNeedsParamParse() {
970                    return  ( rawRendParameter != null && rawRendParameter.indexOf( "{@" ) >= 0 )
971                            ||      ( rawEditParameter != null && rawEditParameter.indexOf( "{@" ) >= 0 );
972            }
973    
974            /**
975             * ラベル短ベã?スのメニューにするかどã�?�‹
976             *
977             * @og.rev 5.5.1.0 (2012/04/03)
978             *
979             * @return イベントカラãƒ?
980             */
981            public String getUseSLabel() {
982                    return useSLabel ;
983            }
984    
985            /**
986             * 非表示æ–?­—å?を返しますã?
987             *
988             * これは、例えば、数字型の場合ã?ã€? がデフォルトなどの場合ã?
989             * あえて表示したくなã�?�ªどのケースに使ã�?�¾すã?
990             * そã?ような状況が設定されてã�?�ªã�??合ã?、null が返されますã?
991             *
992             * @og.rev 5.6.2.3 (2013/03/22) 新規追åŠ?
993             *
994             * @return 非表示æ–?­?
995             */
996            public String getNoDisplayVal() {
997                    return noDisplayVal ;
998            }
999    
1000            /**
1001             * レンãƒ?ƒ©ー利用ファイル出力時に数値等もæ–?­—タイプに固定するかどã�?�‹(初期値:true)
1002             *
1003             * Excel出力時に利用されますã?
1004             * 通常はtrue(æ–?­—タイプ固定)ですã?
1005             * こã?フラグをfalseにする事でdbTypeに従ったå?力になりますã?
1006             *
1007             * @og.rev 5.7.6.3 (2014/05/23) 新規追åŠ?
1008             *
1009             * @return renderer利用ファイル出力時のString出力フラグ(true:String出åŠ?false:dbType次第??
1010             */
1011            public boolean isStringOutput() {
1012                    return stringOutput ;
1013            }
1014    }