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 java.util.Arrays;
019 import java.util.Collections;
020 import java.util.HashMap;
021 import java.util.HashSet;
022 import java.util.LinkedHashMap;
023 import java.util.Map;
024 import java.util.Set;
025
026 import org.opengion.fukurou.util.ErrMsg;
027 import org.opengion.fukurou.util.StringUtil;
028 import org.opengion.hayabusa.common.HybsSystem;
029 import org.opengion.hayabusa.db.DBColumn;
030 import 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 * の?“つのプロパティーファイルをå?部に持っており,それぞれのメソãƒ?ƒ‰により??
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 * ?“é?りè?えられますã?
063 * ?‘つ目は、毎回 要求が発生する毎に CodeSelection を作æ?しã?プã?ルしてã�?��ますã?こうすることでã€?
064 * 初めて使用されたときだけオブジェクト化されますã?で、メモリのç¯?´?�Œ可能ですã?ただしã?
065 * プã?ルにヒットしなかったå?合ã?、やはりリソースから検索しますã?で、å?ã€?ƒ’ãƒ?ƒˆしなã�?
066 * キーに対しては、毎回リソースを検索するためã€?�ž効çŽ?�§すã?
067 * ?’つめã?、å?ã€?ƒ’ãƒ?ƒˆしなã�?‚ーに対して、NullCodeSelectionオブジェクトを登録しておくことでã€?
068 * プã?ルにため込んで行くとè¨?�†方法ですã?こã?場合ã?、シングルトã?ンにしてメモリをç¯?´?�—ますがã€?
069 * それでもã?ール自体ã?容量ã?、確保しておくå¿?¦�がありますã?
070 * ?“つめã?、この ResourceManager がインスタンス化されるときに、すべての CodeSelectionオブジェクトを
071 * あらかじã‚?プã?ルしておく方法ですã?使わなã�?CodeSelection もインスタンス化する変わりにã€?
072 * キャãƒ?‚·ュにヒットしなã�??合ã?、即 CodeSelection が存在しなã�?�¨判断できるためã€?
073 * もっともパフォーマンスが高くなりますã?
074 * 本 ResourceManager の実è£??ã€?¼“つめã?、あらかじめ、すべてをキャãƒ?‚·ュしておく方法を
075 * 採用してã�?�¾すã?
076 *
077 * @og.group リソース管ç�?
078 *
079 * @version 4.0
080 * @author Kazuhiko Hasegawa
081 * @since JDK5.0,
082 */
083 public 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 * シスãƒ?ƒ ?©?¤とè¨?ªžコードをæŒ?®šして,生æ?しますã?
104 *
105 * @param systemId シスãƒ?ƒ ?©?¤
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 カラãƒ?D
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 カラãƒ?D
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 カラãƒ?D
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 * 第?’引数に、true をセãƒ?ƒˆしますã?
207 *
208 * @og.rev 5.4.3.4 (2012/01/12) 新規追åŠ?
209 *
210 * @param key カラãƒ?D
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æƒ??は、シーケンスに管ç�?�—てã�?‚‹ため、この処ç�?¼‘回ごとにã€?
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 }