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