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 }