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    }