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