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