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 java.util.Arrays; 019import java.util.Collections; 020import java.util.HashMap; 021import java.util.HashSet; 022import java.util.LinkedHashMap; 023import java.util.Map; 024import java.util.Set; 025 026import org.opengion.fukurou.util.ErrMsg; 027import org.opengion.fukurou.util.StringUtil; 028import org.opengion.hayabusa.common.HybsSystem; 029import org.opengion.hayabusa.db.DBColumn; 030import org.opengion.hayabusa.db.DBColumnConfig; 031 032/** 033 * java.util.ResourceBundle クラスを複数管理するリソースクラスです。 034 * 035 * ResourceManager は、 036 * LabelResource.properties ラベルリソース(テーブル定義やカラム名などの画面に表示するリソース) 037 * CodeResource.properties コードリソース(選択データなどプルダウンメニューで選択するリソース) 038 * MessageResource.properties メッセージリソース(エラーコードやメッセージなどを表示するリソース) 039 * 040 * の3つのプロパティーファイルを内部に持っており,それぞれのメソッドにより, 041 * リソースの返す値を決めています。 042 * 043 * ResourceManagerは,単独でも生成できますが,各ユーザー毎に作成するよりも 044 * ResourceFactory#newInstance( lang )メソッドより生成した方が,プーリングされるので 045 * 効率的です。 046 * 047 * リソース作成時に指定するロケールは,ISO 言語コード(ISO-639 で定義される 2 桁の小文字) 048 * <a href ="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt"> 049 * http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt</a>を使用して下さい。 050 * ただし,内部的に Locale を構築していますが,その正しさは,チェックされていませんので, 051 * 指定するロケールに応じた properties ファイルを用意しておいて下さい。 052 * 053 * 日本語の場合は, 言語コードは "jp" なので, 054 * LabelResource_jp.properties ラベルリソース(日本語) 055 * CodeResource_jp.properties コードリソース(日本語) 056 * MessageResource_jp.properties メッセージリソース(日本語) 057 * 058 * を用意して下さい。 059 * 060 * CodeResource については、リソースファイルから CodeSelectionオブジェクトを 061 * 作成して利用します。この、CodeSelectionオブジェクトの作成方法として、 062 * 3通り考えられます。 063 * 1つ目は、毎回 要求が発生する毎に CodeSelection を作成し、プールしていきます。こうすることで、 064 * 初めて使用されたときだけオブジェクト化されますので、メモリの節約が可能です。ただし、 065 * プールにヒットしなかった場合は、やはりリソースから検索しますので、元々ヒットしない 066 * キーに対しては、毎回リソースを検索するため、非効率です。 067 * 2つめは、元々ヒットしないキーに対して、NullCodeSelectionオブジェクトを登録しておくことで、 068 * プールにため込んで行くと言う方法です。この場合は、シングルトーンにしてメモリを節約しますが、 069 * それでもプール自体の容量は、確保しておく必要があります。 070 * 3つめは、この ResourceManager がインスタンス化されるときに、すべての CodeSelectionオブジェクトを 071 * あらかじめ プールしておく方法です。使わない CodeSelection もインスタンス化する変わりに、 072 * キャッシュにヒットしない場合は、即 CodeSelection が存在しないと判断できるため、 073 * もっともパフォーマンスが高くなります。 074 * 本 ResourceManager の実装は、3つめの、あらかじめ、すべてをキャッシュしておく方法を 075 * 採用しています。 076 * 077 * @og.group リソース管理 078 * 079 * @version 4.0 080 * @author Kazuhiko Hasegawa 081 * @since JDK5.0, 082 */ 083public final class ResourceManager { 084 // 4.0.0 (2005/01/31) オラクルとWindowsとの間の "〜"の文字化け対策 085 // private static final boolean USE_CHAR_TRANS = HybsSystem.sysBool( "USE_UTF8_CHARACTER_TRANSLATION" ) ; // 4.0.0 (2005/01/31) 086 087 private final ColumnDataLoader columnLoader ; 088 private final CodeDataLoader codeLoader; 089 private final LabelDataLoader labelLoader; 090// private final MessageDataLoader messageLoader; 4.0.0.0(2007/10/17) 091 private final GUIDataLoader guiLoader; 092 093 private final Map<String,DBColumn> columnPool = Collections.synchronizedMap( new HashMap<String,DBColumn>( HybsSystem.BUFFER_LARGE ) ); 094// private final String systemId ; 095 private final String lang ; 096 097 // 5.4.3.4 (2012/01/12) ラベルのキャッシュ(キャッシュラベル) 098// private final Map<String,LabelData> labelPool = Collections.synchronizedMap( new HashMap<String,LabelData>( HybsSystem.BUFFER_LARGE ) ); 099// private final Map<String,String> labelPool = Collections.synchronizedMap( new HashMap<String,String>( HybsSystem.BUFFER_LARGE ) ); 100 101 /** 102 * コンストラクター 103 * システムIDと言語コードを指定して,生成します。 104 * 105 * @param systemId システムID 106 * @param lg 言語コード 107 * @param initLoad リソースデータの先読み可否(true:先読みする) 108 */ 109// public ResourceManager( final String sysId,final String lg,final boolean initLoad ) { 110 public ResourceManager( final String systemId,final String lg,final boolean initLoad ) { 111// this.systemId = sysId; 112 this.lang = lg; 113 114 columnLoader = new ColumnDataLoader( systemId,initLoad ); 115 labelLoader = new LabelDataLoader( systemId,lang,initLoad ); 116// codeLoader = new CodeDataLoader( systemId,lang,initLoad ); 117 codeLoader = new CodeDataLoader( systemId,initLoad,labelLoader ); // 4.0.0.0(2007/10/17) 118// messageLoader = new MessageDataLoader( systemId,lang,initLoad ); 4.0.0.0(2007/10/17) 119 guiLoader = new GUIDataLoader( systemId ); 120 } 121 122 /** 123 * 設定されている言語を返します。 124 * 125 * @return 言語 126 */ 127 public String getLang() { 128 return lang; 129 } 130 131 /** 132 * DBColumn オブジェクトを取得します。 133 * 作成したDBColumnオブジェクトは,内部にプールしておき,同じオブジェクト要求が 134 * あったときは,プールのオブジェクトを利用して,DBColumnを返します。 135 * 136 * @og.rev 3.4.0.0 (2003/09/01) ラベルカラム、コードカラム、表示パラメータ、編集パラメータ、文字パラメータの追加。 137 * @og.rev 3.5.6.4 (2004/07/16) 追加パラメータ取り込み時に、"_" は、null 扱いとする。 138 * @og.rev 3.6.0.7 (2004/11/06) DBColumn の official属性追加 139 * 140 * @param key カラムID 141 * 142 * @return DBColumnオブジェクト 143 */ 144 public DBColumn getDBColumn( final String key ) { 145 DBColumn clm = columnPool.get( key ); 146 if( clm == null ) { 147 ColumnData clmDt = columnLoader.getColumnData( key ); 148 if( clmDt != null ) { 149 String label_clm = clmDt.getLabelColumn(); 150 String code_clm = clmDt.getCodeColumn(); 151 152 clm = new DBColumn( 153 lang, 154 clmDt, 155 labelLoader.getLabelData( label_clm ), 156 codeLoader.getCodeData( code_clm ) ); 157 158 columnPool.put( key,clm ); 159 } 160 } 161 return clm; 162 } 163 164 /** 165 * DBColumn オブジェクトを作成します。 166 * 内部にプールに存在すればそれを、なければ新規に作成します。 167 * それでも存在しない場合は、DBColumnConfig より、ラベルと言語を指定して 168 * 新規に作成します。 169 * 170 * @param key カラムID 171 * 172 * @return DBColumnオブジェクト 173 * @see #getDBColumn( String ) 174 */ 175 public DBColumn makeDBColumn( final String key ) { 176 DBColumn dbColumn = getDBColumn( key ); 177 if( dbColumn == null ) { 178 DBColumnConfig config = new DBColumnConfig( key ); 179 config.setLabelData( getLabelData( key ) ); 180 config.setLang( getLang() ); 181 dbColumn = new DBColumn( config ); 182 } 183 return dbColumn; 184 } 185 186 /** 187 * DBColumn オブジェクトをプールに登録します。 188 * DBColumn を動的に作成する機能で、作成したカラムオブジェクトを 189 * プールに登録することで、通常のリソースと同じように利用できるように 190 * します。 191 * 192 * @og.rev 5.4.2.2 (2011/12/14) 新規追加 193 * 194 * @param key カラムID 195 * @param dbColumn DBColumnオブジェクト 196 */ 197 public void setDBColumn( final String key , final DBColumn dbColumn ) { 198 if( key != null && key.length() > 0 && dbColumn != null ) { 199 columnPool.put( key,dbColumn ); 200 } 201 } 202 203 /** 204 * ラベルを独自のプール(キャッシュラベル)に登録します。 205 * 取り出すときは、#getLabel( String , boolean ) メソッドの 206 * 第2引数に、true をセットします。 207 * 208 * @og.rev 5.4.3.4 (2012/01/12) 新規追加 209 * 210 * @param key カラムID 211 * @param labelData LabelDataオブジェクト 212 * @see #getLabel( String , boolean ) 213 */ 214//// public void setLabelData( final String key , final LabelData labelData ) { 215// public void setLabel( final String key , final String label ) { 216// if( key != null && !key.isEmpty() && label != null && !label.isEmpty() ) { 217// labelPool.put( key,label ); 218// } 219// } 220 221 /** 222 * ラベルリソースから,ラベルを返します。 223 * 引数の言語コードに応じたリソースが登録されていない場合は, 224 * 引数のラベルキーそのまま返します。 225 * 独自プール(キャッシュラベル)から取り出すときは、useLocalPoolを 226 * true にセットします。 227 * なお、独自プールは、それのみではなく、そこになければ通常の 228 * ラベルリソースを検索に行きます。 229 * 230 * @og.rev 5.4.3.4 (2012/01/12) 新規追加 231 * 232 * @param key ラベルキー 233 * @param useLocalPool true:キャッシュラベルから 234 * 235 * @return リソースに応じたラベル文字列(無ければ ラベルキー) 236 * @see #setLabel( String , String ) 237 */ 238// public String getLabel( final String key, final boolean useLocalPool ) { 239// // useLocalPool == true の場合は、ラベルキャッシュを検索します。 240// // そこに存在しない場合、または、useLocalPool == false の場合は、通常のラベルリソースから値を返します。 241// if( useLocalPool ) { 242// String label = labelPool.get( key ); 243// if( label != null ) { return label; } 244// } 245// 246// return getLabel( key ); 247// } 248 249 /** 250 * ラベルリソースから,ラベルを返します。 251 * 引数の言語コードに応じたリソースが登録されていない場合は, 252 * 引数のラベルキーそのまま返します。 253 * 254 * @og.rev 4.0.0.0 (2005/01/31) オラクルとWindowsとの間の "〜"の文字化け対策中止 255 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソースとの統合化 256 * 257 * @param key ラベルキー 258 * 259 * @return リソースに応じたラベル文字列(無ければ ラベルキー) 260 */ 261 public String getLabel( final String key ) { 262 LabelData lblData = labelLoader.getLabelData( key ); 263 if( lblData != null ) { 264 String rtn = lblData.getLabel(); 265 if( rtn != null ) { 266 return rtn; 267 } 268 } 269 270 // なければ key を返す 271 return key; 272 } 273 274 /** 275 * メッセージリソースから,キーで指定されたメッセージに, 276 * 引数で指定された変数値をセットしたメッセージを返します。 277 * 278 * このメッセージは,リソースで選ばれたロケール毎のメッセージに, 279 * MessageFormat#format でフォーマットする事により,作成されます。 280 * メッセージがリソースに存在しない場合は,キーを返します。 281 * 282 * @og.rev 4.0.0.0 (2005/01/31) オラクルとWindowsとの間の "〜"の文字化け対策 283 * @og.rev 4.0.0.0 (2007/10/17) メッセージリソース統合に伴いラベルローダーを使用する 284 * @og.rev 4.0.0.0 (2007/10/18) 名称変更 getMessage ⇒ getLabel 285 * @og.rev 5.1.1.0 (2009/12/01) #xxxxの変換で、カラム名が複数指定されている場合の対応 286 * 287 * @param key キー 288 * @param args メッセージの引数 289 * 290 * @return メッセージ(無ければ キー) 291 */ 292 public String getLabel( final String key,final String[] args ) { 293// MessageData msgDt = messageLoader.getMessageData( key ); 294 295 final String msglbl ; 296 297 if( args == null ) { 298 msglbl = getLabel( key ); 299 } 300 else { 301 LabelData msgDt = labelLoader.getLabelData( key ); 302 303// int size = ( args == null ) ? 0 : args.length ; 304 int size = args.length; 305 String[] msgArgs = new String[size]; 306 for( int i=0; i<size; i++ ) { 307 String arg = args[i] ; 308 if( arg != null && arg.startsWith( "#" ) ) { 309 if( arg.indexOf( ',' ) < 0 ) { 310 msgArgs[i] = getLabel( arg.substring( 1 ) ); 311 } 312 // 5.1.1.0 (2009/12/01) #CLM,LANG,KBSAKU 等項目名が複数指定できるようにする 313 else { 314 String[] argArr = StringUtil.csv2Array( arg.substring( 1 ) ); 315 StringBuilder argBuf = new StringBuilder(); 316 for( int j=0; j<argArr.length; j++ ) { 317 if( j > 0 ) { 318 argBuf.append( ',' ); 319 } 320 argBuf.append( getLabel( argArr[j]) ); 321 } 322 msgArgs[i] = getLabel( argBuf.toString() ); 323 } 324 } 325 else { 326 msgArgs[i] = arg ; 327 } 328 } 329 330 msglbl = msgDt.getMessage( msgArgs ); 331 } 332 333 return msglbl; 334 } 335 336 /** 337 * メッセージリソースから,ErrMsgオブジェクトで指定されたメッセージを返します。 338 * 339 * このエラーメッセージは,リソースで選ばれたロケール毎のメッセージに, 340 * MessageFormat#format でフォーマットする事により,作成されます。 341 * エラーメッセージがリソースに存在しない場合は,エラーコードを返します。 342 * 343 * @og.rev 4.0.0.0 (2004/12/31) 新規追加 344 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソースとの統合化 345 * 346 * @param errMsg ErrMsgオブジェクト 347 * 348 * @return エラーメッセージ(無ければ ErrMsgオブジェクトの toString() ) 349 */ 350 public String getLabel( final ErrMsg errMsg ) { 351 String key = errMsg.getId(); 352 String[] args = errMsg.getArgs(); 353 354 return getLabel( key,args ); 355 } 356 357 /** 358 * ラベルリソースから,ラベル(短)を返します。 359 * 引数の言語コードに応じたリソースが登録されていない場合は, 360 * 引数のラベルキーそのまま返します。 361 * 362 * @og.rev 4.3.3.0 (2008/10/01) 新規作成 363 * 364 * @param key ラベルキー 365 * 366 * @return リソースに応じたラベル文字列(無ければ ラベルキー) 367 */ 368 public String getShortLabel( final String key ) { 369 LabelData lblData = labelLoader.getLabelData( key ); 370 if( lblData != null ) { 371 String rtn = lblData.getShortLabel(); 372 if( rtn != null ) { 373 return rtn; 374 } 375 } 376 377 // なければ key を返す 378 return key; 379 } 380 381 /** 382 * ラベルリソースから,概要説明を返します。 383 * キーのデータが存在しない場合はnullを返します。 384 * 385 * @og.rev 4.3.4.5 (2009/01/08) 新規作成 386 * 387 * @param key ラベルキー 388 * 389 * @return リソースに応じた概要説明(無ければ null) 390 */ 391 public String getDescription( final String key ) { 392 LabelData lblData = labelLoader.getLabelData( key ); 393 if( lblData != null ) { 394 String rtn = lblData.getDescription(); 395 if( rtn != null ) { 396 return rtn; 397 } 398 } 399 // キーが存在しなければnullで返す 400 return null; 401 } 402 403 /** 404 * ラベルリソースから,概要説明を返します。 405 * {0},{1}...の置換えを行います。 406 * キーのデータが存在しない場合はnullを返します。 407 * 408 * @og.rev 4.3.7.6 (2009/07/15) 新規作成 409 * 410 * @param key ラベルキー 411 * @param args パラメータ 412 * 413 * @return リソースに応じた概要説明(無ければ null) 414 */ 415 public String getDescription( final String key, final String[] args ) { 416 String rtn = null; 417 if( args == null ){ 418 rtn = getDescription( key ); 419 } 420 else{ 421 LabelData lblData = labelLoader.getLabelData( key ); 422 if( lblData != null ) { 423 int size = args.length; 424 String[] msgArgs = new String[size]; 425 for( int i=0; i<size; i++ ) { 426 String arg = args[i] ; 427 if( arg != null && arg.startsWith( "#" ) ) { 428 msgArgs[i] = getLabel( arg.substring( 1 ) ); 429 } 430 else { 431 msgArgs[i] = arg ; 432 } 433 } 434 rtn = lblData.getDescription( msgArgs ); 435 } 436 } 437 // キーが存在しなければnullで返る 438 return rtn; 439 } 440 441 /** 442 * ラベルリソースから,概要説明を返します。 443 * キーのデータが存在しない場合はnullを返します。 444 * 445 * @og.rev 4.3.7.6 (2009/07/15) 新規作成 446 * 447 * @param errMsg ErrMsgオブジェクト 448 * 449 * @return エラーメッセージ(キーが無ければnull) 450 */ 451 public String getDescription( final ErrMsg errMsg ) { 452 String key = errMsg.getId(); 453 String[] args = errMsg.getArgs(); 454 455 return getDescription( key,args ); 456 } 457 458 /** 459 * ラベルリソースから,ラベルを返します。 460 * 引数の言語コードに応じたリソースが登録されていない場合は, 461 * 引数のラベルキーそのまま返します。 462 * 463 * @og.rev 4.0.0.0 (2005/01/31) 新規作成 464 * 465 * @param key ラベルキー 466 * 467 * @return リソースに応じたラベル文字列(無ければ ラベルキー) 468 */ 469 public LabelData getLabelData( final String key ) { 470 return labelLoader.getLabelData( key ); 471 } 472 473 /** 474 * コードリソースから,コード文字列を返します。 475 * 476 * @param key コードキー 477 * 478 * @return コードデータオブジェクト(無ければ null) 479 */ 480 public CodeData getCodeData( final String key ) { 481 return codeLoader.getCodeData( key ); 482 } 483 484 /** 485 * コードリソースから,コード文字列を返します。 486 * 引数にQUERYを渡すことで、DBから、動的にコードリソースを作成できます。 487 * 488 * @og.rev 5.4.2.2 (2011/12/14) 新規追加。 489 * 490 * @param key コードキー 491 * @param query 検索SQL(引数に、? を一つ持つ) 492 * 493 * @return コードデータオブジェクト(無ければ null) 494 */ 495 public CodeData getCodeData( final String key,final String query ) { 496 return codeLoader.getCodeData( key,query ); 497 } 498 499 /** 500 * メッセージリソースから,キーで指定されたメッセージを返します。 501 * 502 * このメッセージは,リソースで選ばれたロケール毎のメッセージに, 503 * MessageFormat#format でフォーマットする事により,作成されます。 504 * メッセージがリソースに存在しない場合は,キーを返します。 505 * 506 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソースとの統合化により廃止 507 * 508 * @param key キー 509 * 510 * @return メッセージ(無ければ キー) 511 */ 512// public String getMessage( final String key ) { 513// return getMessage( key,null ); 514// } 515 516 /** 517 * 指定のキーのメッセージデータオブジェクトを返します。 518 * 519 * このメッセージオブジェクトは,メッセージリソースより作成された 520 * オリジナルのメッセージデータオブジェクト 521 * メッセージデータオブジェクトが存在しない場合は,nullを返します。 522 * 523 * @og.rev 4.0.0.0 (2007/10/17) DBColumn の official属性追加 524 * @og.rev 4.0.0.0 (2007/10/17) メッセージリソース統合に伴い廃止 525 * 526 * @param key キー 527 * 528 * @return メッセージデータ(無ければ null) 529 */ 530// public MessageData getMessageData( final String key ) { 531// return messageLoader.getMessageData( key ); 532// } 533 534 /** 535 * ログインユーザーで使用する画面オブジェクトを、UserInfoにセットします。 536 * 各、UserInfo は、自分自身が使用する 画面オブジェクトのみを管理することで、 537 * 画面アクセス有無を、すばやく検索することが可能になります。 538 * 539 * @og.rev 3.1.0.1 (2003/03/26) GUIInfo のキー順サポートの為に、引数追加。 540 * @og.rev 4.0.0.0 (2005/01/31) 使用画面のMap を UserInfo にセットします。 541 * @og.rev 4.3.0.0 (2008/07/04) ロールモードマルチ対応 542 * @og.rev 5.2.0.0 (2010/09/01) アクセス禁止アドレスによる不正アクセス防止機能追加 543 * 544 * @param user 指定のユーザーロールに対応する画面だけをMapにセットする。 545 */ 546 public void makeGUIInfos( final UserInfo user ) { 547 GUIData[] guiDatas = guiLoader.getAllData(); 548// String[] userRoles = StringUtil.csv2Array( user.getRoles(),HybsSystem.GUI_DELIMITER ); 549 550 // guikey に対してユニークになるように Map に追加します。後登録が優先されます。 551 Map<String,GUIInfo> guiMap = new HashMap<String,GUIInfo>(); 552 Set<String> forbidAddrSet = new HashSet<String>(); 553 int size = guiDatas.length; 554 for( int i=0; i<size; i++ ) { 555 GUIData gui = guiDatas[i]; 556// if( user.isRoot() || gui.isAccess( userRoles ) ) { 557 byte bitMode = user.getAccessBitMode( gui.getRoleMode() ); 558 if( bitMode > 0 ) { 559 String guikey = gui.getGuiKey(); 560 LabelData labelData = getLabelData( gui.getLabelClm() ); 561// byte bitMode = gui.getAccessBitMode( userRoles,user.isRoot() ); 562 guiMap.put( guikey,new GUIInfo( gui,labelData,bitMode ) ); 563 } 564 // 5.2.0.0 (2010/09/01) アクセス禁止アドレスによる不正アクセス防止機能追加 565 else { 566 String addr = gui.getAddress(); 567 if( addr.indexOf( '/' ) < 0 ) { 568 forbidAddrSet.add( addr ); 569 } 570 } 571 } 572 573 // もし、禁止リストの中に画面ID違いで許可リストと同じアドレスが 574 // 含まれている場合は、禁止リスト中から該当のアドレスを削除する。 575 for( GUIInfo gui : guiMap.values() ) { 576 String addr = gui.getAddress(); 577 if( forbidAddrSet.contains( gui.getAddress() ) ) { 578 forbidAddrSet.remove( addr ); 579 } 580 } 581 582 // GUIInfo をその順番(SEQNO順)でソートし直します。 583 GUIInfo[] guiInfos = guiMap.values().toArray( new GUIInfo[ guiMap.size() ] ) ; 584 Arrays.sort( guiInfos ); 585 Map<String,GUIInfo> sortMap = new LinkedHashMap<String,GUIInfo>(); 586 size = guiInfos.length; 587 for( int i=0; i<size; i++ ) { 588 GUIInfo guiInfo = guiInfos[i]; 589 String guikey = guiInfo.getKey(); 590 sortMap.put( guikey,guiInfo ); 591 } 592 593 user.setGUIMap( sortMap, forbidAddrSet ); 594 } 595 596 /** 597 * 指定されたクエリを発行し、ラベルマップを作成します。 598 * 599 * @og.rev 4.3.4.0 (2008/12/01) 新規作成 600 * 601 * @param query ラベルマップを作成するクエリ 602 * 603 * @return ラベルマップ 604 * @see org.opengion.hayabusa.resource.LabelDataLoader#getLabelMap( String ) 605 */ 606 public Map<String, LabelData> getLabelMap( final String query ) { 607 return labelLoader.getLabelMap( query ); 608 } 609 610 /** 611 * リソースマネージャーをキーに基づいて部分クリアします。 612 * ここでは、部分クリアなため、GUIData に関しては、処理されません。 613 * また、存在しないキーを指定されたリソースは、何も処理されません。 614 * 615 * @og.rev 5.4.3.4 (2012/01/12) labelPool の削除追加 616 * 617 * @param key カラムのキー 618 */ 619 public void clear( final String key ) { 620 System.out.println( "Key=[" + key + "] の部分リソースクリアを実施しました。" ); 621 columnLoader.clear( key ); 622 codeLoader.clear( key ); 623 labelLoader.clear( key ); 624// messageLoader.clear( key ); 4.0.0.0(2007/10/17) 625 columnPool.remove( key ); 626// labelPool.remove( key ); // 5.4.3.4 (2012/01/12) 627 } 628 629 /** 630 * GUI情報をクリアします。 631 * ここでは、関連するラベル、コードリソースの部分クリアも行います。 632 * GUI情報は、シーケンスに管理しているため、この処理1回ごとに、 633 * GUIData を全件再読み込みを行いますので、ご注意ください。 634 * 635 */ 636 public void guiClear() { 637 GUIData[] gui = guiLoader.getAllData(); 638 639 for( int i=0; i<gui.length; i++ ) { 640 String key = gui[i].getGuiKey(); 641 labelLoader.clear( key ); 642 } 643 codeLoader.clear( "CLASSIFY" ); 644 guiLoader.clear(); 645 } 646 647 /** 648 * リソースマネージャーをクリア(初期化)します。 649 * 650 * @og.rev 5.4.3.4 (2012/01/12) labelPool の削除追加 651 * 652 */ 653 public void clear() { 654 columnLoader.clear(); 655 codeLoader.clear(); 656 labelLoader.clear(); 657// messageLoader.clear(); 4.0.0.0(2007/10/17) 658 guiLoader.clear(); 659 columnPool.clear(); 660// labelPool.clear();; // 5.4.3.4 (2012/01/12) 661 } 662}