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 org.opengion.hayabusa.common.HybsSystem ; 019import java.util.Map; 020import java.util.HashSet; 021import java.util.HashMap; 022import java.util.LinkedHashMap ; 023import java.util.Arrays; 024import 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 */ 046public 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 // 1文字目の重複判定により、マルチセレクトの可否を判断します。 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 , SPC ); // 5.2.2.0 (2010/11/01) 164 165 codelebel[i] = nval2( vals[CODELVL] , SPC ) ; 166 codeGroup[i] = nval2( vals[CODEGRP] , SPC ) ; 167 codeParam[i] = nval2( vals[CODE_PARAM], SPC ) ; 168 roles[i] = nval2( vals[ROLES] , SPC ) ; 169 170 // 5.1.9.0 (2010/08/01) コードレベル機能と、パラメータの使用判定 171 if( !isLbl ) { isLbl = "0".equals( codelebel[i] ); } 172 if( !isPrm ) { isPrm = ! SPC.equals( codeParam[i] ); } 173 if( !isRole ) { isRole = ! SPC.equals( roles[i] ); } 174 if( !isGrp ) { isGrp = ! SPC.equals( codeGroup[i] ); } 175 176 roleModes[i] = RoleMode.newInstance( roles[i] ); // ロールモード 177 rawShortLabel[i] = nval2( vals[RSNAME] , lname , SPC ); // 5.2.2.0 (2010/11/01) 178 rawLongLabel[i] = nval2( vals[RLNAME] , lname , SPC ); // 5.6.8.2 (2013/09/20) 179 180 if( isSel && lname.length() > 0 ) { 181 isSel = set.add( lname.substring(0,1) ); // 重複時は false 182 } 183 } 184 185 Arrays.fill( isUseFlag,true ); // 5.1.9.0 (2010/08/01) サブセットフラグの追加 186 187 isMultiSelect = USE_MULTI_KEY_SELECT && ! isSel ; // flag の反転に注意 188 isUseLebel = isLbl; // 5.1.9.0 (2010/08/01) コードレベル機能を利用するかどうか 189 isUseParam = isPrm; // 5.1.9.0 (2010/08/01) パラメータを利用するかどうか 190 isUseRoleMode = isRole; // 5.1.9.0 (2010/08/01) ロールモードを利用するかどうか 191 isUseGroup = isGrp; // 5.1.9.0 (2010/08/01) コードグループを利用するかどうか 192 } 193 194 /** 195 * コードデータのキーを返します。 196 * 197 * @return コードデータのキー 198 */ 199 public String getColumn() { return column; } 200 201 /** 202 * コードデータのキーを返します。 203 * 204 * @param seqNo 表示順 205 * 206 * @return コードデータのキー 207 */ 208 public String getCodeKey( final int seqNo ) { return code[seqNo] ; } 209 210 /** 211 * コードデータの表示名を返します。 212 * 213 * @param seqNo 表示順 214 * 215 * @return コードデータの表示名 216 */ 217 public String getLongLabel( final int seqNo ) { return longLabel[seqNo]; } 218 219 /** 220 * コードデータの短縮表示名を返します。 221 * 222 * @param seqNo 表示順 223 * 224 * @return コードデータの短縮表示名 225 */ 226 public String getShortLabel( final int seqNo ) { return shortLabel[seqNo]; } 227 228 /** 229 * コード階層を返します。 230 * 231 * 通常のメニューは、階層が "1" になります。optgroup要素として使用する場合は、 232 * 階層を "0" で登録します。 233 * 234 * @param seqNo 表示順 235 * 236 * @return コード階層( "1":option要素、"0":optgroup要素 ) 237 */ 238 public String getCodeLebel( final int seqNo ) { return codelebel[seqNo]; } 239 240 /** 241 * このコードが、使用できるかどうかを、返します。 242 * 243 * コードグループや、コードリストなどで、サブセットを作成する場合、 244 * プルダウンなどの選択肢は、制限しますが、レンデラーのラベルは、制限しません。 245 * これは、既存データを表示させる必要がある為です。 246 * このフラグは、選択肢を作成するときに利用します。 247 * 標準状態で作成した場合は、すべての項目が、true になっています。 248 * 249 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 250 * 251 * @param seqNo 表示順 252 * 253 * @return 使用可能な場合は、true 254 */ 255 public boolean isUse( final int seqNo ) { return isUseFlag[seqNo]; } 256 257 /** 258 * コードパラメータを返します。 259 * 260 * コードパラメータは、メニューの各要素(option要素)に設定するタグの内容を追記します。 261 * ここに記述した文字列をそのまま追記します。 262 * 263 * @param seqNo 表示順 264 * 265 * @return コードパラメータ 266 */ 267 public String getCodeParam( final int seqNo ) { return codeParam[seqNo]; } 268 269 /** 270 * コードロールを取得します。 271 * 272 * @param seqNo 表示順 273 * 274 * @return コードロール 275 */ 276 public String getRoles( final int seqNo ) { return roles[seqNo]; } 277 278 /** 279 * カラムオブジェクトのロールモードを返します。 280 * 281 * @og.rev 4.3.0.0 (2008/07/04) ロールモードマルチ対応 282 * 283 * @param seqNo 表示順 284 * 285 * @return カラムオブジェクトのロールモード 286 */ 287 public RoleMode getRoleMode( final int seqNo ) { return roleModes[seqNo]; } 288 289 /** 290 * ロールモードを、使用しているかどうかを、返します。 291 * 292 * ロールモードを使用している場合は、ロール制御の処理が必要です。 293 * 使用している/いないを事前に判断することで、無駄な処理を削減できます。 294 * 295 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 296 * 297 * @return ロールモードを使用している場合は、true 298 */ 299 public boolean useRoleMode() { return isUseRoleMode; } 300 301 /** 302 * マッチするコードデータのアドレスを返します。 303 * 一致するデータが存在しない場合は、-1 を返します。 304 * 305 * @param key 検索するキー文字列 306 * 307 * @return コードデータのアドレス(なければ、-1) 308 */ 309 public int getAddress( final String key ) { 310 int selected = -1; 311 for( int i=0; i<size; i++ ) { 312 if( code[i].equals( key ) ) { 313 selected = i; 314 break; 315 } 316 } 317 return selected; 318 } 319 320 /** 321 * コードデータの配列数を返します。 322 * 323 * @return コードデータの配列数 324 */ 325 public int getSize() { return size; } 326 327 /** 328 * マルチ・キーセレクトを使用するかどうかを返します。 329 * true:使用する。false:使用しない です。 330 * 使用するにした場合でも、ラベルの先頭文字が重複しない場合は、 331 * IEの自動選択機能によりセレクト可能なため、JavaScript は出力しません。 332 * 333 * @return 選択リストで、マルチ・キーセレクトを使用するかどうか(true:使用する) 334 */ 335 public boolean useMultiSelect() { return isMultiSelect; } 336 337 /** 338 * コードレベル機能を利用するかどうかを返します。 339 * true:使用する。false:使用しない です。 340 * コードレベル機能を利用する場合は、optgroup タグを出力します。 341 * 設定としては、レベル 0 に指定のカラムを optgroup として出力します。 342 * 343 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 344 * 345 * @return コードレベル機能を利用するかどうか(初期値:false:使用しない) 346 */ 347 public boolean useLebel() { return isUseLebel; } 348 349 /** 350 * パラメータを利用するかどうかを返します。 351 * true:使用する。false:使用しない です。 352 * このパラメータは、class 属性として設定される値です。 353 * これを使用して、各種レイアウトなどの指定が可能です。 354 * 355 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 356 * 357 * @return パラメータを利用するかどうか(初期値:false:使用しない) 358 */ 359 public boolean useParam() { return isUseParam; } 360 361 /** 362 * コードグループを利用するかどうかを返します。 363 * true:使用する。false:使用しない です。 364 * このコードグループは、リソースの引数で設定した カンマ区切り文字列に 365 * 対して、値が設定されていたかどうかを返します。 366 * これにより、不要な処理を行う必要がなくなります。 367 * 368 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 369 * 370 * @return パラメータを利用するかどうか(初期値:false:使用しない) 371 */ 372 public boolean useGroup() { return isUseGroup; } 373 374 /** 375 * オブジェクトの識別子として,詳細なコード情報を返します。 376 * キー:ラベル ・・の繰り返し文字列を返します。 377 * 378 * @og.rev 4.1.0.0 (2008/01/18) 新規追加 379 * 380 * @return 詳細なコード情報 381 */ 382 public String toCodeString() { 383 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 384 for( int i=0; i<size; i++ ) { 385 String key = code[i] + ":" ; 386 if( ! longLabel[i].startsWith( key ) ) { 387 rtn.append( key ); 388 } 389 rtn.append( longLabel[i] ); 390 rtn.append( " " ); 391 } 392 return rtn.toString().trim(); 393 } 394 395 /** 396 * コードデータの短縮表示名(spanタグ無し)を返します。 397 * 398 * @og.rev 4.3.8.0 (2009/08/01) 新規追加 399 * 400 * @param seqNo 表示順 401 * 402 * @return コードデータの短縮表示名(spanタグ無し) 403 */ 404 public String getRawShortLabel( final int seqNo ) { return rawShortLabel[seqNo]; } 405 406 /** 407 * 未加工の名前長を返します。 408 * 409 * @og.rev 5.6.8.2 (2013/09/13) 新規追加 410 * 411 * @param seqNo 表示順 412 * 413 * @return コードデータの短縮表示名(spanタグ無し) 414 */ 415 public String getRawLongLabel( final int seqNo ) { return rawLongLabel[seqNo]; } 416 417 /** 418 * 指定のコードに限定された CodeData を構築して返します。 419 * このサブセットは、コードのCSV文字列に基づいて作成されます。 420 * 421 * この CodeData は、本当のサブセットではなく、プルダウンメニューなどの選択肢のリストを 422 * 制限します。これは、一覧表示(レンデラー)では、すべての既存の設定値を表示しておく 423 * 必要があるからです。そして、変更時(エディター)に、選択肢を制限します。 424 * 425 * 引数の codeCsv が、null,ゼロ文字列の場合は、自分自身を返します。(同一です) 426 * 427 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 428 * @og.rev 5.6.8.2 (2013/09/20) rawLongLabel対応 429 * 430 * @param codeCsv 指定のコードをカンマで連結されたもの 431 * 432 * @return 指定のコードに限定された CodeData 433 */ 434 public CodeData subsetList( final String codeCsv ) { 435 if( codeCsv == null || codeCsv.length() == 0 ) { 436 return this; 437 } 438 439 String codes = "," + codeCsv + "," ; 440 441 boolean[] useFlag = new boolean[size] ; 442 443 Map<String,String[]> data = new LinkedHashMap<String,String[]>(); 444 for( int adrs=0; adrs<size; adrs++ ) { 445 String key = code[adrs] ; 446 useFlag[adrs] = codes.indexOf( "," + key + "," ) >= 0 ; // 存在する場合のみ、true 447 448 String[] vals = new String[MAX_LENGTH]; 449 vals[CLM] = column ; 450 vals[CODE] = key ; 451 vals[LNAME] = longLabel[adrs] ; 452 vals[SNAME] = shortLabel[adrs] ; 453 vals[CODELVL] = codelebel[adrs] ; 454 vals[CODEGRP] = codeGroup[adrs] ; 455 vals[CODE_PARAM]= codeParam[adrs] ; 456 vals[ROLES] = roles[adrs] ; 457 vals[SYSTEM_ID] = null ; 458 vals[KBSAKU] = null ; 459 vals[RSNAME] = rawShortLabel[adrs] ; 460 vals[RLNAME] = rawLongLabel[adrs] ; // 5.6.8.2 (2013/09/20) 461 462 data.put( key,vals ); 463 } 464 465 return new CodeData( column,data,useFlag ); 466 } 467 468 /** 469 * 指定のgroupに所属する限定された CodeData を構築して返します。 470 * このサブセットは、コードグループのCSV文字列に指定に基づいて作成されます。 471 * 472 * この CodeData は、本当のサブセットではなく、プルダウンメニューなどの選択肢のリストを 473 * 制限します。これは、一覧表示(レンデラー)では、すべての既存の設定値を表示しておく 474 * 必要があるからです。そして、変更時(エディター)に、選択肢を制限します。 475 * 476 * 引数の group が、null,ゼロ文字列、または、内部でグループを使用していない場合は、 477 * 自分自身を返します。(同一です) 478 * 引数の group も、内部設定のグループも、カンマ区切りCSV で複数のグループを指定できます。 479 * この場合は、各グループのうち、どれか一つでも該当すれば、使用(true)になります。 480 * 481 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 482 * @og.rev 5.6.8.0 (2013/09/20) rawLongLabel対応 483 * 484 * @param group 指定のコードグループのCSV文字列 485 * 486 * @return 指定のgroupに所属する限定された CodeData 487 */ 488 public CodeData subsetGroup( final String group ) { 489 if( group == null || group.length() == 0 || !isUseGroup ) { 490 return this; 491 } 492 493 String[] keys = group.split( "," ) ; 494 495 boolean[] useFlag = new boolean[size] ; 496 497 Map<String,String[]> data = new LinkedHashMap<String,String[]>(); 498 for( int adrs=0; adrs<size; adrs++ ) { 499 String cdGrp = codeGroup[adrs]; 500 501 boolean flag = SPC.equals( cdGrp ); 502 if( !flag ) { 503 String grpCsv = "," + cdGrp + "," ; 504 for( int i=0; i<keys.length; i++ ) { 505 flag = grpCsv.indexOf( keys[i] ) >= 0 ; 506 if( flag ) { break; } 507 } 508 } 509 510 useFlag[adrs] = flag; 511 512 String[] vals = new String[MAX_LENGTH]; 513 vals[CLM] = column ; 514 vals[CODE] = code[adrs] ; 515 vals[LNAME] = longLabel[adrs] ; 516 vals[SNAME] = shortLabel[adrs] ; 517 vals[CODELVL] = codelebel[adrs] ; 518 vals[CODEGRP] = codeGroup[adrs] ; 519 vals[CODE_PARAM]= codeParam[adrs] ; 520 vals[ROLES] = roles[adrs] ; 521 vals[SYSTEM_ID] = null ; 522 vals[KBSAKU] = null ; 523 vals[RSNAME] = rawShortLabel[adrs] ; 524 vals[RLNAME] = rawLongLabel[adrs] ; // 5.6.8.0 (2013/09/20) 525 526 data.put( code[adrs],vals ); 527 } 528 529 return new CodeData( column,data,useFlag ); 530 } 531 532 /** 533 * 指定のコードに限定された CodeData を構築して返します。 534 * このサブセットは、ロールの指定に基づいて作成されます。 535 * 536 * この CodeData は、本当のサブセットではなく、プルダウンメニューなどの選択肢のリストを 537 * 制限します。これは、一覧表示(レンデラー)では、すべての既存の設定値を表示しておく 538 * 必要があるからです。そして、変更時(エディター)に、選択肢を制限します。 539 * 540 * 引数の role が、null または、内部でロールを使用していない場合は、自分自身を返します。(同一です) 541 * 542 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 543 * @og.rev 5.6.8.2 (2013/09/13) rawLongLabel対応 544 * 545 * @param userRole 指定のロール(ユーザーロール) 546 * 547 * @return 指定のコードに限定された CodeData 548 */ 549 public CodeData subsetRole( final RoleMode userRole ) { 550 if( userRole == null || !isUseRoleMode ) { 551 return this; 552 } 553 554 boolean[] useFlag = new boolean[size] ; 555 556 Map<String,String[]> data = new LinkedHashMap<String,String[]>(); 557 for( int adrs=0; adrs<size; adrs++ ) { 558 byte rw = userRole.getAccessBitMode( roleModes[adrs] ); 559 560 useFlag[adrs] = RoleMode.isWrite( rw ) ; // 書き込み可能な場合のみ、true 561 562 String[] vals = new String[MAX_LENGTH]; 563 vals[CLM] = column ; 564 vals[CODE] = code[adrs] ; 565 vals[LNAME] = longLabel[adrs] ; 566 vals[SNAME] = shortLabel[adrs] ; 567 vals[CODELVL] = codelebel[adrs] ; 568 vals[CODEGRP] = codeGroup[adrs] ; 569 vals[CODE_PARAM]= codeParam[adrs] ; 570 vals[ROLES] = roles[adrs] ; 571 vals[SYSTEM_ID] = null ; 572 vals[KBSAKU] = null ; 573 vals[RSNAME] = rawShortLabel[adrs] ; 574 vals[RLNAME] = rawLongLabel[adrs] ; 575 576 data.put( code[adrs],vals ); 577 } 578 579 return new CodeData( column,data,useFlag ); 580 } 581 582 /** 583 * longLabel をキーとした、コードのマップを構築して返します。 584 * これは、ラベルからコード値を見つけるのに使用します。 585 * 586 * ラベルからコード値の逆引きは、同一ラベルが存在する場合がありうるので 587 * 参考情報としてしか、利用できません。 588 * また、ラベルも、短ラベルにたいするコードのマップを作成したい場合もありますが、 589 * 現時点では、対応していません。 590 * (マップに、短ラベル情報も登録すれば、対応可能ですが、ラベルが重複する割合が増えます。) 591 * 主な想定用途は、Rendere で出力したファイルを取り込むときに、ラベルからコードを 592 * 探す場合です。 593 * 594 * @og.rev 5.2.1.0 (2010/10/01) 新規追加 595 * 596 * @return コードのマップ 597 */ 598 public Map<String,String> makeLabelMap() { 599 Map<String,String> map = new HashMap<String,String>(); 600 601 for( int adrs=0; adrs<size; adrs++ ) { 602 map.put( longLabel[adrs] , code[adrs] ); 603 } 604 605 return map; 606 } 607 608 /** 609 * オブジェクトの識別子として,詳細なコード情報を返します。 610 * 611 * @og.rev 4.1.0.0 (2008/01/18) メソッド修正(改行コード削除) 612 * 613 * @return 詳細なコード情報 614 */ 615 @Override 616 public String toString() { 617 return "column = " + toCodeString() ; 618 } 619}