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.resource; 017 018import static org.opengion.fukurou.util.StringUtil.nval2; 019 020/** 021 * systemId に対応したカラムデータを作成します。 022 * 023 * カラムデータは、項目(CLM)に対して、各種カラム情報を持っています。 024 * エンジン内部で使用している DBColumn オブジェクトは、RENDERER や EDITOR など 025 * 実際にはオブジェクトで管理していますが、この ColumnData では、それらのキーとなる 026 * 文字列を持っています。実際に DBColumn オブジェクトの構築時に、各属性オブジェクトを 027 * 生成(または、キャッシュから取り出し)ます。 028 * 029 * カラムデータを作成する場合は、同一カラムで、作成区分(KBSAKU)違いの場合は、 030 * 最も大きな作成区分を持つコードを使用します。 031 * 作成区分(KBSAKU)は、0:システム予約、1:アプリ設定、2:ユーザー設定 という具合に 032 * カスタマイズの度合いに応じて大きな数字を割り当てることで、キー情報を上書き修正 033 * することが可能になります。(削除することは出来ません。) 034 * 035 * @og.rev 4.0.0.0 (2004/12/31) 新規作成 036 * @og.group リソース管理 037 * 038 * @version 4.0 039 * @author Kazuhiko Hasegawa 040 * @since JDK5.0, 041 */ 042public final class ColumnData { 043 044 /** 内部データのカラム番号 {@value} */ 045 public static final int CLM = 0 ; 046 /** 内部データのカラム番号 {@value} */ 047 public static final int CLS_NAME = 1 ; 048 /** 内部データのカラム番号 {@value} */ 049 public static final int USE_LENGTH = 2 ; 050 /** 内部データのカラム番号 {@value} */ 051 public static final int VIEW_LENGTH = 3 ; 052 /** 内部データのカラム番号 {@value} */ 053 public static final int RENDERER = 4 ; 054 /** 内部データのカラム番号 {@value} */ 055 public static final int EDITOR = 5 ; 056 /** 内部データのカラム番号 {@value} */ 057 public static final int DBTYPE = 6 ; 058 /** 内部データのカラム番号 {@value} */ 059 public static final int DATA_DEFAULT = 7 ; 060 /** 内部データのカラム番号 {@value} */ 061 public static final int LABEL_CLM = 8 ; 062 /** 内部データのカラム番号 {@value} */ 063 public static final int CODE_CLM = 9 ; 064 /** 内部データのカラム番号 {@value} */ 065 public static final int CLM_PARAM = 10 ; 066 /** 内部データのカラム番号 {@value} */ 067 public static final int RENDERER_PARAM = 11 ; 068 /** 内部データのカラム番号 {@value} */ 069 public static final int EDITOR_PARAM = 12 ; 070 /** 内部データのカラム番号 {@value} */ 071 public static final int TYPE_PARAM = 13 ; 072 /** 内部データのカラム番号 {@value} */ 073 public static final int ROLES = 14 ; 074 /** 内部データのカラム番号 {@value} */ 075 public static final int FIELD_SIZE = 15 ; // 6.2.0.0 (2015/02/27) フィールドサイズ 追加 076 077 /** 内部データのカラム数 {@value} */ 078 public static final int DATA_SIZE = 16 ; // 6.2.0.0 (2015/02/27) 件数を増やす 079 080 /** リソース読み込みのために一時利用 4.3.5.7 (2009/03/22) */ 081 /* default */ static final int FG_LOAD = 16 ; // 6.2.0.0 (2015/02/27) 位置をずらす 082 /** FGLOAD の読み込み済み設定用のUNIQ 6.3.1.1 (2015/07/10) */ 083 /* default */ static final int UNIQ = 17 ; 084 /** FGLOAD の読み込み済み設定用のSYSTEM_ID 6.3.1.1 (2015/07/10) */ 085 /* default */ static final int SYSTEM_ID = 18 ; 086 087 /** 内部データのカラム番号 {@value} */ 088 public static final int KBSAKU = 19 ; // 7.4.2.0 (2021/05/18) 内部的に使ってないが定義しておく 089 /** 内部データのカラム番号 {@value} */ 090 public static final int SNO = 20 ; // 7.2.6.1 (2020/07/17) 内部的に使ってないが定義しておく 091 092 private final String name ; // カラム名 093 private final String className ; // データの属性(VARCHAR2,NUMBER...) 094 private final String maxlength ; // 最大桁数 095 private final String viewLength ; // 表示桁数 096 private final String rawSize ; // 8.5.3.0 (2023/09/08) fieldSizeのオリジナル入力枠サイス 097 private final String fieldSize ; // 6.2.0.0 (2015/02/27) 入力枠サイズ 098 private final String renderer ; // 表示種別 099 private final String editor ; // 編集種別 100 private final String dbType ; // 文字種別(S9,X...) 101 private final String dataDef ; // データのデフォルト値 102 private final String labelClm ; // ラベルカラム 103 private final String codeClm ; // コードカラム 104 private final String columnPrm ; // カラムパラメータ 105 private final String rendererPrm ; // 表示パラメータ 106 private final String editorPrm ; // 編集パラメータ 107 private final String dbTypePrm ; // 文字パラメータ 108 private final String roles ; // カラムロール 109 private final RoleMode roleMode ; // 4.3.0.0 (2008/07/04) ロールズとモードを管理するオブジェクト 110 111 private final int totalSize ; // 総桁数(小数点も含む) 112 private final int sizeX ; // カラムの文字桁数(整数部) 113 private final int sizeY ; // カラムの文字桁数(小数部) 114 private final boolean official ; // リソースDBから作成されたかどうか 115 116 /** 117 * 配列文字列のデータを元に、ColumnDataオブジェクトを構築します。 118 * このコンストラクタは、他のパッケージから呼び出せないように、 119 * パッケージプライベートにしておきます。 120 * このコンストラクタは、DBリソースファイルを想定しています。 121 * 122 * @og.rev 4.3.0.0 (2008/07/04) ロールモードマルチ対応 123 * @og.rev 5.1.6.0 (2010/05/01) DBTypeの初期値を "XK" とします。 124 * @og.rev 5.2.2.0 (2010/11/01) パラメーターもVer3互換のためNVAL2で処理します。 125 * @og.rev 5.5.8.5 (2012/11/27) 編集パラメータで、"=" と記述されている場合は、表示パラメータを利用する。 126 * @og.rev 6.1.0.0 (2014/12/26) カラムの表示桁数(小数部)対応 127 * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする) 128 * @og.rev 8.3.1.0 (2022/10/14) 入力枠サイズの復活(※RELEASE-NOTES_7.txtに7.2.7.0の対応が「一旦保留」とコメントされている為) 129 * 130 * @param data CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH, 131 * RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM, 132 * CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES,FIELD_SIZE 133 * 134 */ 135 public ColumnData( final String[] data ) { 136 name = data[CLM].intern() ; // カラム名 137 className = data[CLS_NAME].intern() ; // データの属性 138 maxlength = data[USE_LENGTH].replace( '.',',' ).intern(); // 最大桁数 139 renderer = nval2( data[RENDERER] , null ) ; // 表示種別 140 editor = nval2( data[EDITOR] , null ) ; // 編集種別 141 dbType = nval2( data[DBTYPE] , "XK" ) ; // 文字種別 5.1.6.0 (2010/05/01) 142 dataDef = nval2( data[DATA_DEFAULT] , "" ) ; // データのデフォルト値 143 labelClm = nval2( data[LABEL_CLM] , name ) ; // ラベルカラム 144 codeClm = nval2( data[CODE_CLM] , name ) ; // コードカラム 145 columnPrm = nval2( data[CLM_PARAM] , null ) ; // カラムパラメータ 146 rendererPrm = nval2( data[RENDERER_PARAM], null ) ; // 表示パラメータ 147 dbTypePrm = nval2( data[TYPE_PARAM] , null ) ; // 文字パラメータ 148 roles = nval2( data[ROLES] , null ) ; // カラムロール 149 rawSize = nval2( data[FIELD_SIZE] , null ) ; // 8.5.3.0 (2023/09/08) fieldSizeのオリジナル入力枠サイス 150// fieldSize = nval2( data[FIELD_SIZE] , null ) ; // 6.2.0.0 (2015/02/27) 入力枠サイズ 8.3.1.0 (2022/10/14) Delete 151 official = true; // リソースDBから作成されたかどうか 152 153 // 6.1.0.0 (2014/12/26) カラムの表示桁数(小数部)対応と、カンマ置換処理 154 final String viewLen = nval2( data[VIEW_LENGTH] , null ) ; 155 viewLength = viewLen == null ? null : viewLen.replace( '.',',' ).intern(); 156 157 // // 7.2.7.0 (2020/08/07) fieldSize には、viewLength を設定する(昔に戻る)。 158 // if( viewLength != null && viewLength.indexOf( ',' ) > 0 ) { // カンマを含む場合は、10桁固定にします。 159 // fieldSize = "10" ; 160 // } 161 // else { 162 // fieldSize = viewLength; 163 // } 164 // 8.3.1.0 (2022/10/14) 入力枠サイズの復活(※RELEASE-NOTES_7.txtに一旦保留とコメントされている) 165 final String fSize; 166 if( viewLength != null && viewLength.indexOf( ',' ) > 0 ) { // カンマを含む場合 167 final String[] fSizeAry = viewLength.split(","); 168 fSize = String.valueOf(Integer.parseInt(fSizeAry[0]) + Integer.parseInt(fSizeAry[1]) +1); 169 } 170 else { 171 fSize = viewLength; 172 } 173 fieldSize = nval2( data[FIELD_SIZE] , fSize ) ; // 入力枠サイズ 174 175 // 5.5.8.5 (2012/11/27) 編集パラメータで、"=" と記述されている場合は、表示パラメータを利用する。 176 final String tempEditPrm = nval2( data[EDITOR_PARAM], null ) ; 177 if( "=".equals( tempEditPrm ) ) { 178 editorPrm = rendererPrm ; 179 } 180 else { 181 editorPrm = tempEditPrm ; 182 } 183 184 roleMode = RoleMode.newInstance( roles ); // ロールモード 185 186 // x,y 形式の場合、x + 2 桁で表されます。(マイナス記号と小数点記号) 187 // 7,3 は、 xxxx,yyy のフォーマットで、データ長は、9 になります。 188 final int ch = maxlength.indexOf( ',' ) ; 189 if( ch > 0 ) { 190 sizeY = Integer.parseInt( maxlength.substring( ch+1 ) ); 191 sizeX = Integer.parseInt( maxlength.substring( 0,ch ) ) - sizeY; 192 totalSize = sizeX + sizeY+ 2; 193 } 194 else { 195 sizeY = 0; 196 sizeX = Integer.parseInt( maxlength ); 197 if( "S9".equals( dbType ) ) { 198 totalSize = sizeX + 1; // 数字型の場合は、マイナス記号分を加える。 199 } 200 else { 201 totalSize = sizeX; 202 } 203 } 204 } 205 206 /** 207 * カラム名を返します。 208 * 209 * @return カラム名 210 */ 211 public String getName() { return name; } 212 213 /** 214 * カラムのデータの属性を返します。 215 * 216 * @return カラムのデータの属性 217 */ 218 public String getClassName() { return className; } 219 220 /** 221 * フィールドの使用桁数を返します。 222 * 小数指定の場合は、"7,3" のようなカンマで整数部、小数部を区切った書式になります。 223 * 7,3 は、 xxxx,yyy のフォーマットで、整数部4桁、小数部3桁を意味します。 224 * 225 * @return 使用桁数 226 */ 227 public String getMaxlength() { return maxlength; } 228 229 /** 230 * フィールドのデータ長を返します。 231 * 通常は、整数型の文字列とデータ長は同じですが、小数点を表すデータ長は 232 * x.y 形式の場合、x + 1 桁で表されます。 233 * 6.2 は、 xxxx.yy のフォーマットです。 234 * 235 * @return データ長定義文字列 236 */ 237 public int getTotalSize() { return totalSize; } 238 239 /** 240 * フィールドの整数部のデータ長を返します。 241 * 242 * @return データ長定義文字列 243 */ 244 public int getSizeX() { return sizeX ; } 245 246 /** 247 * フィールドの小数部のデータ長を返します。 248 * 249 * @return データ長定義文字列 250 */ 251 public int getSizeY() { return sizeY ; } 252 253 /** 254 * 文字列の表示文字数を返します。 255 * 256 * これは、テキストフィールドのサイズではなく、Renderer系の表示に使用する 257 * 文字数指定に使われます。 258 * 無指定の場合は、null が返されます。 259 * 260 * @return 表示文字数 261 */ 262 public String getViewLength() { return viewLength; } 263 264 /** 265 * フィールドのオリジナル入力枠サイズを返します。 266 * 267 * これは、設定された値そのものを返しますので、未設定の時は、null が返ります。 268 * 269 * テキストフィールドのサイズに該当し、 270 * #getFieldSize() の初期値が設定されていない値になります。 271 * つまり、最大入力サイズ(maxlength) や 272 * システム定数の HTML_COLUMNS_MAXSIZE や HTML_VIEW_COLUMNS_MAXSIZE で 273 * 指定された値が使われないことです。 274 * 275 * @og.rev 8.5.3.0 (2023/09/08) DynamicAttributes対応(新規作成) 276 * 277 * @return オリジナル入力枠サイズ 278 */ 279 public String getRawSize() { return rawSize; } 280 281 /** 282 * フィールドの入力枠サイズを返します。 283 * 284 * テキストフィールドのサイズに該当します。 285 * 何も指定しない場合は、null が返ります。 286 * その場合の、入力枠サイズは、maxlength が使用されます。 287 * ただし、桁数が大きい場合は、システム定数の HTML_COLUMNS_MAXSIZE や、 288 * HTML_VIEW_COLUMNS_MAXSIZE で指定された値が使われます。 289 * それらの値よりも、ここで取得 した fieldSize が優先されます。 290 * 291 * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする) 292 * 293 * @return 入力枠サイズ 294 */ 295 public String getFieldSize() { return fieldSize; } 296 297 /** 298 * 表示種別を返します。 299 * 300 * @return 表示種別の文字列 301 */ 302 public String getRenderer() { return renderer; } 303 304 /** 305 * 編集種別を返します。 306 * 307 * @return 編集種別 308 */ 309 public String getEditor() { return editor; } 310 311 /** 312 * 文字種別を返します。 313 * 314 * @return 文字種別 315 */ 316 public String getDbType() { return dbType; } 317 318 /** 319 * ラベルカラムを返します。 320 * 321 * @return ラベルカラム 322 */ 323 public String getLabelColumn() { return labelClm; } 324 325 /** 326 * コードカラムを返します。 327 * 328 * @return コードカラム 329 */ 330 public String getCodeColumn() { return codeClm; } 331 332 /** 333 * データのデフォルト値を返します。 334 * 335 * @return データのデフォルト値 336 */ 337 public String getDefault() { return dataDef; } 338 339 /** 340 * カラムのパラメータを取得します。 341 * 342 * @return カラムパラメータ 343 */ 344 public String getColumnParam() { return columnPrm; } 345 346 /** 347 * 表示用レンデラーのパラメータを取得します。 348 * 349 * @return 表示パラメータ 350 */ 351 public String getRendererParam() { return rendererPrm; } 352 353 /** 354 * 編集用エディターのパラメータを取得します。 355 * 356 * @return 編集パラメータ 357 */ 358 public String getEditorParam() { return editorPrm; } 359 360 /** 361 * データタイプのパラメータを取得します。 362 * 363 * @return データタイプのパラメータ 364 */ 365 public String getDbTypeParam() { return dbTypePrm; } 366 367 /** 368 * カラムロールを取得します。 369 * 370 * @return カラムロール 371 */ 372 public String getRoles() { return roles; } 373 374 /** 375 * カラムオブジェクトのロールモードを返します。 376 * 377 * @og.rev 4.3.0.0 (2008/07/04) ロールモードマルチ対応 378 * 379 * @return カラムオブジェクトのロールモード 380 */ 381 public RoleMode getRoleMode() { return roleMode; } 382 383 /** 384 * リソースDBから作成されたかどうかを返します。 385 * 正式な場合は、true / リソースになく、独自に作成された場合は、false になります。 386 * 387 * @return リソースDBから作成されたかどうか 388 */ 389 public boolean isOfficial() { return official; } 390 391 /** 392 * 内部データの文字列配列を返します。 393 * 394 * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする) 395 * 396 * @return 内部データの文字列配列 397 */ 398 public String[] getColumnData() { 399 final String[] data = new String[DATA_SIZE]; // 8.5.4.2 (2024/01/12) PMD 7.0.0 LocalVariableCouldBeFinal 400 401 data[CLM ] = name ; 402 data[CLS_NAME ] = className ; 403 data[USE_LENGTH ] = maxlength ; 404 data[VIEW_LENGTH ] = viewLength ; 405 data[RENDERER ] = renderer ; 406 data[EDITOR ] = editor ; 407 data[DBTYPE ] = dbType ; 408 data[DATA_DEFAULT ] = dataDef ; 409 data[LABEL_CLM ] = labelClm ; 410 data[CODE_CLM ] = codeClm ; 411 data[CLM_PARAM ] = columnPrm ; 412 data[RENDERER_PARAM ] = rendererPrm ; 413 data[EDITOR_PARAM ] = editorPrm ; 414 data[TYPE_PARAM ] = dbTypePrm ; 415 data[ROLES ] = roles ; 416 data[FIELD_SIZE ] = fieldSize ; // 6.2.0.0 (2015/02/27) 417 418 return data ; 419 } 420}