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    }