    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.util.Attributes;
    019import org.opengion.hayabusa.common.HybsSystem;
    020import org.opengion.hayabusa.resource.CodeData;
    021import org.opengion.hayabusa.resource.ColumnData;
    022import org.opengion.hayabusa.resource.LabelData;
    023
    024/**
    025 * DBColumnオブジェクトを構築する為の 引数を持っているデータクラスです。
    026 * このクラス自身は、書き換え可能ですが、DBColumnオブジェクトは、読込み専用の
    027 * オブジェクトのため、別のオブジェクトを作成したい場合は,このクラスを
    028 * DBColumnオブジェクトより取得し、内容を書き換えて、再度 DBColumnオブジェクトを
    029 * 構築することになります。
    030 *
    031 * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編集パラメータ、文字パラメータの追加。
    032 * @og.group テーブル管理
    033 *
    034 * @version  4.0
    035 * @author       Kazuhiko Hasegawa
    036 * @since    JDK5.0,
    037 */
    038public final class DBColumnConfig {
    039        private String[]        clmData;                                                                                                // カラム配列データ
    040        private LabelData       labelData;                                                                                              // ラベルデータ
    041        private CodeData        codeData;                                                                                               // コードデータ
    042
    043        // 6.4.5.2 (2016/05/06) rendAttri,editAttri は、not null にします。
    044        private final Attributes        rendAttri = new Attributes();                                   // 表示用レンデラー追加用属性
    045        private final Attributes        editAttri = new Attributes();                                   // 編集用エディター追加用属性
    046
    047        private String  lang;                                                                                                           // 言語
    048        private String  writable        = "true";                                                                               // カラムが書き込み可能かどうか
    049        private boolean addNoValue;                                                                                                     // メニューに空の選択リストを追加するかどうか        // 3.5.5.7 (2004/05/10)
    050        private String  addKeyLabel;                                                                                            // 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか
    051        private boolean writeKeyLabel;                                                                                          // 6.2.3.0 (2015/05/01)
    052        private String  dbid;                                                                                                           // データベース接続先ID
    053        private boolean official;                                                                                                       // カラムリソースから作成されたかどうか(再設定可能)            // 5.4.3.4 (2012/01/12)
    054
    055        private String  eventColumn;                                                                                            // 4.3.6.0 (2009/04/01) イベントカラム
    056        private String  eventValue;                                                                                                     // 6.3.3.0 (2015/07/25) eventValue 追加
    057        private String  rawEditParameter;                                                                                       // 4.3.6.0 (2009/04/01) {@XXXX}を変換していないパラメータ
    058        private String  rawRendParameter;                                                                                       // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    059        private String  eventURL;                                                                                                       // 5.1.9.0 (2010/08/01) 動的プルダウン不具合対応
    060
    061        private String  useSLabel               = "auto";                                                                       // 5.5.1.0 (2012/04/03)  MENU系でSLABELを利用するかどうか
    062        private String  noDisplayVal;                                                                                           // 5.6.2.3 (2013/03/22) 非表示文字の設定
    063
    064        // 6.0.4.0 (2014/11/28) codeKeyVal は、KBMENU として、param にセットする為、廃止
    065
    066        private boolean stringOutput    = HybsSystem.sysBool( "USE_STRING_EXCEL_OUTPUT" );      // 5.7.6.3 (2013/05/23) ファイルレンデラ出力時のフラグ
    067        private boolean writeCtrl;                                                                                                      // 7.0.1.5 (2018/12/10) writeCtrlで出力時のアンダーバー削除
    068        private boolean useDateFeed             = true;                                                                         // 日付送り戻し機能の有効/無効 8.1.2.3 (2022/05/20)
    069
    070        /**
    071         * コンストラクター
    072         * 引数は、すべて文字列型で渡します。
    073         *
    074         * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編集パラメータ、文字パラメータの追加。
    075         * @og.rev 3.5.5.7 (2004/05/10) CodeSelection を、codeName を元に構築できるように設定します。
    076         * @og.rev 3.6.0.3 (2004/10/05) dbTypePrm は、editorPrm と無関係に設定します。
    077         * @og.rev 3.6.0.7 (2004/11/06) カラムリソースから作成されたかどうか(official属性追加)
    078         * @og.rev 5.1.6.0 (2010/05/01) DBTypeの初期値を "XK" とします。
    079         * @og.rev 5.7.3.0 (2014/02/07) labelData の null 対応
    080         * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする)
    081         *
    082         * @param       lang            言語
    083         * @param       name            カラム名
    084         * @param       labelData       カラムのラベルデータオブジェクト
    085         * @param       className       カラムのクラスを文字列にした名称
    086         * @param       fieldSize       入力枠サイズ                                                  // 6.2.0.0 (2015/02/27)
    087         * @param       viewLength      カラムの表示文字数                                               // 6.2.0.0 (2015/02/27)
    088         * @param       maxlength       カラムの最大桁数
    089         * @param       writable        カラムが書き込み可能かどうか
    090         * @param       renderer        データの表示用レンデラー
    091         * @param       editor          データの編集用エディター
    092         * @param       codeData        メニューの項目オブジェクト
    093         * @param       dbType          データのタイプ
    094         * @param       dataDef         データのデフォルト値
    095         * @param       rendererPrm     表示用レンデラーのパラメータ
    096         * @param       editorPrm       編集用エディターのパラメータ
    097         * @param       dbTypePrm       データのタイプのパラメータ
    098         * @param       roles           カラムロール
    099         * @param       official        正規カラムかどうか
    100         * @param       dbid            データベース接続先ID
    101         */
    102        public DBColumnConfig(  final String    lang            ,
    103                                                        final String    name            ,
    104                                                        final LabelData labelData       ,               // 4.0.0 (2005/01/31)
    105                                                        final String    className       ,
    106                                                        final String    fieldSize       ,               // 6.2.0.0 (2015/02/27)
    107                                                        final String    viewLength      ,               // 6.2.0.0 (2015/02/27)
    108                                                        final String    maxlength       ,               // 3.5.5.5 (2004/04/23)
    109                                                        final String    writable        ,
    110                                                        final String    renderer        ,
    111                                                        final String    editor          ,
    112                                                        final CodeData  codeData        ,               // 4.0.0 (2005/01/31)
    113                                                        final String    dbType          ,
    114                                                        final String    dataDef         ,
    115                                                        final String    rendererPrm     ,
    116                                                        final String    editorPrm       ,
    117                                                        final String    dbTypePrm       ,
    118                                                        final String    roles           ,               // 4.0.0 (2005/11/30)
    119                                                        final boolean   official        ,               // 3.6.0.7 (2004/11/06)
    120                                                        final String    dbid ) {
    121                clmData = new String[ColumnData.DATA_SIZE];
    122                clmData[ColumnData.CLM           ] = name               ;
    123                clmData[ColumnData.CLS_NAME      ] = className  ;
    124                clmData[ColumnData.FIELD_SIZE    ] = fieldSize  ;               // 6.2.0.0 (2015/02/27)
    125                clmData[ColumnData.VIEW_LENGTH   ] = viewLength ;               // 6.2.0.0 (2015/02/27)
    126                clmData[ColumnData.USE_LENGTH    ] = maxlength  ;
    127                clmData[ColumnData.RENDERER      ] = renderer   ;
    128                clmData[ColumnData.EDITOR        ] = editor             ;
    129                clmData[ColumnData.DBTYPE        ] = dbType             ;
    130                clmData[ColumnData.DATA_DEFAULT  ] = dataDef    ;
    131                clmData[ColumnData.RENDERER_PARAM] = rendererPrm;
    132                clmData[ColumnData.TYPE_PARAM    ] = dbTypePrm  ;
    133                clmData[ColumnData.ROLES         ] = roles              ;               // 4.0.0 (2005/11/30)
    134
    135                this.lang               = lang          ;
    136                // 5.7.3.0 (2014/02/07) labelData の null 対応
    137                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    138                this.labelData  = labelData == null ? new LabelData( name ) : labelData ;
    139                this.writable   = writable      ;
    140                this.codeData   = codeData      ;               // 4.0.0 (2005/01/31)
    141                this.dbid               = dbid          ;               // 4.0.0 (2005/01/31)
    142
    143                if( "=".equals(editorPrm) ) {
    144                        clmData[ColumnData.EDITOR_PARAM  ] = rendererPrm        ;
    145                }
    146                else {
    147                        clmData[ColumnData.EDITOR_PARAM  ] = editorPrm  ;
    148                }
    149
    150                // 5.1.6.0 (2010/05/01) DBTypeの初期値を "XK" とします。
    151                if( dbType == null ) {
    152                        clmData[ColumnData.DBTYPE        ] = DBType.DEF_TYPE;
    153                }
    154
    155                this.official = official;               // 3.6.0.7 (2004/11/06)
    156        }
    157
    158        /**
    159         * 簡易コンストラクター
    160         * キーのみを設定して作成する、簡易的な DBColumnConfig オブジェクトを
    161         * 作成します。
    162         *
    163         * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編集パラメータ、文字パラメータの追加。
    164         * @og.rev 3.6.0.7 (2004/11/06) カラムリソースから作成されたかどうか(official属性追加)
    165         * @og.rev 5.1.6.0 (2010/05/01) DBTypeの初期値を "XK" とします。
    166         * @og.rev 5.7.3.0 (2014/02/07) labelData の null 対応
    167         * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする)
    168         * @og.rev 6.2.3.0 (2015/05/01) もう一つのコンストラクタを呼びように変更。
    169         *
    170         * @param       name                    カラム名
    171         */
    172        public DBColumnConfig( final String name ) {
    173                this(   "ja"                                    ,       // lang
    174                                name                                    ,       // name
    175                                new LabelData( name )   ,       // labelData
    176                                "VARCHAR2"                              ,       // className
    177                                null                                    ,       // fieldSize    入力枠サイズ
    178                                null                                    ,       // viewLength   カラムの表示文字数
    179                                "60"                                    ,       // maxlength    カラムの最大桁数
    180                                "true"                                  ,       // writable
    181                                null                                    ,       // renderer
    182                                null                                    ,       // editor
    183                                null                                    ,       // codeData
    184                                DBType.DEF_TYPE                 ,       // dbType
    185                                ""                                              ,       // dataDef
    186                                ""                                              ,       // rendererPrm
    187                                ""                                              ,       // editorPrm
    188                                ""                                              ,       // dbTypePrm
    189                                null                                    ,       // roles
    190                                false                                   ,       // official
    191                                null                                            // dbid
    192                        );
    193        }
    194
    195        /**
    196         * 言語を返します。
    197         *
    198         * @return      言語
    199         */
    200        public String getLang() {
    201                return lang;
    202        }
    203
    204        /**
    205         * 言語を設定します。
    206         *
    207         * @param       lang 言語
    208         */
    209        public void setLang( final String lang ) {
    210                this.lang = lang;
    211        }
    212
    213        /**
    214         * カラム名を返します。
    215         *
    216         * @return      カラム名
    217         */
    218        public String getName() {
    219                return clmData[ColumnData.CLM];
    220        }
    221
    222        /**
    223         * カラム名を設定します。
    224         *
    225         * @param       name カラム名
    226         */
    227        public void setName( final String name ) {
    228                clmData[ColumnData.CLM] = name;
    229        }
    230
    231        /**
    232         * ラベル名を返します。
    233         *
    234         * @return      ラベル名
    235         */
    236        public String getLabel() {
    237                return ( labelData == null ) ? clmData[ColumnData.CLM] : labelData.getLabel() ;
    238        }
    239
    240        /**
    241         * カラムのクラスを文字列にした名称を返します。
    242         *
    243         * @return      カラムのクラスを文字列にした名称
    244         */
    245        public String getClassName() {
    246                return clmData[ColumnData.CLS_NAME];
    247        }
    248
    249        /**
    250         * 現在の値と、新しい値をチェックして、条件に応じて新しい値を返します。
    251         *
    252         * "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    253         * 上位で、val が null チェックを入れていますが、汎用的に、こちらでも入れておきます。
    254         *
    255         * @og.rev 6.4.1.1 (2016/01/16) "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    256         *
    257         * @param       now 現在の値
    258         * @param       val 新しい値（"既存値:設定値" と指定可能)
    259         * @return      新しい値
    260         */
    261        private String oldNewSplit( final String now , final String val ) {
    262                final String rtn ;
    263
    264                if( val == null || val.length() == 0 ) {
    265                        rtn = now;
    266                }
    267                else {
    268                        final int ad = val.indexOf( ':' );
    269                        if( ad < 0 ) {                                                  // コロンがない。通常処理
    270                                rtn = val;
    271                        }
    272                        else if( ad == 0 ) {                                    // コロンが先頭。コロンをはずして、セット
    273                                rtn = val.substring(1);
    274                        }
    275                        else {                                                                  // コロンがある。OLD:NEW 形式なので、コロンで分割
    276                                final String old = val.substring( 0,ad );
    277                                if( old.equals( now ) ) {                       // 一致した。
    278                                        rtn = val.substring( ad+1 );
    279                                }
    280                                else {
    281                                        rtn = now ;
    282                                }
    283                        }
    284                }
    285
    286                return rtn ;
    287        }
    288
    289        /**
    290         * カラムのクラスを文字列にした名称を設定します。
    291         *
    292         * "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    293         *
    294         * @og.rev 6.4.1.1 (2016/01/16) "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    295         *
    296         * @param       className カラムのクラス名
    297         */
    298        public void setClassName( final String className ) {
    299                clmData[ColumnData.CLS_NAME] = oldNewSplit( clmData[ColumnData.CLS_NAME] , className );         // 6.4.1.1 (2016/01/16)
    300        }
    301
    302        /**
    303         * カラムの入力枠サイズ(横幅)を文字数で取得します。
    304         * fieldSize は、設定した場合のみ、使用できます。通常は、null が返ります。
    305         *
    306         * @og.rev 6.2.0.0 (2015/02/27) fieldSize 属性の追加
    307         *
    308         * @return      カラムの入力枠サイズ
    309         */
    310        public String getFieldSize() {
    311                return clmData[ColumnData.FIELD_SIZE];
    312        }
    313
    314        /**
    315         * カラムの入力枠サイズ(横幅)を文字数で設定します。
    316         *
    317         * 従来の #setViewLength(String) で指定していた値です。
    318         *
    319         * @og.rev 6.2.0.0 (2015/02/27) fieldSize 属性の追加
    320         *
    321         * @param       fieldSize カラムの入力枠サイズ
    322         */
    323        public void setFieldSize( final String fieldSize ) {
    324                clmData[ColumnData.FIELD_SIZE] = fieldSize;
    325        }
    326
    327        /**
    328         * カラムの表示桁数を返します。
    329         * viewLength は、設定した場合のみ、使用できます。通常は、null が返ります。
    330         *
    331         * @og.rev 4.0.0.0 (2005/01/31) メソッド名変更 getSize() → getViewLength()
    332         *
    333         * @return      カラムの表示桁数
    334         */
    335        public String getViewLength() {
    336                return clmData[ColumnData.VIEW_LENGTH];
    337        }
    338
    339        /**
    340         * カラムの表示桁数を設定します。
    341         *
    342         * @og.rev 4.0.0.0 (2005/01/31) メソッド名変更 setSize() → setViewLength()
    343         *
    344         * @param       viewLength カラムの表示桁数
    345         */
    346        public void setViewLength( final String viewLength ) {
    347                clmData[ColumnData.VIEW_LENGTH] = viewLength;
    348        }
    349
    350        /**
    351         * カラムの文字桁数を返します。
    352         *
    353         * @og.rev 3.5.5.5 (2004/04/23) 新規追加
    354         *
    355         * @return      カラムの文字桁数
    356         */
    357        public String getMaxlength() {
    358                return clmData[ColumnData.USE_LENGTH];
    359        }
    360
    361        /**
    362         * カラムの文字桁数を設定します。
    363         *
    364         * @og.rev 3.5.5.5 (2004/04/23) 新規追加
    365         *
    366         * @param       maxlength カラムの文字桁数
    367         */
    368        public void setMaxlength( final String maxlength ) {
    369                clmData[ColumnData.USE_LENGTH] = maxlength;
    370        }
    371
    372        /**
    373         * カラムが書き込み可能かどうか[true/false]を返します。
    374         *
    375         * @return      カラムが書き込み可能かどうか[true/false]
    376         */
    377        public boolean isWritable() {
    378                return "true".equalsIgnoreCase( writable ) ;
    379        }
    380
    381        /**
    382         * カラムが書き込み可能かどうか[true/false]を設定します。
    383         *
    384         * @param       writable 書き込み可能かどうか[true/false]
    385         */
    386        public void setWritable( final String writable ) {
    387                this.writable = writable;
    388        }
    389
    390        /**
    391         * データの表示用レンデラーを返します。
    392         *
    393         * @og.rev 3.1.0.0 (2003/03/20) Renderer をキーのみ返すように変更
    394         *
    395         * @return      データの表示用レンデラー
    396         */
    397        public String getRenderer() {
    398                return clmData[ColumnData.RENDERER];
    399        }
    400
    401        /**
    402         * データの表示用レンデラーを設定します。
    403         *
    404         * "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    405         *
    406         * @og.rev 6.4.1.1 (2016/01/16) "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    407         *
    408         * @param       renderer 表示用レンデラー
    409         */
    410        public void setRenderer( final String renderer ) {
    411                clmData[ColumnData.RENDERER] = oldNewSplit( clmData[ColumnData.RENDERER] , renderer );          // 6.4.1.1 (2016/01/16)
    412        }
    413
    414        /**
    415         * データの編集用エディターを返します。
    416         *
    417         * @og.rev 3.1.0.0 (2003/03/20) Editor をキーのみ返すように変更
    418         *
    419         * @return      データの編集用エディター
    420         */
    421        public String getEditor() {
    422                return clmData[ColumnData.EDITOR];
    423        }
    424
    425        /**
    426         * データの編集用エディターを設定します。
    427         *
    428         * "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    429         *
    430         * @og.rev 6.4.1.1 (2016/01/16) "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    431         *
    432         * @param       editor 編集用エディター
    433         */
    434        public void setEditor( final String editor ) {
    435                clmData[ColumnData.EDITOR] = oldNewSplit( clmData[ColumnData.EDITOR] , editor );                // 6.4.1.1 (2016/01/16)
    436        }
    437
    438        /**
    439         * 文字種別名を返します。
    440         *
    441         * @return  データの文字種別
    442         */
    443        public String getDbType() {
    444                return clmData[ColumnData.DBTYPE];
    445        }
    446
    447        /**
    448         * データのタイプを設定します。
    449         *
    450         * "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    451         *
    452         * @og.rev 5.1.6.0 (2010/05/01) DBTypeの初期値を "XK" とします。
    453         * @og.rev 6.4.1.1 (2016/01/16) "既存値:設定値" という指定を行えば、既存値を持っている場合のみ、設定値に置き換えます。
    454         *
    455         * @param       dbType 文字種別
    456         */
    457        public void setDbType( final String dbType ) {
    458                clmData[ColumnData.DBTYPE] = oldNewSplit( clmData[ColumnData.DBTYPE] , (dbType == null) ? DBType.DEF_TYPE : dbType );           // 6.4.1.1 (2016/01/16)
    459        }
    460
    461        /**
    462         * カラムロールを返します。
    463         *
    464         * @return  カラムロール
    465         */
    466        public String getRoles() {
    467                return clmData[ColumnData.ROLES];
    468        }
    469
    470        /**
    471         * カラムロールを設定します。
    472         *
    473         * @param       roles カラムロール
    474         */
    475        public void setRoles( final String roles ) {
    476                clmData[ColumnData.ROLES] = roles;
    477        }
    478
    479        /**
    480         * データのデフォルト値を返します。
    481         *
    482         * @og.rev 5.1.8.0 (2010/07/01) メソッド名変更(getDefValue ⇒ getDefault)
    483         *
    484         * @return      データのデフォルト値
    485         */
    486        public String getDefault() {
    487                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    488                return ( clmData[ColumnData.DATA_DEFAULT] == null ) ? "" : clmData[ColumnData.DATA_DEFAULT];
    489        }
    490
    491        /**
    492         * データのデフォルト値を設定します。
    493         *
    494         * @og.rev 5.1.8.0 (2010/07/01) メソッド名変更(setDefValue ⇒ setDefault)
    495         *
    496         * @param       dataDef デフォルト値
    497         */
    498        public void setDefault( final String dataDef ) {
    499                clmData[ColumnData.DATA_DEFAULT] = dataDef;
    500        }
    501
    502        /**
    503         * 表示用レンデラーの追加属性を返します。
    504         *
    505         * @return   属性リスト
    506         * @og.rtnNotNull
    507         */
    508        public Attributes getRendererAttributes() {
    509                return rendAttri ;
    510        }
    511
    512        /**
    513         * 表示用レンデラーの追加属性を設定します。
    514         *
    515         * 元のrendAttriが、何も設定されていない場合は、引数のAttributesに
    516         * 置き換えます。
    517         * すでに、設定済みの場合は、putAll で、すべての属性を追加します。
    518         * 既存の属性は、そのまま残りますので、クリアしたい場合は、
    519         * 先に、getRendererAttributes() で取り出した Attributes を、
    520         * clear() してから、セットしてください。
    521         *
    522         * @og.rev 6.4.5.2 (2016/05/06) Attributesは、既存のAttributesに、ADDする。
    523         *
    524         * @param   attri       属性リスト
    525         */
    526        public void setRendererAttributes( final Attributes attri ) {
    527                rendAttri.set( attri );
    528        }
    529
    530        /**
    531         * 編集用エディター用の追加属性を返します。
    532         *
    533         * @return       追加属性
    534         * @og.rtnNotNull
    535         */
    536        public Attributes getEditorAttributes() {
    537                return editAttri;
    538        }
    539
    540        /**
    541         * 編集用エディター用の追加属性を設定します。
    542         *
    543         * 元のrendAttriが、何も設定されていない場合は、引数のAttributesに
    544         * 置き換えます。
    545         * すでに、設定済みの場合は、putAll で、すべての属性を追加します。
    546         * 既存の属性は、そのまま残りますので、クリアしたい場合は、
    547         * 先に、getEditorAttributes() で取り出した Attributes を、
    548         * clear() してから、セットしてください。
    549         *
    550         * @og.rev 6.4.5.2 (2016/05/06) Attributesは、既存のAttributesに、ADDする。
    551         *
    552         * @param   attri       属性リスト
    553         */
    554        public void setEditorAttributes( final Attributes attri ) {
    555                editAttri.set( attri );
    556        }
    557
    558        /**
    559         * 編集用エディター用の属性を削除します。
    560         *
    561         * 属性を、入れ替えではなく、追加したことで、削除が困難になりました。
    562         * そこで、属性の削除が出来るようにします。
    563         * キーとなる設定値から、値の文字列を切り取ります。
    564         * class 属性など、スペース連結の場合は、問題はありませんが、カンマ連結では
    565         * カンマが連続で並びますので、うまく対応できません。
    566         * 属性値が、一致する場合と、val がnullの場合は、そのキー自体を削除します。
    567         *
    568         * @og.rev 6.8.1.4 (2017/08/25) must="false"で、setEditorAttributes の属性の取り消しが出来ないための対応。
    569         *
    570         * @param   key 属性キー
    571         * @param   val 属性値
    572         */
    573        public void removeEditorAttributes( final String key , final String val ) {
    574                final String oldval = editAttri.get( key );
    575                // Attributes は、ConcurrentHashMap で管理しているので、oldval に null は、含みません。(が、チェックしておきます)
    576                if( val != null && oldval != null && oldval.contains( val ) ) {
    577                        final String newval = oldval.replace( val , "" );               // val の削除
    578                        if( newval.trim().isEmpty() ) {
    579                                editAttri.remove( key );
    580                        }
    581                        else {
    582                                editAttri.set( key,newval );
    583                        }
    584                }
    585        }
    586
    587        /**
    588         * パラメータを設定します。
    589         * ここで設定された値は、すべて(表示、編集、文字)のパラメータにセットされます。
    590         *
    591         * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編集パラメータ、文字パラメータの追加。
    592         *
    593         * @param       inParam 入力パラメータ
    594         */
    595        public void setParameter( final String inParam ) {
    596                clmData[ColumnData.RENDERER_PARAM]      = inParam ;
    597                clmData[ColumnData.EDITOR_PARAM]        = inParam ;
    598                clmData[ColumnData.TYPE_PARAM]          = inParam ;
    599        }
    600
    601        /**
    602         * 表示用レンデラーのパラメータを取得します。
    603         *
    604         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    605         *
    606         * @return      表示用レンデラーのパラメータ
    607         */
    608        public String getRendererParam() {
    609                return clmData[ColumnData.RENDERER_PARAM];
    610        }
    611
    612        /**
    613         * 表示用レンデラーのパラメータを設定します。
    614         *
    615         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    616         *
    617         * @param       inParam 表示用レンデラーのパラメータ
    618         */
    619        public void setRendererParam( final String inParam ) {
    620                clmData[ColumnData.RENDERER_PARAM] = inParam;
    621        }
    622
    623        /**
    624         * 編集用エディターのパラメータを取得します。
    625         *
    626         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    627         *
    628         * @return      編集用エディターのパラメータ
    629         */
    630        public String getEditorParam() {
    631                return clmData[ColumnData.EDITOR_PARAM];
    632        }
    633
    634        /**
    635         * 編集用エディターのパラメータを設定します。
    636         *
    637         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    638         *
    639         * @param       inParam 編集用エディターのパラメータ
    640         */
    641        public void setEditorParam( final String inParam ) {
    642                clmData[ColumnData.EDITOR_PARAM] = inParam      ;
    643        }
    644
    645        /**
    646         * データタイプのパラメータを取得します。
    647         *
    648         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    649         *
    650         * @return      データタイプのパラメータ
    651         */
    652        public String getDbTypeParam() {
    653                return clmData[ColumnData.TYPE_PARAM];
    654        }
    655
    656        /**
    657         * データタイプのパラメータをします。
    658         *
    659         * @og.rev 3.4.0.0 (2003/09/01) 新規追加
    660         *
    661         * @param       inParam データタイプのパラメータ
    662         */
    663        public void setDbTypeParam( final String inParam ) {
    664                clmData[ColumnData.TYPE_PARAM] = inParam ;
    665        }
    666
    667        /**
    668         * メニューに空の選択リストを追加するかどうかを取得します。
    669         *
    670         * @og.rev 3.5.5.7 (2004/05/10) 新規追加
    671         *
    672         * @return      選択リストを追加するかどうか(true:追加する/false:追加しない)
    673         */
    674        public boolean isAddNoValue() {
    675                return addNoValue ;
    676        }
    677
    678        /**
    679         * メニューに空の選択リストを追加するかどうかを設定します。
    680         *
    681         * @og.rev 3.5.5.7 (2004/05/10) 新規追加
    682         *
    683         * @param       add     [true:追加する/false:追加しない]
    684         */
    685        public void setAddNoValue( final boolean add ) {
    686                this.addNoValue = add   ;
    687        }
    688
    689        /**
    690         * セレクトメニューの場合、キー:ラベル形式で表示するかどうか[true/false/null]を指定します(初期値:null)。
    691         *
    692         * カラムがプルダウンメニュー形式の場合、キー:ラベル形式で表示するか、ラベルだけで表示するかを
    693         * 選択できます。
    694         * true を指定すると、「強制的に」キー:ラベル形式で表示します。
    695         * false の場合は、「強制的に」ラベルのみで表示されます。
    696         * 初期値の null の場合、コードリソースや、SQL文に準拠した指定通りの形式で表示します。
    697         *
    698         * &lt;og:column name="CDC" addKeyLabel="true" /&gt;
    699         *
    700         * @og.rev 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか。新規追加
    701         *
    702         * @param   addKeyLbl  [true:キー:ラベル形式/false:ラベルのみ/null:指定通り]
    703         * @see         #getAddKeyLabel()
    704         */
    705        public void setAddKeyLabel( final String addKeyLbl ) {
    706                addKeyLabel = addKeyLbl;
    707        }
    708
    709        /**
    710         * セレクトメニューの場合、キー:ラベル形式で表示するかどうか[true/false/null]を返します。
    711         *
    712         * これは、上位入れ子のタグの OptionTag で、addKeyLabel を取り出して、
    713         * true であれば、キー:ラベル形式 のオプションを、#addOption( String ) で
    714         * 登録させます。
    715         *
    716         * @og.rev 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか。新規追加
    717         *
    718         * @return      true:キー:ラベル形式/false:ラベルのみ/null:指定通り
    719         * @see         #setAddKeyLabel( String )
    720         */
    721        public String getAddKeyLabel() {
    722                return addKeyLabel;
    723        }
    724
    725        /**
    726         * セレクトメニューの場合、キーとラベルを分けて出力するかどうか[true/false]を指定します(初期値:false)。
    727         *
    728         * カラムがプルダウンメニュー形式の場合、ファイル出力時に、キーとラベルを分離して出力する事ができます。
    729         * この属性と、addKeyLabel とは、微妙に関連していて、addKeyLabel="true" のみの場合は、
    730         * キー:ラベル形式で、出力されますが、writeKeyLabel="true" も指定されている場合は、こちらが優先されます。
    731         * なお、この指定が有効なのは、セレクトメニューのカラムのみです。
    732         * 初期値は、false です。
    733         *
    734         * @og.rev 6.2.3.0 (2015/05/01) キー／ラベルで分離して出力するかどうか。
    735         *
    736         * @param   flag  キー／ラベル分離出力するかどうか [true:分離出力/false:通常]
    737         */
    738        public void setWriteKeyLabel( final boolean flag ) {
    739                writeKeyLabel = flag;
    740        }
    741
    742        /**
    743         * セレクトメニューの場合、キーとラベルを分けて出力するかどうか[true/false]を取得します。
    744         *
    745         * カラムがプルダウンメニュー形式の場合、ファイル出力時に、キーとラベルを分離して出力する事ができます。
    746         * この属性と、addKeyLabel とは、微妙に関連していて、addKeyLabel="true" のみの場合は、
    747         * キー:ラベル形式で、出力されますが、writeKeyLabel="true" も指定されている場合は、こちらが優先されます。
    748         * なお、この指定が有効なのは、セレクトメニューのカラムのみです。
    749         *
    750         * @og.rev 6.2.3.0 (2015/05/01) キー／ラベルで分離して出力するかどうか。
    751         *
    752         * @return      キー／ラベル分離出力するかどうか[true:分離出力/false:通常]
    753         */
    754        public boolean isWriteKeyLabel() {
    755                return writeKeyLabel ;
    756        }
    757
    758        /**
    759         * このカラムオブジェクトがカラムリソースより正式に作られたかどうかを取得します。
    760         * カラムリソースが無い場合は、仮オブジェクトかデータベースメタデータより作成されます。
    761         * その場合は、チェック機能が緩くなるため、正式なカラムオブジェクトと区別する為に
    762         * この属性を持ちます。
    763         *
    764         * @og.rev 3.6.0.7 (2004/11/06) 新規追加
    765         *
    766         * @return      カラムリソースより正式に作られたかどうか(true:正式/false:暫定)
    767         */
    768        public boolean isOfficial() {
    769                return official;
    770        }
    771
    772        /**
    773         * このカラムオブジェクトがカラムリソースより正式に作られたかどうかを設定します。
    774         * 従来は、自動判定で、再セット不可能でしたが、動的カラムを実現する場合に、
    775         * エラーチェックで引っかかるため、再設定可能にします。
    776         *
    777         * @og.rev 5.4.3.4 (2012/01/12) 新規追加
    778         *
    779         * @param       official 正式かどうか [true:正式/false:暫定]
    780         */
    781        public void setOfficial( final boolean official ) {
    782                this.official = official ;
    783        }
    784
    785        /**
    786         * 接続先IDを設定します。
    787         *
    788         * @param dbid 接続先ID
    789         */
    790        public void setDbid( final String dbid ) {
    791                this.dbid = dbid;
    792        }
    793
    794        /**
    795         * 接続先IDを返します。
    796         *
    797         * @return      接続先ID
    798         */
    799        public String getDbid() {
    800                return dbid;
    801        }
    802
    803        /**
    804         * カラムデータオブジェクトを取得します。
    805         *
    806         * @return      カラムデータオブジェクト
    807         * @og.rtnNotNull
    808         */
    809        public ColumnData getColumnData() {
    810                return new ColumnData( clmData );
    811        }
    812
    813        /**
    814         * カラムデータオブジェクトを設定します。
    815         * ここでは、オブジェクトその物を持つのではなく、設定された値のみ持ちます。
    816         *
    817         * @param       clmDt カラムデータオブジェクト
    818         */
    819        public void setColumnData( final ColumnData clmDt ) {
    820                clmData = clmDt.getColumnData();
    821        }
    822
    823        /**
    824         * コードデータオブジェクトを取得します。
    825         *
    826         * @og.rev 4.0.0.0 (2005/01/31)  新規作成
    827         *
    828         * @return      コードデータオブジェクト
    829         */
    830        public CodeData getCodeData() {
    831                return codeData;
    832        }
    833
    834        /**
    835         * コードデータオブジェクトを設定します。
    836         *
    837         * @og.rev 4.0.0.0 (2005/01/31)  新規作成
    838         *
    839         * @param       codeData コードデータオブジェクト
    840         */
    841        public void setCodeData( final CodeData codeData ) {
    842                this.codeData = codeData;
    843        }
    844
    845        /**
    846         * ラベルデータオブジェクトを取得します。
    847         *
    848         * @return      ラベルデータオブジェクト
    849         */
    850        public LabelData getLabelData() {
    851                return labelData;
    852        }
    853
    854        /**
    855         * ラベルデータオブジェクトを設定します。
    856         *
    857         * @param       labelData ラベルデータオブジェクト
    858         */
    859        public void setLabelData( final LabelData labelData ) {
    860                this.labelData = labelData;
    861        }
    862
    863        /**
    864         * イベントカラム(親カラム)のセット
    865         *
    866         * イベントカラムをセットします。
    867         *
    868         * @og.rev 4.3.6.0 (2009/04/01)
    869         * @param       col     親カラムID
    870         */
    871        public void setEventColumn( final String col ) {
    872                this.eventColumn = col;
    873        }
    874
    875        /**
    876         * イベントカラム(親カラム)の取得
    877         *
    878         * イベントカラムを取得します。
    879         *
    880         * @og.rev 4.3.6.0 (2009/04/01)
    881         *
    882         * @return  イベントカラム
    883         */
    884        public String getEventColumn() {
    885                return eventColumn;
    886        }
    887
    888        /**
    889         * イベントカラムの子カラムの値を出力するためのSQL文のセット
    890         *
    891         * イベントカラムの子カラムの値を出力するためのSQL文をセットします。
    892         *
    893         * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加
    894         *
    895         * @param       val     イベントカラムの値SQL文
    896         */
    897        public void setEventValue( final String val ) {
    898                this.eventValue = val;
    899        }
    900
    901        /**
    902         * イベントカラムの子カラムの値を出力するためのSQL文の取得
    903         *
    904         * イベントカラムの子カラムの値を出力するためのSQL文を取得します。
    905         *
    906         * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加
    907         *
    908         * @return  イベントカラムの値SQL文
    909         */
    910        public String getEventValue() {
    911                return eventValue;
    912        }
    913
    914        /**
    915         * {&#064;XXXX}を変換していない状態の編集パラメータ
    916         *
    917         * 生のパラメータを取得します。
    918         *
    919         * @og.rev 4.3.6.0 (2009/04/01)
    920         *
    921         * @return  生編集パラメータ
    922         */
    923        public String getRawEditParameter() {
    924                return rawEditParameter;
    925        }
    926
    927        /**
    928         * {&#064;XXXX}を変換していない状態の表示パラメータ
    929         *
    930         * 生のパラメータを取得します。
    931         *
    932         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    933         *
    934         * @return  生表示パラメータ
    935         */
    936        public String getRawRendParameter() {
    937                return rawRendParameter;
    938        }
    939
    940        /**
    941         * {&#064;XXXX}を変換していない状態のparameterセット用
    942         *
    943         * 編集種別・表示種別
    944         * 生のパラメータをセットします。(編集種別・表示種別の両方に適用されます。)
    945         *
    946         * @og.rev 4.3.6.0 (2009/04/01)
    947         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    948         *
    949         * @param param パラメータ
    950         */
    951        public void setRawParameter( final String param ) {
    952                rawEditParameter = param;
    953                rawRendParameter = param;
    954        }
    955
    956        /**
    957         * {&#064;XXXX}を変換していない状態の編集種別 parameterセット用
    958         *
    959         * DBColumn とのデータ変換のため、内部変数として、編集種別・表示種別を分けて管理します。
    960         *
    961         * @og.rev 5.1.8.0 (2010/07/01) 新規追加
    962         *
    963         * @param param パラメータ
    964         */
    965        public void setRawEditParameter( final String param ) {
    966                rawEditParameter = param;
    967        }
    968
    969        /**
    970         * {&#064;XXXX}を変換していない状態の表示種別 parameterセット用
    971         *
    972         * DBColumn とのデータ変換のため、内部変数として、編集種別・表示種別を分けて管理します。
    973         *
    974         * @og.rev 5.1.8.0 (2010/07/01) 新規追加
    975         *
    976         * @param param パラメータ
    977         */
    978        public void setRawRendParameter( final String param ) {
    979                rawRendParameter = param;
    980        }
    981
    982        /**
    983         * イベントURLのセット。
    984         *
    985         * イベントカラム利用時にコールされるURLのセット
    986         *
    987         * @og.rev 4.3.6.0 (2009/04/01)
    988         * @param url イベントURL
    989         */
    990        public void setEventURL( final String url ) {
    991                this.eventURL = url;
    992        }
    993
    994        /**
    995         * イベントURLの取得。
    996         *
    997         * eventColumn利用時のJSから呼び出すためのURL取得
    998         *
    999         * @og.rev 4.3.6.0 (2009/04/01)
    1000         *
    1001         * @return  イベントURL
    1002         */
    1003        public String getEventURL() {
    1004                return eventURL;
    1005        }
    1006
    1007        /**
    1008         * MENU時にラベル短ベースで表示するかどうか[auto/true/その他]のコントロール
    1009         *
    1010         * auto/trueが有効。それ以外はfalse扱いとする。標準auto
    1011         *
    1012         * @og.rev 5.5.1.0 (2012/04/03)
    1013         * @param use 表示するかどうか[auto/true/その他]
    1014         */
    1015        public void setUseSLabel( final String use ) {
    1016                this.useSLabel = use;
    1017        }
    1018
    1019        /**
    1020         * MENU時にラベル短ベースで表示するかどうかのコントロール。
    1021         *
    1022         * @og.rev 5.5.1.0 (2012/04/03)
    1023         *
    1024         * @return  イベントURL
    1025         */
    1026        public String getUseSLabel() {
    1027                return useSLabel;
    1028        }
    1029
    1030        /**
    1031         * 非表示文字列を設定します。
    1032         *
    1033         * これは、例えば、数字型の場合は、0 がデフォルトなどの場合、
    1034         * あえて表示したくないなどのケースに使います。
    1035         * そのような状況が設定されていない場合は、null を設定してください。
    1036         * 初期値は、null です。
    1037         *
    1038         * @og.rev 5.6.2.3 (2013/03/22) 新規追加
    1039         *
    1040         * @param val 非表示にする文字列
    1041         */
    1042        public void setNoDisplayVal( final String val ) {
    1043                this.noDisplayVal = val;
    1044        }
    1045
    1046        /**
    1047         * 非表示文字列を返します。
    1048         *
    1049         * これは、例えば、数字型の場合は、0 がデフォルトなどの場合、
    1050         * あえて表示したくないなどのケースに使います。
    1051         * そのような状況が設定されていない場合は、null が返されます。
    1052         * 初期値は、null です。
    1053         *
    1054         * @og.rev 5.6.2.3 (2013/03/22) 新規追加
    1055         *
    1056         * @return 非表示文字
    1057         */
    1058        public String getNoDisplayVal() {
    1059                return noDisplayVal;
    1060        }
    1061
    1062        /**
    1063         * レンデラー利用ファイル出力時に数値等も文字タイプ固定にするかどうかを設定します
    1064         *              (初期値:USE_STRING_EXCEL_OUTPUT[={@og.value SystemData#USE_STRING_EXCEL_OUTPUT}])。
    1065         *
    1066         * これは、レンデラーでのExcel出力時のセルタイプに影響します。
    1067         * trueの場合は数値も全て文字として出力します。
    1068         * falseの場合はDBTYPEに従った出力になりるため、数値型の DBTYPE では、doubleに一度変換されます。
    1069         * (初期値:USE_STRING_EXCEL_OUTPUT[={@og.value SystemData#USE_STRING_EXCEL_OUTPUT}])。
    1070         *
    1071         * @og.rev 5.7.6.3 (2014/05/23) 新規追加
    1072         *
    1073         * @param flag レンデラー利用時の出力方法 (true:String出力/false:DBTYPEに従う)
    1074         */
    1075        public void setStringOutput( final boolean flag ) {
    1076                stringOutput = flag;
    1077        }
    1078
    1079        /**
    1080         * レンデラー利用ファイル出力時に数値等も文字タイプ固定にするかどうか
    1081         *              (初期値:USE_STRING_EXCEL_OUTPUT[={@og.value SystemData#USE_STRING_EXCEL_OUTPUT}])。
    1082         *
    1083         * これは、レンデラーでのExcel出力時のセルタイプに影響します。
    1084         * trueの場合は数値も全て文字として出力します。
    1085         * falseの場合はDBTYPEに従った出力になりるため、数値型の DBTYPE では、doubleに一度変換されます。
    1086         * (初期値:USE_STRING_EXCEL_OUTPUT[={@og.value SystemData#USE_STRING_EXCEL_OUTPUT}])。
    1087         *
    1088         * @og.rev 5.7.6.3 (2014/05/23) 新規追加
    1089         *
    1090         * @return レンデラー利用時の出力方法 (true:String出力/false:DBTYPEに従う)
    1091         */
    1092        public boolean isStringOutput() {
    1093                return stringOutput;
    1094        }
    1095
    1096        /**
    1097         * 設定値に "_" が含まれる書込み禁止カラムでかどうかを指定します。
    1098         *
    1099         * true に設定された場合は、#getWriteValue( String ) で、先頭のアンダーバーを
    1100         * 削除して返します。
    1101         * 初期値は、false:使わないです。
    1102         *
    1103         * @og.rev 7.0.1.5 (2018/12/10) writeCtrlで出力時のアンダーバー削除
    1104         *
    1105         * @param flag writableControlを使うかどうか [true:使う/false:使わない]
    1106         */
    1107        public void setWriteControl( final boolean flag ) {
    1108                writeCtrl = flag;
    1109        }
    1110
    1111        /**
    1112         * 設定値に "_" が含まれる書込み禁止カラムかどうかを返します。
    1113         *
    1114         * true に設定された場合は、#getWriteValue( String ) で、先頭のアンダーバーを
    1115         * 削除して返します。
    1116         * 初期値は、false:使わないです。
    1117         *
    1118         * @og.rev 7.0.1.5 (2018/12/10) writeCtrlで出力時のアンダーバー削除
    1119         *
    1120         * @return writableControlを使うかどうか [true:使う/false:使わない]
    1121         */
    1122        public boolean isWriteControl() {
    1123                return writeCtrl;
    1124        }
    1125
    1126        /**
    1127         * 日付送り戻し機能を有効にするかどうか[true:有効/false:無効]指定します(初期値:true)。
    1128         *
    1129         * @og.rev 8.1.2.3 (2022/05/20) 日付送り戻し不具合対応(useDateFeed 属性追加)
    1130         *
    1131         * @param       flag    日付送り戻し機能有無 [true:有効/false:無効]
    1132         */
    1133        public void setUseDateFeed( final boolean flag ) {
    1134                this.useDateFeed = flag;
    1135        }
    1136
    1137        /**
    1138         * 日付送り戻し機能を有効にするかどうか[true:有効/false:無効]返します。
    1139         *
    1140         * @og.rev 8.1.2.3 (2022/05/20) 日付送り戻し不具合対応(useDateFeed 属性追加)
    1141         *
    1142         * @return      flag    日付送り戻し機能有無 [true:有効/false:無効]
    1143         */
    1144        public boolean isDateFeed() {
    1145                return useDateFeed;
    1146        }
    1147}