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