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