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.fukurou.db;
017
018 import java.sql.DatabaseMetaData;
019 import java.sql.SQLException;
020 import java.util.Locale;
021 import java.util.Properties;
022
023 /**
024 * JAXBã�§è‡ªå‹•生æˆ�ã�•れã�ŸDBIDクラスを拡張ã�—ã�Ÿã‚¯ãƒ©ã‚¹ã�§ã�™ã?
025 * (継承ã�—ã�¦ã�?‚‹ã‚�ã�‘ã�§ã�¯ã�ªã�?
026 * <BR>
027 * 以下ã?属æ?ã�Œè¿½åŠ?�•れã�¦ã�?�¾ã�™ã?<BR>
028 * dbProductName<BR>
029 * dbProductVersion<BR>
030 * driverName<BR>
031 * driverVersion<BR>
032 *
033 * @og.rev 4.0.0.0 (2007/10/25) æ–°è¦�作æ?
034 * @og.rev 5.1.7.0 (2010/06/01) メソãƒ?ƒ‰ã�®ä¿®æ£ã€�Cloneable ã�®è¿½åŠ?æµ?�„コピã?)
035 * @og.rev 5.6.6.0 (2013/07/05) 表é¡?title)属æ?を追åŠ?
036 *
037 * @version 4.0
038 * @author 高橋æ£å’?
039 * @since JDK5.0,
040 */
041 public class EDbid implements Cloneable {
042
043 private String dbidKey = "DEFAULT";
044 private String title = null; // 5.6.6.0 (2013/07/05) 表é¡?title)属æ?を追åŠ?
045 private String url = null;
046 private String user = null;
047 // private String password = null;
048 private String password = ""; // 5.7.2.0 (2014/01/10) パスワードã?空æ–?—ã‚’åˆ�期値ã�¨ã�™ã‚‹ã€?
049 private boolean readonly = false;
050 private int mincount = 3;
051 private int maxcount = 30;
052 private int pooltime = 3000;
053 private boolean isUseAppInfo = true;
054 private boolean isParamMetaData = false; // 5.3.8.0 (2011/08/01)
055
056 private String dbProductName = null;
057 private String dbProductVersion= null;
058 private String driverName = null;
059 private String driverVersion = null;
060
061 /* DBConfigã�§propertiesã�®æŒ?®šã‚’å�¯èƒ½ã�«ã�—ã�¾ã�?5.5.2.0 */
062 private final Properties props = new Properties();
063
064 /**
065 * dbidKey���
066 *
067 * å†?ƒ¨çš?�«ã�¯ã€�大æ–?—ã?ã�¿ã�§ç®¡ç�?�—ã�¾ã�™ã?
068 *
069 * @return dbidã‚ー
070 */
071 public String getDbidKey() {
072 return dbidKey;
073 }
074
075 /**
076 * dbidã‚ーã�®è¨å®?
077 *
078 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
079 * å†?ƒ¨çš?�«ã�¯ã€�大æ–?—ã?ã�¿ã�§ç®¡ç�?�—ã�¾ã�™ã?
080 *
081 * @og.rev 4.1.0.1 (2008/01/21) 登録時ã�«ã€�大æ–?—ã�«å¤‰æ�›ã�™ã‚‹ã€?
082 *
083 * @param value 接続å?ID
084 */
085 protected void setDbidKey( final String value ) {
086 if( isNotNull( value ) ) { dbidKey = value.toUpperCase( Locale.JAPAN ); }
087 }
088
089 /**
090 * 表é¡?title)属æ?ã�®å�–å¾?
091 *
092 * ã�“ã?ã€�dbidKey を表ã�™è¡¨é¡Œã‚’å�–å¾—ã�—ã�¾ã�™ã?ラベル?ˆå��å‰�)ã?よã�†ã�ªã‚‚ã?ã�§ã�™ã?
093 *
094 * @og.rev 5.6.6.0 (2013/07/05) 新�追�
095 *
096 * @return 表�title)
097 */
098 public String getTitle() {
099 return title;
100 }
101
102 /**
103 * 表é¡?title)ã�®è¨å®?
104 *
105 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
106 *
107 * @og.rev 5.6.6.0 (2013/07/05) 新�追�
108 * @og.rev 5.6.8.0 (2013/09/06) title ã�Œæœªè¨å®šã?時ã?ã€�dbidKey ã‚’ã‚»ãƒ?ƒˆã�—ã�¦ã�Šã��ã�¾ã�™ã?
109 *
110 * @param value 表�title)
111 */
112 protected void setTitle( final String value ) {
113 if( isNotNull( value ) ) { title = value; }
114 else { title = dbidKey; } // 5.6.8.0 (2013/09/06)
115 }
116
117 /**
118 * ?µ?²?¬ã�®å�–å¾?
119 *
120 * @return ?µ?²?¬
121 */
122 public String getUrl() {
123 return url;
124 }
125
126 /**
127 * ?µ?²?¬ã�®è¨å®?
128 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
129 *
130 * @param value ?µ?²?¬æ–?—å?
131 */
132 protected void setUrl( final String value ) {
133 if( isNotNull( value ) ) { url = value; }
134 }
135
136 /**
137 * ユーザー���
138 *
139 * @return ユーザー
140 */
141 public String getUser() {
142 return user;
143 }
144
145 /**
146 * userã�®è¨å®?
147 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
148 *
149 * @param value useræ–?—å?
150 */
151 protected void setUser( final String value ) {
152 if( isNotNull( value ) ) { user = value; }
153 }
154
155 /**
156 * パスワードã?å�–å¾?
157 *
158 * @return パスワー�
159 */
160 public String getPassword() {
161 return password;
162 }
163
164 /**
165 * パスワードã?è¨å®?
166 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
167 *
168 * @param value パスワード文å—å?
169 */
170 protected void setPassword( final String value ) {
171 if( isNotNull( value ) ) { password = value; }
172 }
173
174 /**
175 * readonly���
176 *
177 * @return [true:èªã�¿å�–り専用/false:通常]
178 */
179 public boolean isReadonly() {
180 return readonly ;
181 }
182
183 /**
184 * readonlyã�®è¨å®?
185 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
186 *
187 * @param value readonlyæ–?—å? [true/false]
188 */
189 // protected void setReadonly( final Boolean value ) {
190 // if( value != null ) { readonly = value.booleanValue(); }
191 // }
192 protected void setReadonly( final String value ) {
193 if( isNotNull( value ) ) { readonly = Boolean.valueOf( value ).booleanValue(); }
194 }
195
196 /**
197 * æœ?°�æ•°ã�®å�–å¾?
198 *
199 * @return æœ?°�æ•°
200 */
201 public int getMincount() {
202 return mincount;
203 }
204
205 /**
206 * æœ?°�æ•°ã�®è¨å®?
207 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
208 *
209 * @param value æœ?°�æ•°(æ•°å—タイプ文å—å?)
210 */
211 // protected void setMincount( final Integer value ) {
212 // if( value != null ) { mincount = value.intValue(); }
213 // }
214 protected void setMincount( final String value ) {
215 if( isNotNull( value ) ) { mincount = Integer.valueOf( value ).intValue(); }
216 }
217
218 /**
219 * æœ?¤§æ•°ã�®å�–å¾?
220 *
221 * @return æœ?¤§æ•°
222 */
223 public int getMaxcount() {
224 return maxcount;
225 }
226
227 /**
228 * æœ?¤§æ•°ã�®è¨å®?
229 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
230 *
231 * @param value æœ?¤§æ•°(æ•°å—タイプ文å—å?)
232 */
233 // protected void setMaxcount( final Integer value ) {
234 // if( value != null ) { maxcount = value.intValue(); }
235 // }
236 protected void setMaxcount( final String value ) {
237 if( isNotNull( value ) ) { maxcount = Integer.valueOf( value ).intValue(); }
238 }
239
240 /**
241 * プã?ルã�«ä¿�管ã�—ã�¦ç½®ã��時é–?ç§’æ•°))ã�®å�–å¾?
242 *
243 * @return プã?ルã�«ä¿�管ã�™ã‚‹æ™‚é–“(ç§’æ•°)
244 */
245 public int getPooltime() {
246 return pooltime;
247 }
248
249 /**
250 * プã?ルã�«ä¿�管ã�—ã�¦ç½®ã��時é–?ç§’æ•°))ã�®è¨å®?
251 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
252 *
253 * @param value プã?ルã�«ä¿�管ã�—ã�¦ç½®ã��時é–?ç§’æ•°)(æ•°å—タイプ文å—å?)
254 */
255 // protected void setPooltime( final Integer value ) {
256 // if( value != null ) { pooltime = value.intValue(); }
257 // }
258 protected void setPooltime( final String value ) {
259 if( isNotNull( value ) ) { pooltime = Integer.valueOf( value ).intValue(); }
260 }
261
262 /**
263 * ApplicationInfoオブジェクトを使用ã�™ã‚‹ã�‹ã�©ã�?�‹[true/false]ã�®æƒ??ã‚’å�–å¾?
264 *
265 * @return 使用ã�™ã‚‹ã�‹ã�©ã�?�‹
266 */
267 public boolean isApplicationInfo() {
268 return isUseAppInfo ;
269 }
270
271 /**
272 * ApplicationInfoオブジェクトを使用ã�™ã‚‹ã�‹ã�©ã�?�‹[true/false]ã�®æƒ??ã‚’è¨å®?
273 * 引数ã�Œã?null ã�§ã�ªã��ã?ã‚¼ãƒæ–?—å?ã�§ã‚‚ã�ªã�??å�ˆã?ã�¿ã€�ã‚»ãƒ?ƒˆã�—ã�¾ã�™ã?
274 *
275 * @param value ApplicationInfoオブジェクトを使用ã�™ã‚‹ã�‹ã�©ã�?�‹ [true/false]
276 */
277 // protected void setApplicationInfo( final Boolean value ) {
278 // if( value != null ) { isUseAppInfo = value.booleanValue(); }
279 // }
280 protected void setApplicationInfo( final String value ) {
281 if( isNotNull( value ) ) { isUseAppInfo = Boolean.valueOf( value ).booleanValue(); }
282 }
283
284 /**
285 * メタ�?タを�����
286 * dbProductName,dbProductVersion,driverName,driverVersion
287 * ã‚’ä¸?‹¬ã�§è¨å®šã�—ã�¾ã�?
288 *
289 * @og.rev 4.0.0.0 (2007/10/30) ä¿�æŒ�æƒ??オブジェクト化ã�«ä¼´ã�?¤‰æ›´
290 * @og.rev 5.3.8.0 (2011/08/01) postgreSQL時ã?カラãƒ?‚¿ã‚¤ãƒ—判定ã?å¿?¦�有無(ApplicationInfo.useParameterMetaData)
291 *
292 * @param meta メタ�?タオブジェク�
293 * @throws SQLException ãƒ??タベã?スアクセスエラー
294 */
295 public void setMetaDataInfo( final DatabaseMetaData meta ) throws SQLException {
296 dbProductName = meta.getDatabaseProductName() ;
297 dbProductVersion= meta.getDatabaseProductVersion() ;
298 driverName = meta.getDriverName() ;
299 driverVersion = meta.getDriverVersion() ;
300
301 isUseAppInfo = isUseAppInfo && "ORACLE".equalsIgnoreCase( dbProductName ) ;
302 isParamMetaData = "PostgreSQL".equalsIgnoreCase( dbProductName ); // 5.3.8.0 (2011/08/01)
303 }
304
305 /**
306 * DBプãƒãƒ?‚¯ãƒˆå��ã�®å�–å¾?
307 *
308 * @return DBプãƒãƒ?‚¯ãƒˆå��
309 */
310 public String getDbProductName() {
311 return dbProductName;
312 }
313
314 /**
315 * DBプãƒãƒ?‚¯ãƒˆã?ãƒ�ã?ジョンã�®å�–å¾?
316 *
317 * @return DBプãƒãƒ?‚¯ãƒˆã?ãƒ�ã?ジョン
318 */
319 public String getDbProductVersion() {
320 return dbProductVersion;
321 }
322
323 /**
324 * ドライãƒ�ã?å��ã?å�–å¾?
325 *
326 * @return ドライãƒ�ã?å�?
327 */
328 public String getDriverName() {
329 return driverName;
330 }
331
332 /**
333 * ドライãƒ�ã?ã�®ãƒ�ã?ジョンã�®å�–å¾?
334 *
335 * @return ドライãƒ�ã?ã�®ãƒ�ã?ジョン
336 */
337 public String getDriverVersion() {
338 return driverVersion;
339 }
340
341 /**
342 * ParamMetaData を利用ã�™ã‚‹ã�‹ã�©ã�?�‹[true/false]ã‚’è¿”ã�—ã�¾ã�™ã?
343 *
344 * ã�“れã�¯ã€�PostgreSQL ã�®æ™‚ã?ã€�trueã�«ã�ªã‚Šã�¾ã�™ã?
345 *
346 * @og.rev 5.3.8.0 (2011/08/01) 新�追�
347 *
348 * @return 利用ã�™ã‚‹ã�‹ã�©ã�?�‹[true/false]
349 */
350 public boolean useParamMetaData() {
351 return isParamMetaData ;
352 }
353
354 /**
355 * propMap��追�
356 *
357 * @og.rev 5.5.2.0 (2012/05/01) 新�追�
358 * @param key プãƒãƒ‘ティã�®ã‚ー
359 * @param val ãƒ�ãƒãƒ‘ティã�®å€¤
360 */
361 protected void addProp(final String key, final String val){
362 props.put ( key, val );
363 }
364
365 /**
366 * propMap��追�
367 * æœ??ã�®=ã�§keyã�¨valueã‚’å?割ã�™ã‚‹
368 *
369 * @og.rev 5.5.2.0 (2012/05/01) 新�追�
370 * @og.rev 5.5.2.1 (2012/05/07) propsã�¸ã�®è¿½åŠ?¼�れ,カンマを=ã�«å¤‰æ›´
371 * @param prop プãƒãƒ‘ティã�®ã‚ーã�¨å€¤ã�®çµ?�¿å�ˆã‚�ã�?
372 */
373 protected void addProp(final String prop){
374 // if( prop!=null && prop.indexOf( ',' ) > 0 ){
375 if( prop!=null && prop.indexOf( '=' ) > 0 ){
376 final String key = prop.substring( 0 , prop.indexOf('=') );
377 final String val = prop.substring( prop.indexOf('=') + 1 );
378 addProp( key, val ); // 5.5.2.1 (2012/05/07)
379 }
380 }
381
382 /**
383 * propMap���
384 *
385 * @og.rev 5.5.2.0 (2012/05/01) 新�追�
386 *
387 * @return å†?ƒ¨Propertiesオブジェクãƒ?
388 */
389 public Properties getProps(){
390 return props;
391 }
392
393 /**
394 * æ–?—å?ã�Œnullã�§ã‚‚空æ–?—å?ã�§ã‚‚ã�ªã�?�‹ã�©ã�?�‹ã‚’評価ã�—ã�¾ã�™ã?
395 *
396 * スペã?スæ–?—ã?ã€�trim() ã�—ã�¦ã�‹ã‚‰ã€�length() ã�—ã�¾ã�™ã?ã�§ã€�false ã�«ã�ªã‚Šã�¾ã�™ã?
397 *
398 * @og.rev 5.1.7.0 (2010/06/01) æ–°è¦�作æ?
399 *
400 * @param value 評価ã�™ã‚‹æ–?—å?
401 *
402 * @return çµ�æžœ(true:nullã�§ã‚‚空æ–?—å?ã�§ã‚‚ã�ªã�?
403 */
404 private boolean isNotNull( final String value ) {
405 return ( value != null && value.trim().length() > 0 ) ;
406 }
407
408 /**
409 * 自åˆ??身ã�® clone ã‚’è¿”ã�—ã�¾ã�™ã?
410 *
411 * Cloneable ã�®å®Ÿè£?�§ã€�å?部çš?�«ã�¯ã€�Object クラスã�® clone メソãƒ?ƒ‰ã‚’èªã‚“ã�§ã�?�¾ã�™ã?
412 *
413 * @og.rev 5.1.7.0 (2010/06/01) æ–°è¦�作æ?
414 *
415 * @return 自åˆ??身ã�® clone ã‚’è¿”ã�—ã�¾ã�™ã?
416 */
417 @Override
418 public EDbid clone() {
419 try {
420 return (EDbid)super.clone() ;
421 }
422 catch( CloneNotSupportedException ex ) {
423 String errMsg = "clone �失敗����� ;
424 throw new RuntimeException( errMsg,ex );
425 }
426 }
427
428 /**
429 * 簡易ã�ªå†?ƒ¨æƒ??ã�®æ–?—å?化ã�—ã�¾ã�™ã?
430 *
431 * @og.rev 5.3.4.0 (2011/04/01) toString() �簡易版
432 * @og.rev 5.5.2.1 (2012/05/07) propertiesæƒ??ã‚’å?力ã�™ã‚‹ã‚ˆã�?�«ã�™ã‚‹
433 * @og.rev 5.6.6.0 (2013/07/05) 表é¡?title)属æ?を追åŠ?
434 *
435 * @return å†?ƒ¨æƒ??ã�®æ–?—å?
436 */
437 public String info() {
438 final String CR = System.getProperty( "line.separator" );
439 final StringBuilder buf = new StringBuilder();
440 buf.append( "DBID=[" ).append( dbidKey ).append( "] , " );
441 buf.append( "TITLE=[" ).append( title ).append( "] , " ); // 5.6.6.0 (2013/07/05) 表é¡?title)属æ?を追åŠ?
442 buf.append( "URL=[" ).append( url ).append( "] , " );
443 buf.append( "USER=[" ).append( user ).append( "]" );
444 buf.append( CR );
445 buf.append( "DB Product=[" ).append( dbProductName );
446 buf.append( "(" ).append( dbProductVersion ).append( ")" ).append( "]" );
447 buf.append( CR );
448 buf.append( "DB Driver =[" ).append( driverName );
449 buf.append( "(" ).append( driverVersion ).append( ")" ).append( "]" );
450 buf.append( CR );
451 buf.append( "PROPERTIES=[" ).append( props.toString() ).append( "]" ); // 5.5.2.1 (2012/05/07)
452 buf.append( CR );
453 return buf.toString();
454 }
455
456 /**
457 * å†?ƒ¨æƒ??ã‚’æ–‡å—å?化ã�—ã�¾ã�™ã?
458 *
459 * @og.rev 5.3.4.0 (2011/04/01) info() メソãƒ?ƒ‰ã‚’利用ã�™ã‚‹ã‚ˆã�†ã�«å¤‰æ›´
460 *
461 * @return å†?ƒ¨æƒ??ã�®æ–?—å?
462 */
463 @Override
464 public String toString() {
465 final String CR = System.getProperty( "line.separator" );
466 final StringBuilder buf = new StringBuilder();
467 buf.append( info() );
468 // buf.append( "DBID=[" ).append( dbidKey ).append( "]," );
469 // buf.append( "URL =[" ).append( url ).append( "]," );
470 // buf.append( "USER=[" ).append( user ).append( "]," );
471 // buf.append( CR );
472 // buf.append( "DB Product=[" ).append( dbProductName );
473 // buf.append( "(" ).append( dbProductVersion ).append( ")" ).append( "]" );
474 // buf.append( CR );
475 // buf.append( "DB Driver =[" ).append( driverName );
476 // buf.append( "(" ).append( driverVersion ).append( ")" ).append( "]" );
477 // buf.append( CR );
478 buf.append( "MINCOUNT=[" ).append( mincount ).append( "]," );
479 buf.append( "MAXCOUNT=[" ).append( maxcount ).append( "]," );
480 buf.append( "POOLTIME=[" ).append( pooltime ).append( "]," );
481 buf.append( "READONLY=[" ).append( readonly ).append( "]," );
482 buf.append( "APPINFO =[" ).append( isUseAppInfo ).append( "]" );
483
484 buf.append( CR );
485 return buf.toString();
486 }
487 }