001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.hayabusa.resource; 017 018 import org.opengion.hayabusa.common.HybsSystem ; 019 import java.util.Map; 020 import java.util.HashSet; 021 import java.util.HashMap; 022 import java.util.LinkedHashMap ; 023 import java.util.Arrays; 024 import static org.opengion.fukurou.util.StringUtil.nval2; 025 026 /** 027 * systemId と lang に対応したコードデータを作?します? 028 * 029 * コードデータは??目(CLM)に対して、?のコー?CODE)を持って?す? 030 * こ??のコードを表示?持つことで、?ル?ンメニュー等?表示??します? 031 * 032 * コードデータを作?する場合?、同??目・コードで、作?区???場合?? 033 * ?大きな作?区?持つコードを使用します? 034 * 作?区?KBSAKU)は、他?リソースと異なり?基本?は使用しません? 035 * これは??常は?単位に作?区?持つべきところを?コード単位でしか 036 * 持てな?ータベ?スの設計になって?為です?アプリケーション側で設定条件? 037 * きちんと管?れ?、作?区?使用できますが、?にはお奨めできません? 038 * 039 * @og.rev 4.0.0.0 (2004/12/31) 新規作? 040 * @og.group リソース管? 041 * 042 * @version 4.0 043 * @author Kazuhiko Hasegawa 044 * @since JDK5.0, 045 */ 046 public final class CodeData { 047 private final boolean USE_MULTI_KEY_SELECT = HybsSystem.sysBool( "USE_MULTI_KEY_SELECT" ) ; 048 049 private static final String SPC = ""; 050 051 /** ???タのカラ?号 {@value} */ 052 public static final int CLM = 0 ; 053 public static final int CODE = 1 ; 054 public static final int LNAME = 2 ; 055 public static final int SNAME = 3 ; 056 public static final int CODELVL = 4 ; 057 public static final int CODEGRP = 5 ; 058 public static final int CODE_PARAM = 6 ; 059 public static final int ROLES = 7 ; 060 public static final int SYSTEM_ID = 8 ; 061 public static final int KBSAKU = 9 ; 062 public static final int RSNAME = 10; // 4.3.8.0 (2009/08/01) spanが付かな?前短 063 public static final int RLNAME = 11; // 5.6.8.2 (2013/09/20) rawLongLabel対? 064 // public static final int MAX_LENGTH = 11; // 5.1.9.0 (2010/08/01) 配?の定義 065 public static final int MAX_LENGTH = 12; // 5.6.8.2 (2013/09/20) 変更 066 067 private final String column ; // ? 068 private final String[] code ; // コー? 069 private final String[] longLabel ; // コード名称(長) 070 private final String[] shortLabel ; // コード名称(短) 071 private final String[] codelebel ; // コードレベル ("1":option要??"0":optgroup要? 072 private final String[] codeGroup ; // コードグルー?(??グループキーで選別する) 073 private final String[] codeParam ; // コードパラメータ 074 private final String[] roles ; // ロール 075 private final boolean[] isUseFlag ; // 5.1.9.0 (2010/08/01) サブセ?化するとき?有効/無効を指? 076 private final int size ; // コード?目数 077 private final boolean isMultiSelect ; // マルチセレク? 078 private final boolean isUseLebel ; // 5.1.9.0 (2010/08/01) コードレベル機?を利用するかど? 079 private final boolean isUseParam ; // 5.1.9.0 (2010/08/01) パラメータを利用するかど? 080 private final boolean isUseGroup ; // 5.1.9.0 (2010/08/01) コードグループを利用するかど? 081 private final boolean isUseRoleMode ; // 5.1.9.0 (2010/08/01) ロールモードを利用するかど? 082 083 private final RoleMode[] roleModes ; // 4.3.0.0 (2008/07/04) ロールズとモードを管?るオブジェク? 084 private final String[] rawShortLabel; // 4.3.8.0 (2009/08/01) spanが付かな?前短 085 private final String[] rawLongLabel; // 5.6.8.2 (2013/09/20) 未?名前長? 086 087 /** 088 * 配???の??タを?に、CodeDataオブジェクトを構築します? 089 * こ?コンストラクタは、他?パッケージから呼び出せな??? 090 * パッケージプライベ?トにしておきます? 091 * こ?コンストラクタは、?スタリソースファイルを想定して?す? 092 * 093 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 094 * 095 * @param clm カラ? 096 * @param data CLM,CODE,LNAME,SNAME,CODELVL,CODEGRP,CODE_PARAM,ROLES,SYSTEM_ID,KBSAKU,RSNAMEの?の??配?を?? 097 * @param useFlag 使用フラグ配?(サブセ?化するとき?有効/無効を指? 098 */ 099 CodeData( final String clm, final Map<String,String[]> data , final boolean[] useFlag ) { 100 this( clm,data ); 101 102 if( useFlag != null && size == useFlag.length ) { 103 for( int i=0; i<size; i++ ) { 104 isUseFlag[i] = useFlag[i]; 105 } 106 } 107 } 108 109 /** 110 * 配???の??タを?に、CodeDataオブジェクトを構築します? 111 * こ?コンストラクタは、他?パッケージから呼び出せな??? 112 * パッケージプライベ?トにしておきます? 113 * こ?コンストラクタは、?スタリソースファイルを想定して?す? 114 * 115 * @og.rev 4.3.0.0 (2008/07/04) ロールモード?ルチ対? 116 * @og.rev 4.3.8.0 (2009/08/01) rawShortLabel追? 117 * @og.rev 4.3.8.0 (2009/08/01) グループ機?とパラメータの判定?isUseFlag フラグの追? 118 * @og.rev 5.2.2.0 (2010/11/01) "_" の取り扱??変更 119 * @og.rev 5.6.8.2 (2103/09/20) rawlongLabel追? 120 * 121 * @param clm カラ? 122 * @param data CLM,CODE,LNAME,SNAME,CODELVL,CODEGRP,CODE_PARAM,ROLES,SYSTEM_ID,KBSAKU,RSNAMEの?の??配?を?? 123 */ 124 CodeData( final String clm, final Map<String,String[]> data) { 125 column = clm; 126 127 size = data.size(); 128 String[] cdKeys = data.keySet().toArray( new String[size] ); 129 130 code = new String[size]; 131 shortLabel = new String[size]; 132 longLabel = new String[size]; 133 codelebel = new String[size]; 134 codeGroup = new String[size]; 135 codeParam = new String[size]; 136 roles = new String[size]; 137 roleModes = new RoleMode[size]; 138 isUseFlag = new boolean[size]; // 5.1.9.0 (2010/08/01) サブセ?フラグの追? 139 rawShortLabel = new String[size]; 140 rawLongLabel = new String[size]; // 5.6.8.2 (2103/09/20) 141 142 // ?文字目の重?定により、?ルチセレクト?可否を判断します? 143 HashSet<String> set = new HashSet<String>(); 144 boolean isSel = USE_MULTI_KEY_SELECT; // 判定??行う。false なら判定??行わな?? 145 146 // 5.1.9.0 (2010/08/01) コードレベル、コードグループ?パラメータ、ロールの使用可否のフラグ 147 boolean isLbl = false; 148 boolean isPrm = false; 149 boolean isRole = false; 150 boolean isGrp = false; 151 152 for( int i=0; i<size; i++ ) { 153 String[] vals = data.get( cdKeys[i] ); 154 155 code[i] = nval2( vals[CODE],SPC ); 156 157 String lname = nval2( vals[LNAME],SPC ) ; 158 longLabel[i] = lname; 159 160 // null ?ゼロ?? : LNAME をセ? 161 // "_" : ゼロ?? 162 // それ以? : そ?まま SNAME をセ? 163 // shortLabel[i] = nval2( vals[SNAME] ,lname ); 164 shortLabel[i] = nval2( vals[SNAME] ,lname , SPC ); // 5.2.2.0 (2010/11/01) 165 166 codelebel[i] = nval2( vals[CODELVL] , SPC ) ; 167 codeGroup[i] = nval2( vals[CODEGRP] , SPC ) ; 168 codeParam[i] = nval2( vals[CODE_PARAM], SPC ) ; 169 roles[i] = nval2( vals[ROLES] , SPC ) ; 170 171 // 5.1.9.0 (2010/08/01) コードレベル機?と、パラメータの使用判? 172 if( !isLbl ) { isLbl = "0".equals( codelebel[i] ); } 173 if( !isPrm ) { isPrm = ! SPC.equals( codeParam[i] ); } 174 if( !isRole ) { isRole = ! SPC.equals( roles[i] ); } 175 if( !isGrp ) { isGrp = ! SPC.equals( codeGroup[i] ); } 176 177 roleModes[i] = RoleMode.newInstance( roles[i] ); // ロールモー? 178 // rawShortLabel[i] = nval2( vals[RSNAME] , lname ); // 4.3.8.0 (2009/08/01) spanが付かな?前短 179 rawShortLabel[i] = nval2( vals[RSNAME] , lname , SPC ); // 5.2.2.0 (2010/11/01) 180 rawLongLabel[i] = nval2( vals[RLNAME] , lname , SPC ); // 5.6.8.2 (2013/09/20) 181 182 if( isSel && lname.length() > 0 ) { 183 isSel = set.add( lname.substring(0,1) ); // 重?は false 184 } 185 } 186 187 Arrays.fill( isUseFlag,true ); // 5.1.9.0 (2010/08/01) サブセ?フラグの追? 188 189 isMultiSelect = ( USE_MULTI_KEY_SELECT && ! isSel ) ; // flag の反転に注? 190 isUseLebel = isLbl; // 5.1.9.0 (2010/08/01) コードレベル機?を利用するかど? 191 isUseParam = isPrm; // 5.1.9.0 (2010/08/01) パラメータを利用するかど? 192 isUseRoleMode = isRole; // 5.1.9.0 (2010/08/01) ロールモードを利用するかど? 193 isUseGroup = isGrp; // 5.1.9.0 (2010/08/01) コードグループを利用するかど? 194 } 195 196 /** 197 * コードデータのキーを返します? 198 * 199 * @return コードデータのキー 200 */ 201 public String getColumn() { return column; } 202 203 /** 204 * コードデータのキーを返します? 205 * 206 * @param seqNo 表示? 207 * 208 * @return コードデータのキー 209 */ 210 public String getCodeKey( final int seqNo ) { return code[seqNo] ; } 211 212 /** 213 * コードデータの表示名を返します? 214 * 215 * @param seqNo 表示? 216 * 217 * @return コードデータの表示? 218 */ 219 public String getLongLabel( final int seqNo ) { return longLabel[seqNo]; } 220 221 /** 222 * コードデータの短縮表示名を返します? 223 * 224 * @param seqNo 表示? 225 * 226 * @return コードデータの短縮表示? 227 */ 228 public String getShortLabel( final int seqNo ) { return shortLabel[seqNo]; } 229 230 /** 231 * コード階層を返します? 232 * 233 * 通常のメニューは?層?"1" になります?optgroup要?して使用する場合?? 234 * 階層?"0" で登録します? 235 * 236 * @param seqNo 表示? 237 * 238 * @return コード階層( "1":option要??"0":optgroup要?) 239 */ 240 public String getCodeLebel( final int seqNo ) { return codelebel[seqNo]; } 241 242 /** 243 * コードグループに?して?かど?の判定を返します? 244 * 245 * コードグループとは、コードリソースを?用意する代わりにグルーピング 246 * しておくことで、?のコードリソースの代用ができる機?です? 247 * 例えば、管??用と?用のコードリソースがある?合?グルーピングしておけば 248 * ?のコードリソースで使用できます? 249 * なお?引数のgroup ????タベ?ス側の設定??ゼロ??の場合?? 250 * 常に選択されます? 251 * 252 * @og.rev 5.1.9.0 (2010/08/01) ? 253 * 254 * @param seqNo 表示? 255 * @param group グループ文? 256 * 257 * @return ?して?場合?、true 258 */ 259 // public boolean getCodeGroup( final int seqNo,final String group ) { 260 // if( group == null || group.length() == 0 || SPC.equals( codeGroup[seqNo] ) ) { return true; } 261 // 262 // return ( codeGroup[seqNo].indexOf( group ) >= 0 ); 263 // } 264 265 /** 266 * こ?コードが、使用できるかど?を?返します? 267 * 268 * コードグループや、コードリストなどで、サブセ?を作?する場合? 269 * プル?ンなどの選択肢は、制限しますが、レン?ーのラベルは、制限しません? 270 * これは、既存データを表示させる?がある為です? 271 * こ?フラグは?択肢を作?するときに利用します? 272 * 標準状態で作?した場合?、すべての?が?true になって?す? 273 * 274 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 275 * 276 * @param seqNo 表示? 277 * 278 * @return 使用可能な場合?、true 279 */ 280 public boolean isUse( final int seqNo ) { return isUseFlag[seqNo]; } 281 282 /** 283 * コードパラメータを返します? 284 * 285 * コードパラメータは、メニューの??option要?に設定するタグの?を追記します? 286 * ここに記述した??をそのまま追記します? 287 * 288 * @param seqNo 表示? 289 * 290 * @return コードパラメータ 291 */ 292 public String getCodeParam( final int seqNo ) { return codeParam[seqNo]; } 293 294 /** 295 * コードロールを取得します? 296 * 297 * @param seqNo 表示? 298 * 299 * @return コードロール 300 */ 301 public String getRoles( final int seqNo ) { return roles[seqNo]; } 302 303 /** 304 * カラ?ブジェクト?ロールモードを返します? 305 * 306 * @og.rev 4.3.0.0 (2008/07/04) ロールモード?ルチ対? 307 * 308 * @param seqNo 表示? 309 * 310 * @return カラ?ブジェクト?ロールモー? 311 */ 312 public RoleMode getRoleMode( final int seqNo ) { return roleModes[seqNo]; } 313 314 /** 315 * ロールモードを、使用して?かど?を?返します? 316 * 317 * ロールモードを使用して?場合?、ロール制御の処??です? 318 * 使用して?/??事前に判断することで、無?処?削減できます? 319 * 320 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 321 * 322 * @return ロールモードを使用して?場合?、true 323 */ 324 public boolean useRoleMode() { return isUseRoleMode; } 325 326 /** 327 * マッチするコードデータのアドレスを返します? 328 * ??する??タが存在しな??合??1 を返します? 329 * 330 * @param key 検索するキー?? 331 * 332 * @return コードデータのアドレス(なければ?1) 333 */ 334 public int getAddress( final String key ) { 335 int selected = -1; 336 for( int i=0; i<size; i++ ) { 337 if( code[i].equals( key ) ) { 338 selected = i; 339 break; 340 } 341 } 342 return selected; 343 } 344 345 /** 346 * コードデータの配?数を返します? 347 * 348 * @return コードデータの配?数 349 */ 350 public int getSize() { return size; } 351 352 /** 353 * マルチ?キーセレクトを使用するかど?を返します? 354 * true?使用する。false:使用しな?です? 355 * 使用するにした場合でも?ラベルの先??が重?な??合?? 356 * IEの自動選択機?によりセレクト可能なため、JavaScript は出力しません? 357 * 358 * @return 選択リストで、?ルチ?キーセレクトを使用するかど?(true:使用する) 359 */ 360 public boolean useMultiSelect() { return isMultiSelect; } 361 362 /** 363 * コードレベル機?を利用するかど?を返します? 364 * true?使用する。false:使用しな?です? 365 * コードレベル機?を利用する場合?、optgroup タグを?力します? 366 * 設定としては、レベル 0 に??カラ? optgroup として出力します? 367 * 368 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 369 * 370 * @return コードレベル機?を利用するかど?(初期値:false:使用しな? 371 */ 372 public boolean useLebel() { return isUseLebel; } 373 374 /** 375 * パラメータを利用するかど?を返します? 376 * true?使用する。false:使用しな?です? 377 * こ?パラメータは、class 属?として設定される値です? 378 * これを使用して、各種レイアウトなどの?が可能です? 379 * 380 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 381 * 382 * @return パラメータを利用するかど?(初期値:false:使用しな? 383 */ 384 public boolean useParam() { return isUseParam; } 385 386 /** 387 * コードグループを利用するかど?を返します? 388 * true?使用する。false:使用しな?です? 389 * こ?コードグループ?、リソースの引数で設定し?カンマ区???に 390 * 対して、?が設定されて?かど?を返します? 391 * これにより、不要な処?行う?がなくなります? 392 * 393 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 394 * 395 * @return パラメータを利用するかど?(初期値:false:使用しな? 396 */ 397 public boolean useGroup() { return isUseGroup; } 398 399 /** 400 * オブジェクト?識別子として?詳細なコード情報を返します? 401 * キー?ラベル??・の繰り返し??を返します? 402 * 403 * @og.rev 4.1.0.0 (2008/01/18) 新規追? 404 * 405 * @return 詳細なコード情報 406 */ 407 public String toCodeString() { 408 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 409 for( int i=0; i<size; i++ ) { 410 String key = code[i] + ":" ; 411 if( ! longLabel[i].startsWith( key ) ) { 412 rtn.append( key ); 413 } 414 rtn.append( longLabel[i] ); 415 rtn.append( " " ); 416 } 417 return rtn.toString().trim(); 418 } 419 420 /** 421 * コードデータの短縮表示?spanタグ無?を返します? 422 * 423 * @og.rev 4.3.8.0 (2009/08/01) 新規追? 424 * 425 * @param seqNo 表示? 426 * 427 * @return コードデータの短縮表示?spanタグ無? 428 */ 429 public String getRawShortLabel( final int seqNo ) { return rawShortLabel[seqNo]; } 430 431 /** 432 * 未?の名前長を返します? 433 * 434 * @og.rev 5.6.8.2 (2013/09/13) 新規追? 435 * 436 * @param seqNo 表示? 437 * 438 * @return コードデータの短縮表示?spanタグ無? 439 */ 440 public String getRawLongLabel( final int seqNo ) { return rawLongLabel[seqNo]; } 441 442 /** 443 * ??コードに限定された CodeData を構築して返します? 444 * こ?サブセ?は、コード?CSV??に基づ?作?されます? 445 * 446 * こ? CodeData は、本当?サブセ?ではなく?プル?ンメニューなどの選択肢のリストを 447 * 制限します?これは、?表示(レン?ー)では、すべての既存?設定?を表示しておく 448 * ?があるからです?そして、変更?エ?ター)に?択肢を制限します? 449 * 450 * 引数の codeCsv が?null,ゼロ??の場合?、???身を返します?(同?? 451 * 452 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 453 * @og.rev 5.6.8.2 (2013/09/20) rawLongLabel対? 454 * 455 * @param codeCsv ??コードをカンマで連結されたも? 456 * 457 * @return ??コードに限定された CodeData 458 */ 459 public CodeData subsetList( final String codeCsv ) { 460 if( codeCsv == null || codeCsv.length() == 0 ) { 461 return this; 462 } 463 464 String codes = "," + codeCsv + "," ; 465 466 boolean[] useFlag = new boolean[size] ; 467 468 Map<String,String[]> data = new LinkedHashMap<String,String[]>(); 469 for( int adrs=0; adrs<size; adrs++ ) { 470 String key = code[adrs] ; 471 useFlag[adrs] = ( codes.indexOf( "," + key + "," ) >= 0 ) ; // 存在する場合?み、true 472 473 String[] vals = new String[MAX_LENGTH]; 474 vals[CLM] = column ; 475 vals[CODE] = key ; 476 vals[LNAME] = longLabel[adrs] ; 477 vals[SNAME] = shortLabel[adrs] ; 478 vals[CODELVL] = codelebel[adrs] ; 479 vals[CODEGRP] = codeGroup[adrs] ; 480 vals[CODE_PARAM]= codeParam[adrs] ; 481 vals[ROLES] = roles[adrs] ; 482 vals[SYSTEM_ID] = null ; 483 vals[KBSAKU] = null ; 484 vals[RSNAME] = rawShortLabel[adrs] ; 485 vals[RLNAME] = rawLongLabel[adrs] ; // 5.6.8.2 (2013/09/20) 486 487 data.put( key,vals ); 488 } 489 490 return new CodeData( column,data,useFlag ); 491 } 492 493 /** 494 * ??groupに?する限定された CodeData を構築して返します? 495 * こ?サブセ?は、コードグループ?CSV??に?に基づ?作?されます? 496 * 497 * こ? CodeData は、本当?サブセ?ではなく?プル?ンメニューなどの選択肢のリストを 498 * 制限します?これは、?表示(レン?ー)では、すべての既存?設定?を表示しておく 499 * ?があるからです?そして、変更?エ?ター)に?択肢を制限します? 500 * 501 * 引数の group が?null,ゼロ??、また?、?部でグループを使用して???合?? 502 * 自??身を返します?(同?? 503 * 引数の group も??設定?グループも、カンマ区?CSV で?のグループを?できます? 504 * こ?場合?、各グループ??、どれか?でも該当すれ?、使用(true)になります? 505 * 506 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 507 * @og.rev 5.6.8.0 (2013/09/20) rawLongLabel対? 508 * 509 * @param group ??コードグループ?CSV?? 510 * 511 * @return ??groupに?する限定された CodeData 512 */ 513 public CodeData subsetGroup( final String group ) { 514 if( group == null || group.length() == 0 || !isUseGroup ) { 515 return this; 516 } 517 518 String[] keys = group.split( "," ) ; 519 520 boolean[] useFlag = new boolean[size] ; 521 522 Map<String,String[]> data = new LinkedHashMap<String,String[]>(); 523 for( int adrs=0; adrs<size; adrs++ ) { 524 String cdGrp = codeGroup[adrs]; 525 526 boolean flag = SPC.equals( cdGrp ); 527 if( !flag ) { 528 String grpCsv = "," + cdGrp + "," ; 529 for( int i=0; i<keys.length; i++ ) { 530 flag = ( grpCsv.indexOf( keys[i] ) >= 0 ); 531 if( flag ) { break; } 532 } 533 } 534 535 useFlag[adrs] = flag; 536 537 String[] vals = new String[MAX_LENGTH]; 538 vals[CLM] = column ; 539 vals[CODE] = code[adrs] ; 540 vals[LNAME] = longLabel[adrs] ; 541 vals[SNAME] = shortLabel[adrs] ; 542 vals[CODELVL] = codelebel[adrs] ; 543 vals[CODEGRP] = codeGroup[adrs] ; 544 vals[CODE_PARAM]= codeParam[adrs] ; 545 vals[ROLES] = roles[adrs] ; 546 vals[SYSTEM_ID] = null ; 547 vals[KBSAKU] = null ; 548 vals[RSNAME] = rawShortLabel[adrs] ; 549 vals[RLNAME] = rawLongLabel[adrs] ; // 5.6.8.0 (2013/09/20) 550 551 data.put( code[adrs],vals ); 552 } 553 554 return new CodeData( column,data,useFlag ); 555 } 556 557 /** 558 * ??コードに限定された CodeData を構築して返します? 559 * こ?サブセ?は、ロールの?に基づ?作?されます? 560 * 561 * こ? CodeData は、本当?サブセ?ではなく?プル?ンメニューなどの選択肢のリストを 562 * 制限します?これは、?表示(レン?ー)では、すべての既存?設定?を表示しておく 563 * ?があるからです?そして、変更?エ?ター)に?択肢を制限します? 564 * 565 * 引数の role が?null また?、?部でロールを使用して???合?、???身を返します?(同?? 566 * 567 * @og.rev 5.1.9.0 (2010/08/01) 新規追? 568 * @og.rev 5.6.8.2 (2013/09/13) rawLongLabel対? 569 * 570 * @param userRole ??ロール(ユーザーロール) 571 * 572 * @return ??コードに限定された CodeData 573 */ 574 public CodeData subsetRole( final RoleMode userRole ) { 575 if( userRole == null || !isUseRoleMode ) { 576 return this; 577 } 578 579 boolean[] useFlag = new boolean[size] ; 580 581 Map<String,String[]> data = new LinkedHashMap<String,String[]>(); 582 for( int adrs=0; adrs<size; adrs++ ) { 583 byte rw = userRole.getAccessBitMode( roleModes[adrs] ); 584 585 useFlag[adrs] = RoleMode.isWrite( rw ) ; // 書き込み可能な場合?み、true 586 587 String[] vals = new String[MAX_LENGTH]; 588 vals[CLM] = column ; 589 vals[CODE] = code[adrs] ; 590 vals[LNAME] = longLabel[adrs] ; 591 vals[SNAME] = shortLabel[adrs] ; 592 vals[CODELVL] = codelebel[adrs] ; 593 vals[CODEGRP] = codeGroup[adrs] ; 594 vals[CODE_PARAM]= codeParam[adrs] ; 595 vals[ROLES] = roles[adrs] ; 596 vals[SYSTEM_ID] = null ; 597 vals[KBSAKU] = null ; 598 vals[RSNAME] = rawShortLabel[adrs] ; 599 vals[RLNAME] = rawLongLabel[adrs] ; 600 601 data.put( code[adrs],vals ); 602 } 603 604 return new CodeData( column,data,useFlag ); 605 } 606 607 /** 608 * longLabel をキーとした、コード?マップを構築して返します? 609 * これは、ラベルからコード?を見つけるのに使用します? 610 * 611 * ラベルからコード?の?きは、同?ベルが存在する場合があり?ので 612 * 参???としてしか、利用できません? 613 * また?ラベルも?短ラベルにたいするコード?マップを作?した??合もありますが? 614 * 現時点では、対応して?せん? 615 * (マップに、短ラベル??も登録すれば、対応可能ですが、ラベルが重?る割合が増えます?) 616 * 主な想定用途?、Rendere で出力したファイルを取り込?きに、ラベルからコードを 617 * 探す?合です? 618 * 619 * @og.rev 5.2.1.0 (2010/10/01) 新規追? 620 * 621 * @return コード?マッ? 622 */ 623 public Map<String,String> makeLabelMap() { 624 Map<String,String> map = new HashMap<String,String>(); 625 626 for( int adrs=0; adrs<size; adrs++ ) { 627 map.put( longLabel[adrs] , code[adrs] ); 628 } 629 630 return map; 631 } 632 633 /** 634 * オブジェクト?識別子として?詳細なコード情報を返します? 635 * 636 * @og.rev 4.1.0.0 (2008/01/18) メソ?修正(改行コード削除) 637 * 638 * @return 詳細なコード情報 639 */ 640 @Override 641 public String toString() { 642 return "column = " + toCodeString() ; 643 644 // StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 645 // rtn.append( "column :" ).append( column ).append( HybsSystem.CR ); 646 // for( int i=0; i<size; i++ ) { 647 // rtn.append( code[i] ); 648 // rtn.append( " " ); 649 // rtn.append( longLabel[i] ); 650 // rtn.append( " " ); 651 // } 652 // rtn.append( HybsSystem.CR ); 653 // return rtn.toString(); 654 } 655 }