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