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 }