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