    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 */
    016package org.opengion.hayabusa.db;
    017
    018import org.opengion.fukurou.system.OgBuilder;                                                                   // 6.4.5.0 (2016/04/08)
    019import org.opengion.fukurou.model.NativeType;
    020import org.opengion.fukurou.util.Attributes;
    021import org.opengion.fukurou.util.ErrorMessage;
    022import org.opengion.fukurou.util.TagBuffer;
    023import org.opengion.fukurou.util.StringUtil;
    024import org.opengion.hayabusa.common.HybsSystem;
    025import org.opengion.hayabusa.common.HybsSystemException;
    026import org.opengion.hayabusa.resource.CodeData;
    027import org.opengion.hayabusa.resource.ColumnData;
    028import org.opengion.hayabusa.resource.LabelData;
    029import org.opengion.hayabusa.resource.RoleMode;
    030
    031/**
    032 * DBType インターフェースを継承した Abstractクラスです。
    033 * getRendererValue( String value ) 、getEditorValue( String value ) 、
    034 * isValueChack( String ) メソッドを、サブクラスで実装する必要があります。
    035 *
    036 * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編集パラメータ、文字パラメータの追加。
    037 * @og.group テーブル管理
    038 *
    039 * @version  4.0
    040 * @author   Kazuhiko Hasegawa
    041 * @since    JDK5.0,
    042 */
    043public final class DBColumn {
    044
    045        private final ColumnData        columnData;
    046        private final LabelData         labelData;
    047        private final CodeData          codeData;
    048
    049        private final CellRenderer      cellRenderer    ;                                                               // 表示用レンデラー
    050        private final CellEditor        cellEditor              ;                                                               // 編集用エディター
    051        private final DBType            dbType                  ;                                                               // データのタイプ
    052
    053        private final String            lang                    ;                                                               // 言語
    054        private final boolean           writable                ;                                                               // カラムが書き込み可能かどうか
    055        private final String            defValue                ;                                                               // データのデフォルト値
    056        private final Attributes        rendAttri               ;                                                               // 表示用レンデラー追加用属性
    057        private final Attributes        editAttri               ;                                                               // 編集用エディター追加用属性
    058        private final boolean           addNoValue              ;                                                               // メニューに空の選択リストを追加するかどうか        // 3.5.5.7 (2004/05/10)
    059        private final String            addKeyLabel             ;                                                               // 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか
    060        private final boolean           writeKeyLabel   ;                                                               // 6.2.3.0 (2015/05/01)
    061        private final String            dbid                    ;                                                               // データベース接続先ID
    062        private final boolean           official                ;                                                               // カラムリソースから作成されたかどうか           // 3.6.0.7 (2004/11/06)
    063
    064//      private final int                       checkLevel              ;                                                               // DBColumn の 整合性チェックを行うレベルを規定します。      6.9.5.0 (2018/04/23) 廃止
    065
    066        // 6.0.4.0 (2014/11/28) selection は、Column から取得するのではなく、Factory で作成する。
    067
    068        private final String            eventColumn             ;                                                               // 4.3.6.0 (2009/04/01) イベントカラム
    069        private final String            eventValue              ;                                                               // 6.3.3.0 (2015/07/25) eventValue 追加
    070        private final String            rawEditParameter;                                                               // 4.3.6.0 (2009/04/01) {@XXXX}の変換がされていない生パラメータ
    071        private final String            rawRendParameter;                                                               // 5.1.7.0 (2009/04/01) {@XXXX}の変換がされていない生パラメータ
    072        private final String            eventURL                ;                                                               // 4.3.6.0 (2009/04/01) イベントカラムで利用するURL
    073
    074        private final String            useSLabel               ;                                                               // 5.5.1.0 (2012/04/03) MENUのベース表示の切り替え
    075        private final String            noDisplayVal    ;                                                               // 5.6.2.3 (2013/03/22) 非表示文字の設定
    076
    077        private final boolean           stringOutput    ;                                                               // 5.7.6.3 (2013/05/23) ファイルレンデラ出力時のフラグ
    078        private final boolean           writeCtrl               ;                                                               // 7.0.1.5 (2018/12/10) writeCtrlで出力時のアンダーバー削除
    079        private final boolean           useDateFeed             ;                                                               // 日付送り戻し機能の有効/無効 8.1.2.3 (2022/05/20)
    080
    081        // ※ 内部の各属性から作り出す値です。CustomTable等では、毎回呼ばれるため、キャッシュします。
    082        private String                          className               ;                                                               // 6.4.5.0 (2016/04/08) キャッシュします。
    083
    084        private final boolean           isNumber                ;                                                               // 6.4.6.0 (2016/05/27) カラムが数値型がどうか。
    085        private final boolean           isDate                  ;                                                               // 6.4.6.0 (2016/05/27) カラムが日付型がどうか。
    086
    087        /**
    088         * DBColumnConfig オブジェクトより作成されるコンストラクター
    089         * すべての情報は、インスタンス作成時に設定します。
    090         * このオブジェクトは、１度作成されると変更されることはありません。
    091         *
    092         * @og.rev 4.0.0.0 (2005/01/31) 新規追加
    093         * @og.rev 4.0.0.0 (2007/11/07) Selectionオブジェクトをキャッシュする
    094         * @og.rev 4.3.6.0 (2009/04/01) eventColumnの対応
    095         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    096         * @og.rev 5.5.1.0 (2012/04/03) useSLabel対応
    097         * @og.rev 5.6.2.3 (2013/03/22) 非表示文字の設定。noDisplayVal追加
    098         * @og.rev 5.7.3.0 (2014/02/07) SelectionFactory 対応
    099         * @og.rev 5.7.6.3 (2014/05/23) stringOutput対応
    100         * @og.rev 6.0.4.0 (2014/11/28) selection は、Column から取得するのではなく、Factory で作成する。
    101         * @og.rev 6.0.4.0 (2014/11/28) addKeyLabel 属性を追加
    102         * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加
    103         * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加
    104         * @og.rev 6.4.5.2 (2016/05/06) rendAttri,editAttri は、not null にします。
    105         * @og.rev 6.4.6.0 (2016/05/27) isNumber , isDate 追加。
    106         * @og.rev 6.9.5.0 (2018/04/23) checkLevel 固定化(officialのみで制御します)
    107         * @og.rev 7.0.1.5 (2018/12/10) writeCtrlで出力時のアンダーバー削除
    108         * @og.rev 8.1.2.3 (2022/05/20) 日付送り戻し不具合対応(useDateFeed 属性追加)
    109         *
    110         * @param   lang    言語
    111         * @param   clmData カラムデータオブジェクト
    112         * @param   lblData ラベルデータオブジェクト
    113         * @param   cdData  コードデータオブジェクト
    114         */
    115        public DBColumn( final String     lang,
    116                                         final ColumnData clmData ,
    117                                         final LabelData  lblData ,
    118                                         final CodeData   cdData ) {
    119                this.lang               = lang ;
    120                this.columnData = clmData ;
    121                this.labelData  = lblData ;
    122                this.codeData   = cdData  ;
    123
    124                writable                = true ;
    125
    126                try {
    127                        dbType = DBTypeFactory.newInstance( columnData.getDbType() );
    128                }
    129                catch( final RuntimeException ex ) {
    130                        final String errMsg = "dbType の作成に失敗しました。"
    131                                                + " name=[" + columnData.getName() + "]"
    132                                                + " dbType=[" + columnData.getDbType() + "] "
    133                                                + ex.getMessage();
    134                        throw new HybsSystemException( errMsg,ex );
    135                }
    136
    137                // 6.4.5.2 (2016/05/06) rendAttri,editAttri は、not null にします。
    138                rendAttri               = new Attributes();                                                                             // 表示用レンデラー追加用属性
    139                editAttri               = new Attributes();                                                                             // 編集用エディター追加用属性
    140
    141                addNoValue              = false;
    142                addKeyLabel             = null;                                                                                                 // 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか
    143                writeKeyLabel   = false;                                                                                                // 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加
    144                official                = true;                                                                                                 // 3.6.0.7 (2004/11/06)
    145//              checkLevel              = -1;
    146                dbid                    = null;                                                                                                 // 標準から作成されるカラムオブジェクトは、DEFAULT 接続先を設定する。
    147
    148                eventColumn             = null;                                                                                                 // 4.3.6.0 (2009/04/01)
    149                eventValue              = null;                                                                                                 // 6.3.3.0 (2015/07/25) eventValue 追加
    150                rawEditParameter = columnData.getEditorParam();                                                 // 4.3.6.0 (2009/04/01)
    151                rawRendParameter = columnData.getRendererParam();                                               // 5.1.7.0 (2010/06/01)
    152                eventURL                = null;                                                                                                 // 4.3.6.0 (2009/04/01)
    153
    154                useSLabel               = "auto";                                                                                               // 5.5.1.0
    155                noDisplayVal    = null;                                                                                                 // 5.6.2.3 (2013/03/22) 非表示文字の設定
    156
    157                stringOutput    = HybsSystem.sysBool( "USE_STRING_EXCEL_OUTPUT" );              // 5.7.6.3 (2014/05/23)
    158                writeCtrl               = false;                                                                                                // 7.0.1.5 (2018/12/10) 出力時のアンダーバー削除
    159                useDateFeed             = true;                                                                                                 // 日付送り戻し機能の有効/無効 8.1.2.3 (2022/05/20)
    160
    161                final String def = columnData.getDefault();
    162                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    163                defValue = def == null ? dbType.getDefault() : def;
    164
    165                // 5.7.3.0 (2014/02/07) SelectionFactory 対応
    166                // 6.0.4.0 (2014/11/28) selection は、Column から取得するのではなく、Factory で作成する。
    167
    168                try {
    169                        cellRenderer = DBCellFactory.newRenderer( columnData.getRenderer(),this );
    170                        cellEditor   = DBCellFactory.newEditor(   columnData.getEditor(),  this );
    171                }
    172                catch( final RuntimeException ex ) {
    173                        final String errMsg = "Renderer,Editor の作成に失敗しました。"
    174                                                + " name=["             + columnData.getName()          + "]"
    175                                                + " Renderer=[" + columnData.getRenderer()      + "]"
    176                                                + " Editor=["   + columnData.getEditor()        + "]"
    177                                                + ex.getMessage();
    178                        throw new HybsSystemException( errMsg,ex );
    179                }
    180
    181                // 6.4.6.0 (2016/05/27) isNumber , isDate 追加。
    182                isNumber = StringUtil.contains( columnData.getClassName() , "NUMBER" , "INTEGER" , "DECIMAL" , "INT64" );
    183                isDate   = StringUtil.contains( columnData.getClassName() , "DATE" , "TIMESTAMP" );
    184        }
    185
    186        /**
    187         * DBColumnConfig オブジェクトより作成されるコンストラクター
    188         * すべての情報は、インスタンス作成時に設定します。
    189         * このオブジェクトは、１度作成されると変更されることはありません。
    190         *
    191         * @og.rev 4.0.0.0 (2007/11/07) Selectionオブジェクトをキャッシュする
    192         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    193         * @og.rev 5.1.8.0 (2010/07/01) メソッド名変更(getDefValue ⇒ getDefault)
    194         * @og.rev 5.5.1.0 (2012/04/03) useSLabel対応
    195         * @og.rev 5.6.2.3 (2013/03/22) 非表示文字の設定。noDisplayVal追加
    196         * @og.rev 5.6.6.0 (2013/07/05) codeKeyVal 属性を使用した、Selection_KEYVAL オブジェクトの作成
    197         * @og.rev 5.7.3.0 (2014/02/07) SelectionFactory 対応
    198         * @og.rev 5.7.6.3 (2014/05/23) stringOutput対応
    199         * @og.rev 6.0.4.0 (2014/11/28) selection は、Column から取得するのではなく、Factory で作成する。
    200         * @og.rev 6.0.4.0 (2014/11/28) addKeyLabel 属性を追加
    201         * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加
    202         * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加
    203         * @og.rev 6.4.6.0 (2016/05/27) isNumber , isDate 追加。
    204         * @og.rev 6.9.5.0 (2018/04/23) checkLevel 固定化(officialのみで制御します)
    205         * @og.rev 7.0.1.5 (2018/12/10) writeCtrlで出力時のアンダーバー削除
    206         * @og.rev 8.1.2.3 (2022/05/20) 日付送り戻し不具合対応(useDateFeed 属性追加)
    207         *
    208         * @param   config DBColumnConfigオブジェクト
    209         */
    210        public DBColumn( final DBColumnConfig config ) {
    211                lang                    = config.getLang();
    212
    213                columnData              = config.getColumnData();
    214                labelData               = config.getLabelData();
    215                codeData                = config.getCodeData();
    216
    217                writable                = config.isWritable();
    218                dbType                  = DBTypeFactory.newInstance( columnData.getDbType() );
    219                rendAttri               = config.getRendererAttributes();
    220                editAttri               = config.getEditorAttributes();
    221                addNoValue              = config.isAddNoValue();
    222                addKeyLabel             = config.getAddKeyLabel();                                                              // 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか
    223                writeKeyLabel   = config.isWriteKeyLabel();                                                             // 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加
    224                official                = config.isOfficial();                                                                  // 3.6.0.7 (2004/11/06)
    225                dbid                    = config.getDbid();
    226
    227                eventColumn             = config.getEventColumn();                                                              // 4.3.6.0 (2009/04/01)
    228                eventValue              = config.getEventValue();                                                               // 6.3.3.0 (2015/07/25) eventValue 追加
    229                rawEditParameter = config.getRawEditParameter();                                                // 4.3.6.0 (2009/04/01)
    230                rawRendParameter = config.getRawRendParameter();                                                // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    231                eventURL                = config.getEventURL();                                                                 // 4.3.6.0 (2009/04/01)
    232
    233                useSLabel               = config.getUseSLabel();                                                                // 5.5.1.0 (2012/04/03)
    234                noDisplayVal    = config.getNoDisplayVal();                                                             // 5.6.2.3 (2013/03/22) 非表示文字の設定
    235
    236                stringOutput    = config.isStringOutput();                                                              // 5.7.6.3 (2014/05/23)
    237                writeCtrl               = config.isWriteControl();                                                              // 7.0.1.5 (2018/12/10)
    238                useDateFeed             = config.isDateFeed();                                                                  // 8.1.2.3 (2022/05/20)
    239//              // 6.9.5.0 (2018/04/23) checkLevel 固定化(officialのみで制御します)
    240//              // DBColumn の 整合性チェックを行うレベルを規定します。
    241//              final String CHECK_LEVEL = HybsSystem.sys( "DB_OFFICIAL_COLUMN_CHECK_LEVEL" );
    242//              if( !official && CHECK_LEVEL != null && CHECK_LEVEL.length() > 0 ) {
    243//                      checkLevel = Integer.parseInt( CHECK_LEVEL );
    244//              }
    245//              else {
    246//                      checkLevel = -1;
    247//              }
    248
    249                final String def = config.getDefault();
    250                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    251                defValue = def == null ? dbType.getDefault() : def;
    252
    253                // 5.6.6.0 (2013/07/05) codeKeyVal 属性を使用した、Selection_KEYVAL オブジェクトの作成
    254                // 優先順位は、codeData オブジェクトで、codeKeyVal を利用したSelectionは、DBColumnConfig からのみ作成可能
    255                // 6.0.4.0 (2014/11/28) selection は、Column から取得するのではなく、Factory で作成する。
    256
    257                cellRenderer = DBCellFactory.newRenderer( columnData.getRenderer(),this );
    258                cellEditor   = DBCellFactory.newEditor(   columnData.getEditor(),  this );
    259
    260                // 6.4.6.0 (2016/05/27) isNumber , isDate 追加。
    261                isNumber = StringUtil.contains( columnData.getClassName() , "NUMBER" , "INTEGER" , "DECIMAL" , "INT64" );
    262                isDate   = StringUtil.contains( columnData.getClassName() , "DATE" , "TIMESTAMP" );
    263        }
    264
    265        /**
    266         * 言語を返します。
    267         *
    268         * @return  言語
    269         */
    270        public String getLang() {
    271                return lang;
    272        }
    273
    274        /**
    275         * カラム名を返します。
    276         *
    277         * @return  カラム名
    278         */
    279        public String getName() {
    280                return columnData.getName();
    281        }
    282
    283        /**
    284         * カラムのラベル名を返します。
    285         *
    286         * @return  カラムのラベル名
    287         */
    288        public String getLabel() {
    289                return labelData.getLabel();
    290        }
    291
    292        /**
    293         * カラムのラベル名を返します。
    294         *
    295         * @return  カラムのラベル名(名前(短))
    296         */
    297        public String getShortLabel() {
    298                return labelData.getShortLabel();
    299        }
    300
    301        /**
    302         * カラムのラベル名を返します。
    303         *
    304         * @return  カラムのラベル名(名前(長))
    305         */
    306        public String getLongLabel() {
    307                return labelData.getLongLabel();
    308        }
    309
    310        /**
    311         * カラムの概要説明を返します。
    312         *
    313         * @og.rev 6.8.3.1 (2017/12/01) 新規追加。
    314         *
    315         * @return  カラムの概要説明
    316         */
    317        public String getDescription() {
    318                return labelData.getDescription();
    319        }
    320
    321        /**
    322         * このカラムが、数値型かどうかを返します。
    323         *
    324         * ColumnDataのgetClassName() の値が、"NUMBER" , "INTEGER" , "DECIMAL" , "INT64"
    325         * の場合、true:数値型 を返します。
    326         *
    327         * @return  カラムが、数値型かどうか
    328         *
    329         * @og.rev 6.4.6.0 (2016/05/27) isNumber , isDate 追加。
    330         */
    331        public boolean isNumberType() {
    332                return isNumber;
    333        }
    334
    335        /**
    336         * このカラムが、日付型かどうかを返します。
    337         *
    338         * ColumnDataのgetClassName() の値が、"DATE" , "TIMESTAMP"
    339         * の場合、true:数値型 を返します。
    340         *
    341         * @return  カラムが、日付型かどうか
    342         *
    343         * @og.rev 6.4.6.0 (2016/05/27) isNumber , isDate 追加。
    344         */
    345        public boolean isDateType() {
    346                return isDate;
    347        }
    348
    349        /**
    350         * カラムのクラスを文字列にした名称を返します。
    351         * 内容的には、カラムの className の値と、dbTypeの値をマージした値になります。
    352         * さらに、editorAttributesの "class"キーワードの値もマージします。
    353         * ただし、この値には、must属性も設定されているため、それだけは除外します。
    354         * 各種スタイルを表現するのに使用します。
    355         *
    356         * @og.rev 6.4.4.2 (2016/04/01) editAttri に clazz属性が設定されている場合は、スペースで連結して返します。
    357         * @og.rev 6.4.5.0 (2016/04/08) className , dbType , editAttriのclass属性(除くmust)をスペースで連結して返します。
    358         * @og.rev 6.4.5.1 (2016/04/28) class属性の連結で、noinput も除外する。(mustAny,must,noinput が除外)
    359         * @og.rev 6.4.5.2 (2016/05/06) rendAttri,editAttri は、not null にします。
    360         * @og.rev 6.4.6.0 (2016/05/27) ColumnDataのclassName は使わない。
    361         * @og.rev 6.4.6.1 (2016/06/03) ColumnDataのclassName 復活。BIT などは、残さないと、いけない。
    362         *
    363         * @return  カラムのクラスを文字列にした名称(X9,X,など)
    364         * @see         #getDbType()
    365         */
    366        public String getClassName() {
    367                if( className == null ) {
    368                        final String dbTyp = columnData.getDbType();
    369                        // 6.4.6.0 (2016/05/27) オリジナルのclassName は使わない。
    370                        // 6.4.6.1 (2016/06/03) 復活。BIT などは、残さないと、いけない。
    371                        final OgBuilder clsNmBuf = new OgBuilder()
    372                                                                                .append( columnData.getClassName() )
    373                                                                                .delete( "VARCHAR2" , "NUMBER" );
    374
    375                        final OgBuilder edtAttBuf = new OgBuilder();
    376                        // 6.4.5.2 (2016/05/06) rendAttri,editAttri は、not null にします。
    377        //              if( editAttri != null ) {
    378                                edtAttBuf.append( editAttri.get( "class" ) )
    379        //                                              .delete( "mustAny" , "must" );                                          // mustAnyが先
    380                                                        .delete( "mustAny" , "must"  , "noinput" );                     // mustAnyが先
    381        //              }
    382
    383                        className = new OgBuilder()
    384                                                        .join( " " , dbTyp , clsNmBuf , edtAttBuf )                     // 6.4.6.1 (2016/06/03) 復活
    385        //                                              .join( " " , dbTyp , edtAttBuf )                                        // 6.4.6.0 (2016/05/27)
    386        //                                              .toString();
    387                                                        .toString()
    388                                                        .trim() ;
    389                }
    390
    391                return className ;
    392        }
    393
    394        /**
    395         * フィールドのデータ長を返します。
    396         * 通常は、整数型の文字列とデータ長は同じですが,小数点を表すデータ長は
    397         * x,y 形式の場合、x + 2 桁で表されます。(マイナス記号と小数点記号)
    398         * 7,3 は、 xxxx,yyy のフォーマットで、データ長は、9 になります。
    399         *
    400         * @og.rev 2.1.1.2 (2002/11/21) 最大桁数入力時の桁数チェックの間違いを訂正。
    401         * @og.rev 4.0.0.0 (2005/01/31) メソッド名変更 getMaxlength() → getTotalSize()
    402         *
    403         * @return  データ長定義文字列
    404         */
    405        public int getTotalSize() {
    406                return columnData.getTotalSize();
    407        }
    408
    409        /**
    410         * フィールドの使用桁数を返します。
    411         * 小数指定の場合は、"7,3" のようなカンマで整数部、小数部を区切った書式になります。
    412         * 7,3 は、 xxxx,yyy のフォーマットで、整数部４桁、小数部３桁を意味します。
    413         *
    414         * @return  使用桁数
    415         */
    416        public String getMaxlength() {
    417                return columnData.getMaxlength();
    418        }
    419
    420        /**
    421         * フィールドの整数部のデータ長を返します。
    422         * 通常は、整数型の文字列とデータ長は同じですが,小数点を表すデータ長は
    423         * x,y 形式の場合、x - y 桁で表されます。(マイナス記号含まず)
    424         * 7,3 は、 xxxx,yyy のフォーマットで、データ長は、4 になります。
    425         *
    426         * @return  データ長定義文字列
    427         */
    428        public int getSizeX() {
    429                return columnData.getSizeX() ;
    430        }
    431
    432        /**
    433         * フィールドの小数部のデータ長を返します。
    434         * 通常は、整数型の文字列では、0 になりますが,小数点を表すデータ長は
    435         * x,y 形式の場合、y 桁で表されます。
    436         * 7,3 は、 xxxx,yyy のフォーマットで、データ長は、3 になります。
    437         *
    438         * @return  データ長定義文字列
    439         */
    440        public int getSizeY() {
    441                return columnData.getSizeY() ;
    442        }
    443
    444        /**
    445         * カラムの表示桁数を返します。
    446         * viewLength は、設定した場合のみ、使用できます。通常は、null が返ります。
    447         *
    448         * @og.rev 3.5.5.5 (2004/04/23) 新規追加
    449         * @og.rev 4.0.0.0 (2005/01/31) メソッド名変更 getSize() → getViewLength()
    450         *
    451         * @return      カラムの文字桁数
    452         */
    453        public String getViewLength() {
    454                return columnData.getViewLength();
    455        }
    456
    457        /**
    458         * カラムが書き込み可能かどうかを返します。
    459         *
    460         * @return  カラムが書き込み可能かどうか
    461         */
    462        public boolean isWritable() {
    463                return writable;
    464        }
    465
    466        /**
    467         * データの値そのものではなく、その値のラベル文字を返します。
    468         *
    469         * @og.rev 3.5.5.4 (2004/04/15) value が null の場合は、""(ゼロストリング)にする。
    470         *
    471         * @param   value       入力値
    472         *
    473         * @return  データ表示用の文字列
    474         * @og.rtnNotNull
    475         */
    476        public String getRendererValue( final String value ) {
    477                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    478                return cellRenderer.getValue( value == null ? "" : value );
    479        }
    480
    481        /**
    482         * データ表示用のHTML文字列を作成します。
    483         * 行番号毎に異なる値を返すことの出来る DBCellRenderer を使用することが出来ます。
    484         *
    485         * @og.rev 3.5.5.7 (2004/05/10) 行番号に無関係に、値を返すように変更します。
    486         * @og.rev 4.0.0.0 (2005/11/30) 行番号に対応した値を返すように変更します。
    487         *
    488         * @param   row         行番号
    489         * @param   value       入力値
    490         *
    491         * @return  データ編集用の文字列
    492         * @og.rtnNotNull
    493         */
    494        public String getRendererValue( final int row,final String value ) {
    495                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    496                return cellRenderer.getValue( row,value == null ? "" : value );
    497        }
    498
    499        /**
    500         * データ表示用のHTML文字列を作成します。
    501         * 行番号毎に異なる値を返すことの出来る DBCellRenderer を使用することが出来ます。
    502         * 第３引数に、パラメータを渡すことが出来ます。これは、viewMarker で
    503         * [$XXXX param] 形式を渡すことで、行単位に表示形式を変更できます。
    504         * AbstractRenderer では、#getValue( String ) を呼び出しています。
    505         *
    506         * @og.rev 6.8.3.1 (2017/12/01) パラメータを渡せるようにします。
    507         *
    508         * @param   row         行番号
    509         * @param   value       入力値
    510         * @param   param パラメータ
    511         *
    512         * @return  データ編集用の文字列
    513         * @og.rtnNotNull
    514         */
    515        public String getRendererValue( final int row,final String value,final String param ) {
    516                return cellRenderer.getValue( row,value == null ? "" : value , param );
    517        }
    518
    519        /**
    520         * データ出力用の文字列を作成します。
    521         * ファイル等に出力する形式を想定しますので、HTMLタグを含まない
    522         * データを返します。
    523         *
    524         * writeKeyLabel == true かつ addKeyLabel == "true" の場合は、":" で分離して、
    525         * ﾗﾍﾞﾙのみを返します。
    526         * IO側で、カラムを分けて出力するので、VAL:LBL ではなく、LBL だけ出力します。
    527         *
    528         * 7.0.1.5 (2018/12/10)
    529         *
    530         * @og.rev 6.0.4.0 (2014/11/28) データ出力用のレンデラー
    531         * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加
    532         * @og.rev 7.0.1.5 (2018/12/10) 問合・ﾄﾗﾌﾞﾙ (61200-181210-01) writableControl機能を利用した場合のExcel出力について
    533         *
    534         * @param   value       入力値
    535         *
    536         * @return  データ出力用の文字列
    537         * @og.rtnNotNull
    538         */
    539        public String getWriteValue( final String value ) {
    540                String rtnStr = value ;
    541
    542                // 7.0.1.5 (2018/12/10)
    543                if( writeCtrl && rtnStr != null && rtnStr.length() > 0 && rtnStr.charAt(0) == '_' ) {
    544                        rtnStr = rtnStr.substring(1);           // 先頭の '_' を削除
    545                }
    546
    547//              String rtnStr = cellRenderer.getWriteValue( value );
    548                rtnStr = cellRenderer.getWriteValue( rtnStr );                  // 7.0.1.5 (2018/12/10)
    549
    550                // writeKeyLabel == true かつ addKeyLabel == "true" の場合は、":" で分離して、ﾗﾍﾞﾙのみを返します。
    551                if( rtnStr != null && isWriteKeyLabel() && "true".equalsIgnoreCase( addKeyLabel ) ) {
    552                        final int ad = rtnStr.indexOf( ':' );
    553                        if( ad >= 0 ) { rtnStr = rtnStr.substring( ad+1 ); }
    554                }
    555
    556                return rtnStr ;
    557        }
    558
    559        /**
    560         * データ入力用の文字列を作成します。
    561         * ファイル等から、読み取る場合に、このメソッド経由で、必要な形式変換を行います。
    562         *
    563         * 現時点では、KEY:VAL形式の Selection オブジェクト経由でデータを取り込む場合、
    564         * KEY に分解処理します。
    565         *
    566         * @og.rev 6.2.2.0 (2015/03/27) SelectionCellEditor I/Fを追加
    567         *
    568         * @param   value       入力値
    569         *
    570         * @return  データ入力用の文字列
    571         * @og.rtnNotNull
    572         */
    573        public String getReaderValue( final String value ) {
    574                String rtnVal = value;
    575                if( cellEditor instanceof SelectionCellEditor ) {
    576                        rtnVal = ((SelectionCellEditor)cellEditor).getReaderValue( rtnVal );
    577                }
    578
    579                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    580                return rtnVal == null ? "" : rtnVal;
    581        }
    582
    583        /**
    584         * データ編集用のHTML文字列を作成します。
    585         *
    586         * @og.rev 3.5.5.4 (2004/04/15) value が null の場合は、""(ゼロストリング)にする。
    587         *
    588         * @param   value       入力値
    589         *
    590         * @return  データ編集用の文字列
    591         * @og.rtnNotNull
    592         */
    593        public String getEditorValue( final String value ) {
    594                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    595                return cellEditor.getValue( value == null ? "" : value );
    596        }
    597
    598        /**
    599         * データ編集用のHTML文字列を作成します。
    600         * 行番号付の編集データを作成します。名前_行番号 で登録する為、
    601         * リクエスト情報を１つ毎のフィールドで処理できます。
    602         *
    603         * @param   row         行番号
    604         * @param   value       入力値
    605         *
    606         * @return  データ編集用の文字列
    607         * @og.rtnNotNull
    608         */
    609        public String getEditorValue( final int row,final String value ) {
    610                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    611                return cellEditor.getValue( row, value == null ? "" : value );
    612        }
    613
    614        /**
    615         * データ出力用の固定長文字列を作成します。
    616         * HOST送信用桁数がセットされていれば、そちらを優先します。
    617         *
    618         * @og.rev 3.5.4.5 (2004/01/23) エンコード指定に変更します。
    619         * @og.rev 6.0.4.0 (2014/11/28) データ出力用のレンデラーと名称がかぶるので、変更します。
    620         *
    621         * @param   value       対象の値
    622         * @param   encode      固定長で変換する文字エンコード
    623         *
    624         * @return  データ編集用の文字列
    625         */
    626        public String getFixedValue( final String value,final String encode ) {
    627                return dbType.valueFill( value ,columnData.getSizeX(), columnData.getSizeY(), encode );
    628        }
    629
    630        /**
    631         * データの表示用レンデラーを返します。
    632         *
    633         * @og.rev 3.8.0.2 (2005/07/11) 新規追加
    634         *
    635         * @return      データの表示用レンデラー
    636         */
    637        public String getRenderer() {
    638                return columnData.getRenderer() ;
    639        }
    640
    641        /**
    642         * データの編集用エディターを返します。
    643         *
    644         * @og.rev 3.8.0.2 (2005/07/11) 新規追加
    645         *
    646         * @return      データの編集用エディター
    647         */
    648        public String getEditor() {
    649                return columnData.getEditor() ;
    650        }
    651
    652        /**
    653         * 文字種別名を返します。
    654         * カラムの文字種別名名称を返します。
    655         * これは，HTML上の各種タグに，データベース定義に応じたクラスを
    656         * セットし,CSS(Cascading Style Sheet)の class="xxxxx" とする事により
    657         * 各種スタイルを表現するのに使用します。
    658         *
    659         * ここでは, カラムリソースの DBTYPE 属性で指定の文字列(X,S9,KXなど)を返します。
    660         *
    661         * @return  データの文字種別(X,KX,S9 など)
    662         */
    663        public String getDbType() {
    664                return columnData.getDbType() ;
    665        }
    666
    667        /**
    668         * データのNATIVEの型の識別コードを返します。
    669         *
    670         * @og.rev 4.1.1.2 (2008/02/28) Enum型(fukurou.model.NativeType)に変更
    671         *
    672         * @return  NATIVEの型の識別コード(DBType で規定)
    673         * @see org.opengion.fukurou.model.NativeType
    674         */
    675        public NativeType getNativeType() {
    676                return dbType.getNativeType();
    677        }
    678
    679        /**
    680         * そのカラムの,デフォルト値の値を返します。
    681         *
    682         * カラムリソースに デフォルト情報が登録されている場合は,その値を返します。
    683         * デフォルト値が設定されていない場合は, null を返します。
    684         *
    685         * @return  デフォルト値(無ければ null)
    686         */
    687        public String getDefault() {
    688                return defValue;
    689        }
    690
    691        /**
    692         * 表示用レンデラーのパラメータを取得します。
    693         *
    694         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    695         *
    696         * @return      表示用レンデラーのパラメータ
    697         */
    698        public String getRendererParam() {
    699                return columnData.getRendererParam();
    700        }
    701
    702        /**
    703         * 編集用エディターのパラメータを取得します。
    704         *
    705         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    706         *
    707         * @return      編集用エディターのパラメータ
    708         */
    709        public String getEditorParam() {
    710                return columnData.getEditorParam();
    711        }
    712
    713        /**
    714         * データタイプのパラメータを取得します。
    715         *
    716         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    717         *
    718         * @return      データタイプのパラメータ
    719         */
    720        public String getDbTypeParam() {
    721                return columnData.getDbTypeParam();
    722        }
    723
    724        /**
    725         * カラムロールを取得します。
    726         *
    727         * @og.rev 4.0.0.0 (2005/11/30) 新規追加
    728         *
    729         * @return      カラムロール
    730         */
    731        public String getRoles() {
    732                return columnData.getRoles();
    733        }
    734
    735        /**
    736         * カラムオブジェクトのロールモードを返します。
    737         *
    738         * @og.rev 4.3.0.0 (2008/07/04) ロールモードマルチ対応
    739         *
    740         * @return カラムオブジェクトのロールモード
    741         */
    742        public RoleMode getRoleMode() {
    743                return columnData.getRoleMode();
    744        }
    745
    746        /**
    747         * 接続先IDを返します。
    748         *
    749         * @return  接続先ID
    750         */
    751        public String getDbid() {
    752                return dbid;
    753        }
    754
    755        /**
    756         * String引数の文字列を＋１した文字列を返します。
    757         * これは、英字の場合(A,B,C など)は、B,C,D のように,最終桁の文字コードを
    758         * ＋１ します。
    759         * 文字列が数字タイプの場合は, 数字に変換して、+1 します。(桁上がりもあり)
    760         * 混在タイプの場合は,最後の桁だけを確認して ＋１します。
    761         * 引数が null の場合と、ゼロ文字列("")の場合は,引数を,そのまま返します。
    762         *
    763         * ※ 機能拡張：第２引数に指定の文字列(数字、日付等)を指定する事で、
    764         *    引数の文字列に、任意の値を加算できるようにします。
    765         *    ただし、すべての DBTypeではなく、ある程度特定します。
    766         *    対象外の DBTypeで、第２引数が null 出ない場合は、Exception を Throwsします。
    767         *    第２引数が、null の場合は、従来と同じ＋１します。
    768         *
    769         * @og.rev 5.6.0.3 (2012/01/24) ADD に、引数の値を加算する機能を追加します。
    770         *
    771         * @param   value  引数の文字列
    772         * @param   add    加算する文字列(null の場合は、従来と同じ、+1 します。)
    773         *
    774         * @return  引数の文字列を＋１した文字列。または、任意の値を加算した文字列。
    775         */
    776        public String valueAdd( final String value,final String add ) {
    777                // DBType の実装の関係で、旧メソッドは残しておきます。
    778                // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method
    779                return add == null || add.isEmpty() ? dbType.valueAdd( value ) : dbType.valueAdd( value , add );
    780        }
    781
    782        /**
    783         * データが登録可能かどうかをチェックします。
    784         * データがエラーの場合は、そのエラー内容を返します。
    785         *
    786         * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数に追加
    787         * @og.rev 3.6.0.7 (2004/11/06) official属性がfalseの場合、チェックレベルに対応したチェックを行う。
    788         * @og.rev 3.8.0.8 (2005/10/03) 企画改善 61200-050921-02 ラベルからHTMLタグを削除する。
    789         * @og.rev 5.2.2.0 (2010/11/01) 内部処理を、#valueCheck( value , true ) に委譲。
    790         *
    791         * @param   value       チェック対象の値
    792         *
    793         * @return  エラー内容  正常時は null
    794         * @see         #valueCheck( String , boolean )
    795         */
    796        public ErrorMessage valueCheck( final String value ) {
    797                return valueCheck( value , true );
    798        }
    799
    800        /**
    801         * データが登録可能かどうかをチェックします。
    802         * データがエラーの場合は、そのエラー内容を返します。
    803         *
    804         * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数に追加
    805         * @og.rev 3.6.0.7 (2004/11/06) official属性がfalseの場合、チェックレベルに対応したチェックを行う。
    806         * @og.rev 3.8.0.8 (2005/10/03) 企画改善 61200-050921-02 ラベルからHTMLタグを削除する。
    807         * @og.rev 5.2.2.0 (2010/11/01) 厳密にチェック(isStrict=true)するフラグを追加
    808         * @og.rev 6.9.5.0 (2018/04/23) checkLevel 固定化(officialのみで制御します)
    809         * @og.rev 7.3.2.0 (2021/03/19) 厳密にチェック(isStrict=true)時は、official=true でないとエラー
    810         *
    811         * @param   value               チェック対象の値
    812         * @param   isStrict    厳密にチェック(isStrict=true)するかどうか
    813         *
    814         * @return  エラー内容  正常時は null
    815         */
    816        public ErrorMessage valueCheck( final String value , final boolean isStrict ) {
    817                // 3.8.0.8 (2005/10/03) ラベルからHTMLタグを削除する。
    818                String lbl = labelData.getLabel() ;
    819                if( lbl.indexOf( '<' ) >= 0 ) {
    820                        lbl = lbl.replaceAll( "<[^>]*>","" );
    821                }
    822
    823                // 5.2.2.0 (2010/11/01) 厳密にチェック(isStrict=true)するフラグを追加
    824                final ErrorMessage errMsg = dbType.valueCheck( lbl,value,columnData.getSizeX(), columnData.getSizeY(),columnData.getDbTypeParam() , isStrict );
    825//              if( checkLevel >= 0 ) {
    826//              if( !official ) {
    827                if( isStrict && !official ) {           // 7.3.2.0 (2021/03/19) 厳密にチェック(isStrict=true)時は、official=true でないとエラー
    828                        // ERR0034:指定のカラムオブジェクトには、カラムリソースが存在しません。name={0} label={1}
    829//                      errMsg.addMessage( 0,checkLevel,"ERR0034", columnData.getName(),labelData.getLabel() );
    830                        errMsg.addMessage( 0,ErrorMessage.WARNING,"ERR0034", columnData.getName(),labelData.getLabel() );       // 6.9.5.0 (2018/04/23) checkLevel 固定化
    831                }
    832                return errMsg ;
    833        }
    834
    835        /**
    836         * エディターで編集されたデータを登録する場合に、データそのものを
    837         * 変換して、実登録データを作成します。
    838         * 例えば,大文字のみのフィールドなら、大文字化します。
    839         * 実登録データの作成は、DBType オブジェクトを利用しますので,
    840         * これと DBCellEditor とがアンマッチの場合は、うまくデータ変換
    841         * されない可能性がありますので、注意願います。
    842         *
    843         * @param   value 一般に編集データとして登録されたデータ
    844         *
    845         * @return  修正後の文字列(一般にデータベースに登録するデータ)
    846         */
    847        public String valueSet( final String value ) {
    848                return dbType.valueSet( value );
    849        }
    850
    851        /**
    852         * action で指定されたコマンドを実行して、値の変換を行います。
    853         * oldValue(旧データ)は、元のDBTableModelに設定されていた値です。通常は、
    854         * この値を使用してカラム毎に変換を行います。newValue(新データ)は、引数で
    855         * 指定された新しい値です。この値には、パラメータを指定して変換方法を
    856         * 制御することも可能です。
    857         * 指定のアクションがカラムで処理できない場合は、エラーになります。
    858         *
    859         * @param   action アクションコマンド
    860         * @param   oldValue 入力データ(旧データ)
    861         * @param   newValue 入力データ(新データ)
    862         *
    863         * @return      実行後のデータ
    864         */
    865        public String valueAction( final String action,final String oldValue,final String newValue ) {
    866                return dbType.valueAction( action,oldValue,newValue );
    867        }
    868
    869        /**
    870         * 内部の設定情報オブジェクトを返します。
    871         * このオブジェクトを ローカルで書き換えて、DBColumn を作るようにします。
    872         *
    873         * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig 関係の見直し。
    874         * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編集パラメータ、文字パラメータの追加。
    875         * @og.rev 3.5.5.5 (2004/04/23) size 属性の意味を変更、maxlength 属性を追加。
    876         * @og.rev 3.5.5.8 (2004/05/20) codeName 属性を追加。
    877         * @og.rev 3.6.0.7 (2004/11/06) カラムリソースから作成されたかどうか(official属性追加)
    878         * @og.rev 5.1.8.0 (2010/07/01) すべての属性を設定するようにします。
    879         * @og.rev 5.5.1.0 (2012/04/03) useSLabel対応
    880         * @og.rev 5.6.2.3 (2013/03/22) 非表示文字の設定。noDisplayVal追加
    881         * @og.rev 5.7.6.3 (2014/05/23) stringOutput対応
    882         * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする)
    883         * @og.rev 6.2.3.0 (2015/05/01) writeKeyLabel 属性を追加
    884         * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加
    885         * @og.rev 7.0.1.5 (2018/12/10) writeCtrlで出力時のアンダーバー削除
    886         * @og.rev 8.1.2.3 (2022/05/20) 日付送り戻し不具合対応(useDateFeed 属性追加)
    887         *
    888         * @return      設定情報オブジェクト
    889         */
    890        public DBColumnConfig getConfig() {
    891                // 互換性確保のため、DBColumnConfig の コンストラクタは修正していません。
    892
    893                final DBColumnConfig config =
    894                        new DBColumnConfig(
    895                                                lang                                                    ,
    896                                                columnData.getName()                    ,
    897                                                labelData                                               ,
    898                                                columnData.getClassName()               ,
    899                                                columnData.getFieldSize()               ,                                               // 6.2.0.0 (2015/02/27)
    900                                                columnData.getViewLength()              ,                                               // 6.2.0.0 (2015/02/27)
    901                                                columnData.getMaxlength()               ,
    902                                                String.valueOf( writable )              ,
    903                                                columnData.getRenderer()                ,
    904                                                columnData.getEditor()                  ,
    905                                                codeData                                                ,
    906                                                columnData.getDbType()                  ,
    907                                                defValue                                                ,
    908                                                columnData.getRendererParam()   ,
    909                                                columnData.getEditorParam()             ,
    910                                                columnData.getDbTypeParam()             ,
    911                                                columnData.getRoles()                   ,                                               // 4.0.0 (2005/11/30)
    912                                                official                                                ,                                               // 3.6.0.7 (2004/11/06)
    913                                                dbid    ) ;
    914
    915                // 5.1.8.0 (2010/07/01) すべての属性を設定するようにします。
    916                // コンストラクタは修正していないため、セッターメソッド経由で渡します。
    917                config.setRendererAttributes( rendAttri );
    918                config.setEditorAttributes( editAttri );
    919                config.setAddNoValue( addNoValue );
    920                config.setAddKeyLabel( addKeyLabel );                                                                   // 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか
    921                config.setWriteKeyLabel( writeKeyLabel );                                                               // 6.2.3.0 (2015/05/01)
    922                config.setEventColumn( eventColumn );
    923                config.setEventValue( eventValue );                                                                             // 6.3.3.0 (2015/07/25) eventValue 追加
    924                config.setRawEditParameter( rawEditParameter );
    925                config.setRawRendParameter( rawRendParameter );
    926                config.setEventURL( eventURL );
    927                config.setUseSLabel( useSLabel );                                                                               // 5.5.1.0 (2012/04/03)
    928                config.setNoDisplayVal( noDisplayVal );                                                                 // 5.6.2.3 (2013/03/22) 非表示文字の設定
    929                config.setStringOutput( stringOutput );                                                                 // 5.7.6.3 (2014/05/23)
    930                config.setWriteControl( writeCtrl );                                                                    // 7.0.1.5 (2018/12/10)
    931                config.setUseDateFeed( useDateFeed );                                                                   // 8.1.2.3 (2022/05/20)
    932
    933                return config ;
    934        }
    935
    936        /**
    937         * 表示用レンデラーの追加属性を返します。
    938         *
    939         * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig オブジェクトの内部キープを廃止
    940         *
    941         * @return   属性リスト
    942         * @og.rtnNotNull
    943         */
    944        public Attributes getRendererAttributes() {
    945                return rendAttri ;
    946        }
    947
    948        /**
    949         * 編集用エディター用の追加属性を返します。
    950         *
    951         * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig オブジェクトの内部キープを廃止
    952         *
    953         * @return   属性リスト
    954         * @og.rtnNotNull
    955         */
    956        public Attributes getEditorAttributes() {
    957                return editAttri ;
    958        }
    959
    960        /**
    961         * メニューに空の選択リストを追加するかどうかを取得します。
    962         *
    963         * @og.rev 3.5.5.7 (2004/05/10) 新規追加
    964         *
    965         * @return      空の選択リストを追加するかどうか(true:追加する/false:追加しない)
    966         */
    967        public boolean isAddNoValue() {
    968                return addNoValue ;
    969        }
    970
    971        /**
    972         * セレクトメニューの場合、キー:ラベル形式で表示するかどうか[true/false/null]を返します。
    973         *
    974         * これは、上位入れ子のタグの OptionTag で、addKeyLabel を取り出して、
    975         * true であれば、キー:ラベル形式 のオプションを、#addOption( String ) で
    976         * 登録させます。
    977         *
    978         * @og.rev 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか。新規追加
    979         *
    980         * @return      true:キー:ラベル形式/false:ラベルのみ/null:指定通り
    981         */
    982        public String getAddKeyLabel() {
    983                return addKeyLabel;
    984        }
    985
    986        /**
    987         * セレクトメニューの場合、キーとラベルを分けて出力するかどうか[true/false]を取得します。
    988         *
    989         * カラムがプルダウンメニュー形式の場合、ファイル出力時に、キーとラベルを分離して出力する事ができます。
    990         * この属性と、addKeyLabel とは、微妙に関連していて、addKeyLabel="true" のみの場合は、
    991         * キー:ラベル形式で、出力されますが、writeKeyLabel="true" も指定されている場合は、こちらが優先されます。
    992         * なお、この指定が有効なのは、セレクトメニューのカラムのみです。
    993         *
    994         * @og.rev 6.2.3.0 (2015/05/01) キー／ラベルで分離して出力するかどうか。
    995         *
    996         * @return      キー／ラベル分離出力するかどうか[true:分離出力/false:通常]
    997         */
    998        public boolean isWriteKeyLabel() {
    999                return writeKeyLabel ;
    1000        }
    1001
    1002        /**
    1003         * このカラムオブジェクトがカラムリソースより正式に作られたかどうかを取得します。
    1004         * カラムリソースが無い場合は、仮オブジェクトかデータベースメタデータより作成されます。
    1005         * その場合は、チェック機能が緩くなるため、正式なカラムオブジェクトと区別する為に
    1006         * この属性を持ちます。
    1007         *
    1008         * @og.rev 3.6.0.7 (2004/11/06) 新規追加
    1009         *
    1010         * @return      正式に作られたかどうか(true:正式/false:暫定)
    1011         */
    1012        public boolean isOfficial() {
    1013                return official ;
    1014        }
    1015
    1016        /**
    1017         * カラムのラベルデータオブジェクトを返します。
    1018         *
    1019         * @return  カラムのラベルデータオブジェクト
    1020         */
    1021        public LabelData getLabelData() {
    1022                return labelData;
    1023        }
    1024
    1025        /**
    1026         * カラムのコードデータオブジェクトを返します。
    1027         * コードデータが存在しない場合は、null を返します。
    1028         * 受け取り側で、null かどうか判定してから使用してください。
    1029         *
    1030         * @og.rev 5.2.1.0 (2010/10/01) codeData が null でも、そのまま返します。
    1031         *
    1032         * @return  カラムのコードデータオブジェクト
    1033         */
    1034        public CodeData getCodeData() {
    1035                return codeData;
    1036        }
    1037
    1038        /**
    1039         * フィールドの入力枠サイズを返します。
    1040         *
    1041         * これは、設定された値そのものを返しますので、未設定の時は、null が返ります。
    1042         *
    1043         * テキストフィールドのサイズに該当します。
    1044         * 何も指定しない場合は、null が返ります。
    1045         * その場合の、入力枠サイズは、maxlength が使用されます。
    1046         * ただし、桁数が大きい場合は、システム定数の HTML_COLUMNS_MAXSIZE や、
    1047         * HTML_VIEW_COLUMNS_MAXSIZE で指定された値が使われます。
    1048         * それらの値よりも、ここで取得 した fieldSize が優先されます。
    1049         *
    1050         * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする)
    1051         *
    1052         * @return  入力枠サイズ
    1053         */
    1054        public String getFieldSize() {
    1055                return columnData.getFieldSize();
    1056        }
    1057
    1058        /**
    1059         * 引数の最大入力サイズより、実際のフィールドのサイズを求めます。
    1060         *
    1061         * 計算方法
    1062         *    ① fieldSize があれば、その値を返します。
    1063         *    ② ColumnData#getTotalSize() を求め、あれば、その値を返す。
    1064         *    ③ totalSizeが、引数の最大入力サイズより大きい場合は、引数の最大入力サイズを返す。
    1065         *
    1066         * 各呼び出すメソッドは、引数の最大入力サイズ のみ指定します。それ以外の値は、内部の値を使います。
    1067         * 最大入力サイズは、システム定数の、HTML_COLUMNS_MAXSIZE か、HTML_VIEW_COLUMNS_MAXSIZE が
    1068         * 一般的です。
    1069         *
    1070         * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソッドを XHTMLTag から DBColumn へ移動
    1071         * @og.rev 4.0.0.0 (2007/02/05) ADJUSTMENT 処理を廃止します。(CSSにて対応)
    1072         * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする)
    1073         * @og.rev 6.2.3.0 (2015/05/01) maxlength 変数は、0 の場合は、無制限になります。
    1074         *
    1075         * @param maxlength       最大入力サイズ
    1076         *
    1077         * @return 表示すべきサイズ
    1078         * @see #getFieldSize()
    1079         */
    1080        public int getFieldSize( final int maxlength ) {
    1081
    1082                // ① fieldSize があれば、その値を返します。
    1083                final String fixSize = columnData.getFieldSize();
    1084                if( fixSize != null && !fixSize.isEmpty() ) {
    1085                        return Integer.parseInt( fixSize );
    1086                }
    1087
    1088                // ② ColumnData#getTotalSize() を求め、あれば、その値を返す。
    1089                int size = columnData.getTotalSize();
    1090
    1091                // ③ totalSizeが、引数の最大入力サイズより大きい場合は、引数の最大入力サイズを返す。
    1092                if( maxlength > 0 && ( size <= 0 || size > maxlength ) ) {
    1093                        size = maxlength;
    1094                }
    1095
    1096                return size;
    1097        }
    1098
    1099        /**
    1100         * イベントカラム(親カラム)。
    1101         *
    1102         * @og.rev 4.3.6.0 (2009/04/01)
    1103         *
    1104         * @return イベントカラム
    1105         */
    1106        public String getEventColumn() {
    1107                return eventColumn ;
    1108        }
    1109
    1110        /**
    1111         * イベントカラムの子カラムの値を出力するためのSQL文を返します。
    1112         *
    1113         * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加
    1114         *
    1115         * @return イベントカラムの値SQL文
    1116         */
    1117        public String getEventValue() {
    1118                return eventValue ;
    1119        }
    1120
    1121        /**
    1122         * {&#064;XXXX}を変換していない状態の編集パラメータを返します。
    1123         *
    1124         * @og.rev 4.3.6.0 (2009/04/01)
    1125         *
    1126         * @return 生編集パラメータ
    1127         */
    1128        public String getRawEditParam() {
    1129                return rawEditParameter ;
    1130        }
    1131
    1132        /**
    1133         * {&#064;XXXX}を変換していない状態の編集パラメータを返します。
    1134         *
    1135         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    1136         *
    1137         * @return 生表示パラメータ
    1138         */
    1139        public String getRawRendParam() {
    1140                return rawRendParameter ;
    1141        }
    1142
    1143        /**
    1144         * eventColumn利用時にJSで利用するURL。
    1145         *
    1146         * @og.rev 4.3.6.0 (2009/04/01)
    1147         *
    1148         * @return イベントURL
    1149         */
    1150        public String getEventURL() {
    1151                return eventURL ;
    1152        }
    1153
    1154        /**
    1155         * 引数のタグ文字列に対して、イベントカラムの実行に必要なspanタグを付加した
    1156         * 文字列を返します。
    1157         *
    1158         * @param tag タグ文字列
    1159         * @param initVal 子カラムの初期値
    1160         * @param writable タグの要素が書き込み可能かどうか
    1161         *
    1162         * @return spanタグを付加したタグ文字列
    1163         */
    1164        public String getEventColumnTag( final String tag, final String initVal, final boolean writable ) {
    1165                return getEventColumnTag( tag, initVal, -1, writable );
    1166        }
    1167
    1168        /**
    1169         * 引数のタグ文字列に対して、イベントカラムの実行に必要なspanタグを付加した
    1170         * 文字列を返します。
    1171         *
    1172         * @param tag タグ文字列
    1173         * @param initVal 子カラムの初期値
    1174         * @param row 行番号
    1175         * @param writable タグの要素が書き込み可能かどうか
    1176         *
    1177         * @return spanタグを付加したタグ文字列
    1178         * @og.rtnNotNull
    1179         */
    1180        public String getEventColumnTag( final String tag, final String initVal, final int row, final boolean writable ) {
    1181                // 6.1.1.0 (2015/01/17) TagBufferの連結記述
    1182                final String name = columnData.getName()
    1183                                                        + ( row < 0 ? "" : HybsSystem.JOINT_STRING + row ) ;
    1184
    1185                return new TagBuffer( "span" )
    1186                                        .add( "class"                                                   , HybsSystem.EVENT_COLUMN_CLASS )
    1187                                        .add( HybsSystem.EVENT_COLUMN_ID                , name )
    1188                                        .add( HybsSystem.EVENT_COLUMN_INITVAL   , initVal )
    1189                                        .add( HybsSystem.EVENT_COLUMN_WRITABLE  , String.valueOf( writable ) )
    1190                                        .addBody( tag )
    1191                                        .makeTag();
    1192        }
    1193
    1194        /**
    1195         * セットされている表示パラメータ、編集パラメータに"{&#064;XXXX}"が含まれているか(パラメーターのパースが必要か)を
    1196         * 返します。
    1197         *
    1198         * @og.rev 6.0.0.1 (2014/04/25) 内部処理変更
    1199         *
    1200         * @return "{&#064;XXXX}"が含まれているか(含まれている場合true)
    1201         */
    1202        public boolean isNeedsParamParse() {
    1203                return  rawRendParameter != null && rawRendParameter.indexOf( "{@" ) >= 0
    1204                        ||      rawEditParameter != null && rawEditParameter.indexOf( "{@" ) >= 0;
    1205        }
    1206
    1207        /**
    1208         * ラベル短ベースのメニューにするかどうか。
    1209         *
    1210         * @og.rev 5.5.1.0 (2012/04/03)
    1211         *
    1212         * @return イベントカラム
    1213         */
    1214        public String getUseSLabel() {
    1215                return useSLabel ;
    1216        }
    1217
    1218        /**
    1219         * 非表示文字列を返します。
    1220         *
    1221         * これは、例えば、数字型の場合は、0 がデフォルトなどの場合、
    1222         * あえて表示したくないなどのケースに使います。
    1223         * そのような状況が設定されていない場合は、null が返されます。
    1224         *
    1225         * @og.rev 5.6.2.3 (2013/03/22) 新規追加
    1226         *
    1227         * @return 非表示文字
    1228         */
    1229        public String getNoDisplayVal() {
    1230                return noDisplayVal ;
    1231        }
    1232
    1233        /**
    1234         * レンデラー利用ファイル出力時に数値等も文字タイプに固定するかどうか
    1235         *              (初期値:USE_STRING_EXCEL_OUTPUT[={@og.value SystemData#USE_STRING_EXCEL_OUTPUT}])。
    1236         *
    1237         * これは、レンデラーでのExcel出力時のセルタイプに影響します。
    1238         * trueの場合は数値も全て文字として出力します。
    1239         * falseの場合はDBTYPEに従った出力になりるため、数値型の DBTYPE では、doubleに一度変換されます。
    1240         * (初期値:USE_STRING_EXCEL_OUTPUT[={@og.value SystemData#USE_STRING_EXCEL_OUTPUT}])。
    1241         *
    1242         * @og.rev 5.7.6.3 (2014/05/23) 新規追加
    1243         *
    1244         * @return レンデラー利用時の出力方法 (true:String出力/false:DBTYPEに従う)
    1245         */
    1246        public boolean isStringOutput() {
    1247                return stringOutput ;
    1248        }
    1249
    1250        /**
    1251         * 日付送り戻し機能を有効にするかどうか[true:有効/false:無効]返します。
    1252         *
    1253         * @og.rev 8.1.2.3 (2022/05/20) 日付送り戻し不具合対応(useDateFeed 属性追加)
    1254         *
    1255         * @return      日付送り戻し機能有無 [true:有効/false:無効]
    1256         */
    1257        public boolean isDateFeed() {
    1258                return useDateFeed;
    1259        }
    1260
    1261//      /**
    1262//       * マルチ・キーセレクトを使用するかどうかを返します。
    1263//       * true：使用する。false:使用しない です。
    1264//       * ただし、実際に使用するかどうかは、HTML出力時に決めることが出来ます。
    1265//       * ここでは、USE_MULTI_KEY_SELECT が true で、USE_SIZE(=20)以上の場合に
    1266//       * true を返します。
    1267//       *
    1268//       * @og.rev 6.0.4.0 (2014/11/28) Selection 側から移動。
    1269//       * @og.rev 6.3.9.1 (2015/11/27) ３項演算子を || or &amp;&amp; で簡素化できる(PMD)。
    1270//       * @og.rev 6.9.5.0 (2018/04/23) USE_MULTI_KEY_SELECT 廃止(IE8以降ブラウザ標準)
    1271//       *
    1272//       * @return  選択リストで、マルチ・キーセレクトを使用するかどうか(true:使用する)
    1273//       */
    1274//      public boolean useMultiSelect() {
    1275//              return codeData != null && codeData.useMultiSelect() ;
    1276//      }
    1277
    1278        /**
    1279         * オブジェクトの文字列表現を返します。
    1280         *
    1281         * n=Name,l=Label,c=ClassName,r=Renderer,e=Editor,d=DbType という形式を作成します。
    1282         *
    1283         * @og.rev 6.2.2.0 (2015/03/27) DBColumnオブジェクトの文字列表現(#toString())を実装します。
    1284         *
    1285         * @return      文字列表現
    1286         * @og.rtnNotNull
    1287         */
    1288        @Override
    1289        public String toString() {
    1290                return "n="     + columnData.getName()
    1291                        + ",l=" + labelData.getLabel()
    1292                        + ",c=" + columnData.getClassName()
    1293                        + ",r=" + columnData.getRenderer()
    1294                        + ",e=" + columnData.getEditor()
    1295                        + ",d=" + columnData.getDbType()
    1296                        + ",b=" + writeCtrl + ","
    1297                        + this.hashCode()  ;
    1298        }
    1299}