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