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