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