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