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