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     */
016    package org.opengion.hayabusa.db;
017    
018    import org.opengion.fukurou.model.NativeType;
019    import org.opengion.fukurou.util.Attributes;
020    import org.opengion.fukurou.util.ErrorMessage;
021    import org.opengion.fukurou.util.TagBuffer;
022    import org.opengion.hayabusa.common.HybsSystem;
023    import org.opengion.hayabusa.common.HybsSystemException;
024    import org.opengion.hayabusa.resource.CodeData;
025    import org.opengion.hayabusa.resource.ColumnData;
026    import org.opengion.hayabusa.resource.LabelData;
027    import org.opengion.hayabusa.resource.RoleMode;
028    
029    /**
030     * DBType インターフェースを継承した Abstractクラスです?
031     * getRendererValue( String value ) 、getEditorValue( String value ) ?
032     * isValueChack( String ) メソ?を?サブクラスで実?る?があります?
033     *
034     * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編?ラメータ、文字パラメータの追??
035     * @og.group ??ブル管?
036     *
037     * @version  4.0
038     * @author   Kazuhiko Hasegawa
039     * @since    JDK5.0,
040     */
041    public final class DBColumn {
042    
043            // 3.5.4.2 (2003/12/15) COLUMNS_MAXSIZE を定義しておきます?
044            private final int COLUMNS_MAXSIZE = HybsSystem.sysInt( "HTML_COLUMNS_MAXSIZE" ) ;   // 表示フィールド?大きさ
045    
046            private final ColumnData columnData ;
047            private final LabelData  labelData ;
048            private final CodeData   codeData ;
049    
050            private final CellRenderer      cellRenderer    ;               // 表示用レン?ー
051            private final CellEditor        cellEditor              ;               // 編?エ?ター
052            private final DBType            dbType                  ;               // ??タのタイ?
053    
054            private final String            lang                    ;               // ??
055            private final boolean           writable                ;               // カラ?書き込み可能かど?
056            private final String            defValue                ;               // ??タの?ォルト?
057            private final Attributes        rendAttri               ;               // 表示用レン?ー追?属?
058            private final Attributes        editAttri               ;               // 編?エ?ター追?属?
059            private final boolean           addNoValue              ;               // メニューに空の選択リストを追?るかど? // 3.5.5.7 (2004/05/10)
060            private final String            dbid                    ;               // ??タベ?ス接続?ID
061            private final boolean           official                ;               // カラ?ソースから作?されたかど?               // 3.6.0.7 (2004/11/06)
062    
063            private final int                       checkLevel              ;               // DBColumn の 整合?チェ?を行うレベルを規定します?
064    
065            private final Selection         selection               ;               // 4.0.0.0 (2007/11/07)
066    
067            private final String            eventColumn             ;       // 4.3.6.0 (2009/04/01) イベントカラ?
068            private final String            rawEditParameter;       // 4.3.6.0 (2009/04/01) {@XXXX}の変換がされて??パラメータ
069            private final String            rawRendParameter;       // 5.1.7.0  (2009/04/01) {@XXXX}の変換がされて??パラメータ
070            private final String            eventURL                ;       // 4.3.6.0 (2009/04/01) イベントカラ?利用するURL
071    
072            private final String            useSLabel               ;       // 5.5.1.0 (2012/04/03) MENUのベ?ス表示の?替?
073            private final String            noDisplayVal    ;       // 5.6.2.3 (2013/03/22) 非表示??設?
074    
075            /**
076             * DBColumnConfig オブジェクトより作?されるコンストラクター
077             * すべての??は、インスタンス作?時に設定します?
078             * こ?オブジェクト??度作?されると変更されることはありません?
079             *
080             * @og.rev 4.0.0.0 (2005/01/31) 新規追?
081             * @og.rev 4.0.0.0 (2007/11/07) Selectionオブジェクトをキャ?ュする
082             * @og.rev 4.3.6.0 (2009/04/01) eventColumnの対?
083             * @og.rev 5.1.7.0 (2010/06/01) 動的プル?ン実?直?
084             * @og.rev 5.5.1.0 (2012/04/03) useSLabel対?
085             * @og.rev 5.6.2.3 (2013/03/22) 非表示??設定?noDisplayVal追?
086             * @og.rev 5.7.3.0 (2014/02/07) SelectionFactory 対?
087             *
088             * @param   lang    ??
089             * @param   clmData カラ?ータオブジェク?
090             * @param   lblData ラベル??タオブジェク?
091             * @param   cdData  コードデータオブジェク?
092             */
093            public DBColumn( final String     lang,
094                                             final ColumnData clmData ,
095                                             final LabelData  lblData ,
096                                             final CodeData   cdData ) {
097                    this.lang       = lang ;
098                    this.columnData = clmData ;
099                    this.labelData  = lblData ;
100                    this.codeData   = cdData  ;
101    
102                    writable  = true ;
103    
104                    try {
105                            dbType = DBTypeFactory.newInstance( columnData.getDbType() );
106                    }
107                    catch( RuntimeException ex ) {
108                            String errMsg = "dbType の作?に失敗しました?
109                                                    + " name=[" + columnData.getName() + "]"
110                                                    + " dbType=[" + columnData.getDbType() + "] "
111                                                    + ex.getMessage();
112                            throw new HybsSystemException( errMsg,ex );
113                    }
114    
115                    rendAttri       = null  ;
116                    editAttri       = null  ;
117                    addNoValue      = false ;
118                    official        = true  ;               // 3.6.0.7 (2004/11/06)
119                    checkLevel      = -1;
120                    dbid            = null  ;               // 標準から作?されるカラ?ブジェクト?、DEFAULT 接続?を設定する?
121    
122                    eventColumn  = null;            // 4.3.6.0 (2009/04/01)
123                    rawEditParameter = clmData.getEditorParam(); // 4.3.6.0 (2009/04/01)
124                    rawRendParameter = clmData.getRendererParam(); // 5.1.7.0 (2010/06/01)
125                    eventURL         = null;                // 4.3.6.0 (2009/04/01)
126    
127                    useSLabel       = "auto";               // 5.5.1.0
128                    noDisplayVal= null;                     // 5.6.2.3 (2013/03/22) 非表示??設?
129    
130                    String def = columnData.getDefault();
131                    if( def != null ) { defValue = def; }
132                    else {              defValue = dbType.getDefault() ; }
133    
134                    // 4.0.0.0 (2007/11/07)
135    //              selection = ( codeData == null ? null : new Selection_CODE( codeData ) );
136                    // 5.7.3.0 (2014/02/07) SelectionFactory 対?
137                    selection = ( codeData == null ? null : SelectionFactory.newSelection( "MENU",codeData ) );
138    
139                    try {
140                            cellRenderer = DBCellFactory.newRenderer( columnData.getRenderer(),this );
141                            cellEditor   = DBCellFactory.newEditor(   columnData.getEditor(),  this );
142                    }
143                    catch( RuntimeException ex ) {
144                            String errMsg = "Renderer,Editor の作?に失敗しました?
145                                                    + " name=[" + columnData.getName() + "]"
146                                                    + " Renderer=[" + columnData.getRenderer() + "] "
147                                                    + " Editor=[" + columnData.getEditor() + "] "
148                                                    + ex.getMessage();
149                            throw new HybsSystemException( errMsg,ex );
150                    }
151            }
152    
153            /**
154             * DBColumnConfig オブジェクトより作?されるコンストラクター
155             * すべての??は、インスタンス作?時に設定します?
156             * こ?オブジェクト??度作?されると変更されることはありません?
157             *
158             * @og.rev 4.0.0.0 (2007/11/07) Selectionオブジェクトをキャ?ュする
159             * @og.rev 5.1.7.0 (2010/06/01) 動的プル?ン実?直?
160             * @og.rev 5.1.8.0 (2010/07/01) メソ?名変更(getDefValue ?getDefault)
161             * @og.rev 5.5.1.0 (2012/04/03) useSLabel対?
162             * @og.rev 5.6.2.3 (2013/03/22) 非表示??設定?noDisplayVal追?
163             * @og.rev 5.6.6.0 (2013/07/05) codeKeyVal 属?を使用した、Selection_KEYVAL オブジェクト?作?
164             * @og.rev 5.7.3.0 (2014/02/07) SelectionFactory 対?
165             *
166             * @param   config DBColumnConfigオブジェク?
167             */
168            public DBColumn( final DBColumnConfig config ) {
169                    lang      = config.getLang()            ;
170    
171                    columnData      = config.getColumnData();
172                    labelData       = config.getLabelData();
173                    codeData        = config.getCodeData();
174    
175                    writable        = config.isWritable();
176                    dbType          = DBTypeFactory.newInstance( columnData.getDbType() );
177                    rendAttri       = config.getRendererAttributes();
178                    editAttri       = config.getEditorAttributes();
179                    addNoValue      = config.isAddNoValue();
180                    official        = config.isOfficial();          // 3.6.0.7 (2004/11/06)
181                    dbid            = config.getDbid();
182    
183                    eventColumn      = config.getEventColumn();      // 4.3.6.0 (2009/04/01)
184                    rawEditParameter = config.getRawEditParameter(); // 4.3.6.0 (2009/04/01)
185                    rawRendParameter = config.getRawRendParameter(); // 5.1.7.0 (2010/06/01) 動的プル?ン実?直?
186                    eventURL                 = config.getEventURL();                 // 4.3.6.0 (2009/04/01)
187    
188                    useSLabel                = config.getUseSLabel();               // 5.5.1.0 (2012/04/03)
189                    noDisplayVal     = config.getNoDisplayVal();    // 5.6.2.3 (2013/03/22) 非表示??設?
190    
191                    // DBColumn の 整合?チェ?を行うレベルを規定します?
192                    String CHECK_LEVEL = HybsSystem.sys( "DB_OFFICIAL_COLUMN_CHECK_LEVEL" );
193                    if( !official && ( CHECK_LEVEL != null && CHECK_LEVEL.length() > 0 ) ) {
194                            checkLevel = Integer.parseInt( CHECK_LEVEL );
195                    }
196                    else {
197                            checkLevel = -1;
198                    }
199    
200    //              String def = config.getDefValue();
201                    String def = config.getDefault();
202                    if( def != null ) { defValue = def; }
203                    else {              defValue = dbType.getDefault() ; }
204    
205                    // 4.0.0.0 (2007/11/07)
206    //              selection = ( codeData == null ? null : new Selection_CODE( codeData ) );
207                    // 5.6.6.0 (2013/07/05) codeKeyVal 属?を使用した、Selection_KEYVAL オブジェクト?作?
208                    // 優先?位?、codeData オブジェクトで、codeKeyVal を利用したSelectionは、DBColumnConfig からのみ作?可能
209                    if( codeData != null ) {
210                            // 5.7.3.0 (2014/02/07) SelectionFactory 対?
211    //                      selection = new Selection_CODE( codeData );
212                            selection = SelectionFactory.newSelection( "MENU",codeData );
213                    }
214                    else {
215                            String codeKeyVal = config.getCodeKeyVal();
216                            if( codeKeyVal != null ) {
217                                    // 5.7.3.0 (2014/02/07) SelectionFactory 対?
218    //                              selection = new Selection_KEYVAL( codeKeyVal );
219                                    selection = SelectionFactory.newSelection( "KEYVAL", codeKeyVal );
220                            }
221                            else {
222                                    selection = null;
223                            }
224                    }
225    
226                    cellRenderer = DBCellFactory.newRenderer( columnData.getRenderer(),this );
227                    cellEditor   = DBCellFactory.newEditor( columnData.getEditor(),this );
228            }
229    
230            /**
231             * ?を返します?
232             *
233             * @return  ??
234             */
235            public String getLang() {
236                    return lang;
237            }
238    
239            /**
240             * カラ?を返します?
241             *
242             * @return  カラ?
243             */
244            public String getName() {
245                    return columnData.getName();
246            }
247    
248            /**
249             * カラ??ラベル名を返します?
250             *
251             * @return  カラ??ラベル?
252             */
253            public String getLabel() {
254                    return labelData.getLabel();
255            }
256    
257            /**
258             * カラ??ラベル名を返します?
259             *
260             * @return  カラ??ラベル?名前(短))
261             */
262            public String getShortLabel() {
263                    return labelData.getShortLabel();
264            }
265    
266            /**
267             * カラ??ラベル名を返します?
268             *
269             * @return  カラ??ラベル?名前(長))
270             */
271            public String getLongLabel() {
272                    return labelData.getLongLabel();
273            }
274    
275            /**
276             * カラ??クラスを文字?にした名称を返します?
277             * これは?HTML上??タグに?データベ?ス定義に応じたクラス名を
278             * 表します?(VARCHAR2、NUMBER など)
279             *
280             * これは、カラ????タタイ?X,S9など)と機??重?ますが?
281             * そ?カラ?、大まかな?で、文字?であるか?数字であるかを示します?
282             *
283             * 画面表示上?右?、左???IMEのON/OFFなどの CSSファイルの???
284             * カラ????タタイ?X,S9など)ですが、テーブルソート時のソート条件
285             * は、この クラス??(VARCHAR2、NUMBER)を参照します?
286             *
287             * @return  カラ??クラスを文字?にした名称(VARCHAR2、NUMBER など)
288             */
289            public String getClassName() {
290                    return columnData.getClassName();
291            }
292    
293            /**
294             * フィールド???タ長を返します?
295             * 通常は、整数型???と??タ長は同じですが,小数点を表すデータ長は
296             * x,y 形式?場合?x + 2 桁で表されます?(マイナス記号と小数点記号)
297             * 7,3 は?xxxx,yyy のフォーマットで、データ長は? になります?
298             *
299             * @og.rev 2.1.1.2 (2002/11/21) ?桁数入力時の桁数チェ?の間違?訂正?
300             * @og.rev 4.0.0.0 (2005/01/31) メソ?名変更 getMaxlength() ?getTotalSize()
301             *
302             * @return  ??タ長定義??
303             */
304            public int getTotalSize() {
305                    return columnData.getTotalSize();
306            }
307    
308            /**
309             * フィールド?使用桁数を返します?
310             * 少数??場合??7,3" のようなカンマで整数部、小数部を区?た書式になります?
311             * 7,3 は?xxxx,yyy のフォーマットで、整数部?桁?小数部?桁を意味します?
312             *
313             * @return  使用桁数
314             */
315            public String getMaxlength() {
316                    return columnData.getMaxlength();
317            }
318    
319            /**
320             * フィールド?整数部の??タ長を返します?
321             * 通常は、整数型???と??タ長は同じですが,小数点を表すデータ長は
322             * x,y 形式?場合?x - y 桁で表されます?(マイナス記号含ま?
323             * 7,3 は?xxxx,yyy のフォーマットで、データ長は? になります?
324             *
325             * @return  ??タ長定義??
326             */
327            public int getSizeX() {
328                    return columnData.getSizeX() ;
329            }
330    
331            /**
332             * フィールド?小数部の??タ長を返します?
333             * 通常は、整数型???では? になりますが,小数点を表すデータ長は
334             * x,y 形式?場合?y 桁で表されます?
335             * 7,3 は?xxxx,yyy のフォーマットで、データ長は? になります?
336             *
337             * @return  ??タ長定義??
338             */
339            public int getSizeY() {
340                    return columnData.getSizeY() ;
341            }
342    
343            /**
344             * カラ??表示桁数を返します?
345             * viewLength は、設定した?合?み、使用できます?通常は、null が返ります?
346             *
347             * @og.rev 3.5.5.5 (2004/04/23) 新規追?
348             * @og.rev 4.0.0.0 (2005/01/31) メソ?名変更 getSize() ?getViewLength()
349             *
350             * @return      カラ???桁数
351             */
352            public String getViewLength() {
353                    return columnData.getViewLength();
354            }
355    
356            /**
357             * カラ?書き込み可能かど?を返します?
358             *
359             * @return  カラ?書き込み可能かど?
360             */
361            public boolean isWritable() {
362                    return writable;
363            }
364    
365            /**
366             * ??タの値そ?も?ではなく?そ?値のラベル?を返します?
367             *
368             * @og.rev 3.5.5.4 (2004/04/15) value ?null の場合??"(ゼロストリング)にする?
369             *
370             * @param   value       入力?
371             *
372             * @return  ??タ表示用の??
373             */
374            public String getRendererValue( final String value ) {
375                    return cellRenderer.getValue( (value != null ) ? value : "" );
376            }
377    
378            /**
379             * ??タ表示用のHTML??を作?します?
380             * 行番号毎に異なる?を返すことの出来?DBCellRenderer を使用することが?来ます?
381             *
382             * @og.rev 3.5.5.7 (2004/05/10) 行番号に無関係に、?を返すように変更します?
383             * @og.rev 4.0.0.0 (2005/11/30) 行番号に対応した?を返すように変更します?
384             *
385             * @param   row         行番号
386             * @param   value       入力?
387             *
388             * @return  ??タ編?の??
389             */
390            public String getRendererValue( final int row,final String value ) {
391                    return cellRenderer.getValue( row,(value != null ) ? value : "" );
392            }
393    
394            /**
395             * ??タ編?のHTML??を作?します?
396             *
397             * @og.rev 3.5.5.4 (2004/04/15) value ?null の場合??"(ゼロストリング)にする?
398             *
399             * @param   value       入力?
400             *
401             * @return  ??タ編?の??
402             */
403            public String getEditorValue( final String value ) {
404                    return cellEditor.getValue( (value != null ) ? value : "" );
405            }
406    
407            /**
408             * ??タ編?のHTML??を作?します?
409             * 行番号付?編?ータを作?します?名前_行番号 で登録する為?
410             * リクエスト情報を1つ毎?フィールドで処?きます?
411             *
412             * @param   row         行番号
413             * @param   value       入力?
414             *
415             * @return  ??タ編?の??
416             */
417            public String getEditorValue( final int row,final String value ) {
418                    return cellEditor.getValue( row,(value != null ) ? value : "" );
419            }
420    
421            /**
422             * ??タ出力用の固定長??を作?します?
423             * HOST送信用桁数がセ?されて?ば、そちらを優先します?
424             *
425             * @og.rev 3.5.4.5 (2004/01/23) エンコード指定に変更します?
426             *
427             * @param   value       対象の値
428             * @param   encode      固定長で変換する?エンコー?
429             *
430             * @return  ??タ編?の??
431             */
432            public String getWriterValue( final String value,final String encode ) {
433                    return dbType.valueFill( value ,columnData.getSizeX(), columnData.getSizeY(), encode );
434            }
435    
436            /**
437             * ??タの表示用レン?ーを返します?
438             *
439             * @og.rev 3.8.0.2 (2005/07/11) 新規追?
440             *
441             * @return      ??タの表示用レン?ー
442             */
443            public String getRenderer() {
444                    return columnData.getRenderer() ;
445            }
446    
447            /**
448             * ??タの編?エ?ターを返します?
449             *
450             * @og.rev 3.8.0.2 (2005/07/11) 新規追?
451             *
452             * @return      ??タの編?エ?ター
453             */
454            public String getEditor() {
455                    return columnData.getEditor() ;
456            }
457    
458            /**
459             * ?種別名を返します?
460             * カラ???種別名名称を返します?
461             * これは?HTML上??タグに?データベ?ス定義に応じたクラス?
462             * セ??CSS(Cascading Style Sheet)の class="xxxxx" とする事により
463             * ?スタイルを表現するのに使用します?
464             *
465             * ここでは, カラ?ソースの DBTYPE 属?で????(X,S9,KXなど)を返します?
466             *
467             * @return  ??タの?種別(X,KX,S9 など)
468             */
469            public String getDbType() {
470                    return columnData.getDbType() ;
471            }
472    
473            /**
474             * ??タのNATIVEの型?識別コードを返します?
475             *
476             * @og.rev 4.1.1.2 (2008/02/28) Enum?fukurou.model.NativeType)に変更
477             *
478             * @return  NATIVEの型?識別コー?DBType で規?
479             * @see org.opengion.fukurou.model.NativeType
480             */
481            public NativeType getNativeType() {
482                    return dbType.getNativeType();
483            }
484    
485            /**
486             * そ?カラ??,?ォルト?の値を返します?
487             *
488             * カラ?ソースに ?ォルト情報が登録されて?場合?,そ?値を返します?
489             * ?ォルト?が設定されて???合?, null を返します?
490             *
491             * @return  ?ォルト?(無ければ null)
492             */
493            public String getDefault() {
494                    return defValue;
495            }
496    
497            /**
498             * 表示用レン?ーのパラメータを取得します?
499             *
500             * @og.rev 3.4.0.0 (2003/09/01) 新規追?
501             *
502             * @return      表示用レン?ーのパラメータ
503             */
504            public String getRendererParam() {
505                    return columnData.getRendererParam();
506            }
507    
508            /**
509             * 編?エ?ターのパラメータを取得します?
510             *
511             * @og.rev 3.4.0.0 (2003/09/01) 新規追?
512             *
513             * @return      編?エ?ターのパラメータ
514             */
515            public String getEditorParam() {
516                    return columnData.getEditorParam();
517            }
518    
519            /**
520             * ??タタイプ?パラメータを取得します?
521             *
522             * @og.rev 3.4.0.0 (2003/09/01) 新規追?
523             *
524             * @return      ??タタイプ?パラメータ
525             */
526            public String getDbTypeParam() {
527                    return columnData.getDbTypeParam();
528            }
529    
530            /**
531             * カラ?ールを取得します?
532             *
533             * @og.rev 4.0.0.0 (2005/11/30) 新規追?
534             *
535             * @return      カラ?ール
536             */
537            public String getRoles() {
538                    return columnData.getRoles();
539            }
540    
541            /**
542             * カラ?ブジェクト?ロールモードを返します?
543             *
544             * @og.rev 4.3.0.0 (2008/07/04) ロールモード?ルチ対?
545             *
546             * @return カラ?ブジェクト?ロールモー?
547             */
548            public RoleMode getRoleMode() {
549                    return columnData.getRoleMode();
550            }
551    
552            /**
553             * 接続?IDを返します?
554             *
555             * @return  接続?ID
556             */
557            public String getDbid() {
558                    return dbid;
559            }
560    
561            /**
562             * String引数の??を+1した文字?を返します?
563             * これは、英字?場?A,B,C など)は、B,C,D のように,?桁??コードを
564             * ??します?
565             * ??が数字タイプ?場合?, 数字に変換して?1 します?(桁上がりもあり)
566             * 混在タイプ?場合?,??桁だけを確認して ?1します?
567             * 引数?null の場合と、ゼロ??("")の場合?,引数?そ?まま返します?
568             *
569             * ※ 機?拡張?第?引数に????(数字?日付?を指定する事で?
570             *    引数の??に、任意?値を加算できるようにします?
571             *    ただし?すべての DBTypeではなく?ある程度特定します?
572             *    対象外? DBTypeで、第?引数?null 出な??合?、Exception ?Throwsします?
573             *    第?引数が?null の場合?、従来と同じ?1します?
574             *
575             * @og.rev 5.6.0.3 (2012/01/24) ADD に、引数の値を加算する機?を追?ます?
576             *
577             * @param   value  引数の??
578             * @param   add    ?する文字?(null の場合?、従来と同じ?1 します?)
579             *
580             * @return  引数の??を+1した文字?。また?、任意?値を加算した文字??
581             */
582    //      public String valueAdd( final String value ) {
583            public String valueAdd( final String value,final String add ) {
584    //              return dbType.valueAdd( value );
585    
586                    // DBType の実??関係で、旧メソ?は残しておきます?
587                    if( add == null || add.isEmpty()  ) {
588                            return dbType.valueAdd( value );
589                    }
590                    else {
591                            return dbType.valueAdd( value , add );
592                    }
593            }
594    
595            /**
596             * ??タが登録可能かど?をチェ?します?
597             * ??タがエラーの場合?、そのエラー?を返します?
598             *
599             * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数に追?
600             * @og.rev 3.6.0.7 (2004/11/06) official属?がfalseの場合?チェ?レベルに対応したチェ?を行う?
601             * @og.rev 3.8.0.8 (2005/10/03) 企画改?61200-050921-02 ラベルからHTMLタグを削除する?
602             * @og.rev 5.2.2.0 (2010/11/01) ?処??valueCheck( value , true ) に委譲?
603             *
604             * @param   value       チェ?対象の値
605             *
606             * @return  エラー?  正常時? null
607             * @see         #valueCheck( String , boolean )
608             */
609            public ErrorMessage valueCheck( final String value ) {
610                    return valueCheck( value , true );
611            }
612    
613            /**
614             * ??タが登録可能かど?をチェ?します?
615             * ??タがエラーの場合?、そのエラー?を返します?
616             *
617             * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数に追?
618             * @og.rev 3.6.0.7 (2004/11/06) official属?がfalseの場合?チェ?レベルに対応したチェ?を行う?
619             * @og.rev 3.8.0.8 (2005/10/03) 企画改?61200-050921-02 ラベルからHTMLタグを削除する?
620             * @og.rev 5.2.2.0 (2010/11/01) 厳?チェ?(isStrict=true)するフラグを追?
621             *
622             * @param   value               チェ?対象の値
623             * @param   isStrict    厳?チェ?(isStrict=true)するかど?
624             *
625             * @return  エラー?  正常時? null
626             */
627    //      public ErrorMessage valueCheck( final String value ) {
628            public ErrorMessage valueCheck( final String value , final boolean isStrict ) {
629    
630                    // 3.8.0.8 (2005/10/03) ラベルからHTMLタグを削除する?
631                    String lbl = labelData.getLabel() ;
632                    if( lbl.indexOf( '<' ) >= 0 ) {
633                            lbl = lbl.replaceAll( "<[^>]*>","" );
634                    }
635    
636                    // 5.2.2.0 (2010/11/01) 厳?チェ?(isStrict=true)するフラグを追?
637    //              ErrorMessage errMsg = dbType.valueCheck( lbl,value,columnData.getSizeX(), columnData.getSizeY(),columnData.getDbTypeParam() );
638                    ErrorMessage errMsg = dbType.valueCheck( lbl,value,columnData.getSizeX(), columnData.getSizeY(),columnData.getDbTypeParam() , isStrict );
639                    if( checkLevel >= 0 ) {
640                            // ERR0034:??カラ?ブジェクトには、カラ?ソースが存在しません。name={0} label={1}
641                            errMsg.addMessage( 0,checkLevel,"ERR0034", columnData.getName(),labelData.getLabel() );
642                    }
643                    return errMsg ;
644            }
645    
646            /**
647             * エ?ターで編?れた??タを登録する場合に、データそ?も??
648             * 変換して、実登録??タを作?します?
649             * 例えば,大??みのフィールドなら?大?化します?
650             * 実登録??タの作?は、DBType オブジェクトを利用します?で,
651             * これと DBCellEditor とがアンマッチ?場合?、うまくデータ変換
652             * されな?能性があります?で、注意願います?
653             *
654             * @param   value ?に編?ータとして登録されたデータ
655             *
656             * @return  修正後???(?に??タベ?スに登録する??タ)
657             */
658            public String valueSet( final String value ) {
659                    return dbType.valueSet( value );
660            }
661    
662            /**
663             * action で?されたコマンドを実行して、?の変換を行います?
664             * oldValue(旧??タ)は、?のDBTableModelに設定されて?値です?通常は?
665             * こ?値を使用してカラ?に変換を行います?newValue(新??タ)は、引数で
666             * ?された新しい値です?こ?値には、パラメータを指定して変換方法を
667             * 制御することも可能です?
668             * ??アクションがカラ?処?きな??合?、エラーになります?
669             *
670             * @param   action アクションコマン?
671             * @param   oldValue 入力データ(旧??タ)
672             * @param   newValue 入力データ(新??タ)
673             *
674             * @return      実行後???タ
675             */
676            public String valueAction( final String action,final String oldValue,final String newValue ) {
677                    return dbType.valueAction( action,oldValue,newValue );
678            }
679    
680            /**
681             * ?の設定情報オブジェクトを返します?
682             * こ?オブジェクトを ローカルで書き換えて、DBColumn を作るようにします?
683             *
684             * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig 関係?見直し?
685             * @og.rev 3.4.0.0 (2003/09/01) 表示パラメータ、編?ラメータ、文字パラメータの追??
686             * @og.rev 3.5.5.5 (2004/04/23) size 属?の意味を変更、maxlength 属?を追??
687             * @og.rev 3.5.5.8 (2004/05/20) codeName 属?を追??
688             * @og.rev 3.6.0.7 (2004/11/06) カラ?ソースから作?されたかど?(official属?追?
689             * @og.rev 5.1.8.0 (2010/07/01) すべての属?を設定するよ?します?
690             * @og.rev 5.5.1.0 (2012/04/03) useSLabel対?
691             * @og.rev 5.6.2.3 (2013/03/22) 非表示??設定?noDisplayVal追?
692             *
693             * @return      設定情報オブジェク?
694             */
695            public DBColumnConfig getConfig() {
696                    // 互換性確保?ため、DBColumnConfig の コンストラクタは修正して?せん?
697    
698                    DBColumnConfig config =
699                            new DBColumnConfig(
700                                                    lang                                                    ,
701                                                    columnData.getName()                    ,
702                                                    labelData                                               ,
703                                                    columnData.getClassName()               ,
704                                                    columnData.getMaxlength()               ,
705                                                    String.valueOf( writable )              ,
706                                                    columnData.getRenderer()                ,
707                                                    columnData.getEditor()                  ,
708                                                    codeData                                                ,
709                                                    columnData.getDbType()                  ,
710                                                    defValue                                                ,
711                                                    columnData.getRendererParam()   ,
712                                                    columnData.getEditorParam()             ,
713                                                    columnData.getDbTypeParam()             ,
714                                                    columnData.getRoles()                   ,               // 4.0.0 (2005/11/30)
715                                                    official                                                ,               // 3.6.0.7 (2004/11/06)
716                                                    dbid     ) ;
717                    config.setViewLength( columnData.getViewLength() );
718    
719                    // 5.1.8.0 (2010/07/01) すべての属?を設定するよ?します?
720                    // コンストラクタは修正して??め?セ?ーメソ?経由で渡します?
721                    config.setRendererAttributes( rendAttri );
722                    config.setEditorAttributes( editAttri );
723                    config.setAddNoValue( addNoValue );
724                    config.setEventColumn( eventColumn );
725                    config.setRawEditParameter( rawEditParameter );
726                    config.setRawRendParameter( rawRendParameter );
727                    config.setEventURL( eventURL );
728    
729                    config.setUseSLabel( useSLabel );                       // 5.5.1.0 (2012/04/03)
730                    config.setNoDisplayVal( noDisplayVal );         // 5.6.2.3 (2013/03/22) 非表示??設?
731    
732                    return config ;
733            }
734    
735            /**
736             * 表示用レン?ーの追??を返します?
737             *
738             * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig オブジェクト??キープを?
739             *
740             * @return   属?リス?
741             */
742            public Attributes getRendererAttributes() {
743                    return rendAttri ;
744            }
745    
746            /**
747             * 編?エ?ター用の追??を返します?
748             *
749             * @og.rev 3.1.0.0 (2003/03/20) DBColumnConfig オブジェクト??キープを?
750             *
751             * @return   属?リス?
752             */
753            public Attributes getEditorAttributes() {
754                    return editAttri ;
755            }
756    
757            /**
758             * メニューに空の選択リストを追?るかど?を取得します?
759             *
760             * @og.rev 3.5.5.7 (2004/05/10) 新規追?
761             *
762             * @return      空の選択リストを追?るかど?(true:追??false:追?な?
763             */
764            public boolean isAddNoValue() {
765                    return addNoValue ;
766            }
767    
768            /**
769             * こ?カラ?ブジェクトがカラ?ソースより正式に作られたかど?を取得します?
770             * カラ?ソースが無??合?、仮オブジェクトか??タベ?スメタ??タより作?されます?
771             * そ?場合?、チェ?機?が緩くなるため?正式なカラ?ブジェクトと区別する為に
772             * こ?属?を持ちます?
773             *
774             * @og.rev 3.6.0.7 (2004/11/06) 新規追?
775             *
776             * @return      正式に作られたかど?(true:正?false:暫?
777             */
778            public boolean isOfficial() {
779                    return official ;
780            }
781    
782            /**
783             * カラ??ラベル??タオブジェクトを返します?
784             *
785             * @return  カラ??ラベル??タオブジェク?
786             */
787            public LabelData getLabelData() {
788                    return labelData;
789            }
790    
791            /**
792             * カラ??コードデータオブジェクトを返します?
793             * コードデータが存在しな??合?、null を返します?
794             * 受け取り側で、null かど?判定してから使用してください?
795             *
796             * @og.rev 5.2.1.0 (2010/10/01) codeData ?null でも?そ?まま返します?
797             *
798             * @return  カラ??コードデータオブジェク?
799             */
800            public CodeData getCodeData() {
801    //              if( codeData == null ) {
802    //                      String errMsg = "コードリソースが定義されて?せん? + HybsSystem.CR
803    //                                              + "name=[" + getName() + "],label=[" + getLabel() + "]" ;
804    //                      throw new HybsSystemException( errMsg );
805    //              }
806                    return codeData;
807            }
808    
809            /**
810             * ?入力サイズ(maxlength)より、実際のフィールド?サイズを求めます?
811             *
812             * maxlength : colums_maxsize ?? ?size="maxlength"  変換しません?
813             *
814             * ただし?maxlength が?colums_maxsize を?る?合?、colums_maxsize とします?
815             *
816             * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソ??XHTMLTag から DBColumn へ移?
817             * @og.rev 4.0.0.0 (2007/02/05) ADJUSTMENT 処??します?(CSSにて対?
818             *
819             * @param maxlength       実際の?桁数
820             * @param colums_maxsize 表示上??桁数?
821             *
822             * @return 表示すべきサイズ
823             * @see #getFieldSize( int )
824             */
825            public int getFieldSize( final int maxlength,final int colums_maxsize ) {
826                    int size = maxlength;
827    
828                    if( size <= 0 || size > colums_maxsize ) {
829                            size = colums_maxsize;
830                    }
831    
832                    return size;
833            }
834    
835            /**
836             * ?入力サイズ(maxlength)より、実際のフィールド?サイズを求めます?
837             *
838             * maxlength : colums_maxsize ?? ?size="maxlength"  変換しません?
839             *
840             * ただし?maxlength が?COLUMNS_MAXSIZE を?る?合?、COLUMNS_MAXSIZE とします?
841             *
842             * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソ??XHTMLTag から DBColumn へ移?
843             * @og.rev 4.0.0.0 (2007/02/05) ADJUSTMENT 処??します?(CSSにて対?
844             *
845             * @param maxlength       実際の?桁数
846             *
847             * @return 表示すべきサイズ
848             * @see #getFieldSize( int ,int )
849             */
850            public int getFieldSize( final int maxlength ) {
851                    return getFieldSize( maxlength,COLUMNS_MAXSIZE );
852            }
853    
854            /**
855             * コードリソースSelectionオブジェクトを返します?
856             *
857             * @og.rev 4.0.0.0 (2007/11/02) 新規追?
858             * @og.rev 5.7.3.0 (2014/02/07) null 対?コードリソースの設定不良?
859             *
860             * @return コードSelectionオブジェク?
861             */
862            public Selection getSelection() {
863            // 5.6.1.1 (2013/02/08) 暫定?置。とりあえずエラーは発生させな??
864            //      if( selection == null ) {
865            //              String errMsg = "コードリソースが定義されて?せん? + HybsSystem.CR
866            //                                      + "name=[" + getName() + "],label=[" + getLabel() + "]" ;       // 5.1.8.0 (2010/07/01) errMsg 修正
867            //              throw new HybsSystemException( errMsg );
868            //      }
869    
870                    // 5.7.3.0 (2014/02/07) null 対?コードリソースの設定不良?
871                    if( selection == null ) {
872                            String errMsg = "clm=[" + getName() + "],label=[" + getLabel() + "]のコードリソースが定義されて?せん? ;
873                            System.err.println( "警告? + errMsg );
874                            return SelectionFactory.newSelection( "NULL",errMsg );
875                    }
876    
877                    return selection ;
878            }
879    
880            /**
881             * イベントカラ?親カラ?
882             *
883             * @og.rev 4.3.6.0 (2009/04/01)
884             *
885             * @return イベントカラ?
886             */
887            public String getEventColumn() {
888                    return eventColumn ;
889            }
890    
891    //      /**
892    //       * {&#064;XXXX}を変換して??態?編?ラメータを返す
893    //       *
894    //       * @og.rev 4.3.6.0 (2009/04/01)
895    //       *
896    //       * @return 生編?ラメータ
897    //       */
898    //      public String getRawParam() {
899    //              return rawEditParameter ;
900    //      }
901    
902            /**
903             * {&#064;XXXX}を変換して??態?編?ラメータを返します?
904             *
905             * @og.rev 4.3.6.0 (2009/04/01)
906             *
907             * @return 生編?ラメータ
908             */
909            public String getRawEditParam() {
910                    return rawEditParameter ;
911            }
912    
913            /**
914             * {&#064;XXXX}を変換して??態?編?ラメータを返します?
915             *
916             * @og.rev 5.1.7.0 (2010/06/01) 動的プル?ン実?直?
917             *
918             * @return 生表示パラメータ
919             */
920            public String getRawRendParam() {
921                    return rawRendParameter ;
922            }
923    
924            /**
925             * eventColumn利用時にJSで利用するURL
926             *
927             * @og.rev 4.3.6.0 (2009/04/01)
928             *
929             * @return イベン?RL
930             */
931            public String getEventURL() {
932                    return eventURL ;
933            }
934    
935            /**
936             * 引数のタグ??に対して、イベントカラ??実行に?なspanタグを付加した
937             * ??を返します?
938             *
939             * @param tag タグ??
940             * @param initVal 子カラ??初期値
941             * @param writable タグの要?書き込み可能かど?
942             *
943             * @return spanタグを付加したタグ??
944             */
945            public String getEventColumnTag( final String tag, final String initVal, final boolean writable ) {
946                    return getEventColumnTag( tag, initVal, -1, writable );
947            }
948    
949            /**
950             * 引数のタグ??に対して、イベントカラ??実行に?なspanタグを付加した
951             * ??を返します?
952             *
953             * @param tag タグ??
954             * @param initVal 子カラ??初期値
955             * @param row 行番号
956             * @param writable タグの要?書き込み可能かど?
957             *
958             * @return spanタグを付加したタグ??
959             */
960            public String getEventColumnTag( final String tag, final String initVal, final int row, final boolean writable ) {
961                    TagBuffer span = new TagBuffer( "span" );
962                    span.add( "class", HybsSystem.EVENT_COLUMN_CLASS );
963    //              span.add( HybsSystem.EVENT_COLUMN_ID,  columnData.getName() + ( row < 0 ? "" : HybsSystem.JOINT_STRING + String.valueOf( row ) ) );
964                    span.add( HybsSystem.EVENT_COLUMN_ID,  columnData.getName() + ( row < 0 ? "" : HybsSystem.JOINT_STRING + row ) );
965                    span.add( HybsSystem.EVENT_COLUMN_INITVAL, initVal );
966                    span.add( HybsSystem.EVENT_COLUMN_WRITABLE, String.valueOf( writable ) );
967                    span.setBody( tag );
968                    return span.makeTag();
969            }
970    
971            /**
972             * セ?されて?表示パラメータ、編?ラメータに"{&#064;XXXX}"が含まれて??パラメーターのパ?スが?か)?
973             * 返します?
974             *
975             * @return "{&#064;XXXX}"が含まれて??含まれて?場?rue)
976             */
977            public boolean isNeedsParamParse() {
978                    return  ( columnData.getRendererParam() != null && columnData.getRendererParam().indexOf( "{@" ) >= 0 )
979                            ||      ( columnData.getEditorParam() != null && columnData.getEditorParam().indexOf( "{@" ) >= 0 );
980            }
981    
982            /**
983             * ラベル短ベ?スのメニューにするかど?
984             *
985             * @og.rev 5.5.1.0 (2012/04/03)
986             *
987             * @return イベントカラ?
988             */
989            public String getUseSLabel() {
990                    return useSLabel ;
991            }
992    
993            /**
994             * 非表示??を返します?
995             *
996             * これは、例えば、数字型の場合?? がデフォルトなどの場合?
997             * あえて表示したくな?どのケースに使?す?
998             * そ?ような状況が設定されて???合?、null が返されます?
999             *
1000             * @og.rev 5.6.2.3 (2013/03/22) 新規追?
1001             *
1002             * @return 非表示??
1003             */
1004            public String getNoDisplayVal() {
1005                    return noDisplayVal ;
1006            }
1007    }