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