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 boolean readonly = false;
049 private int mincount = 3;
050 private int maxcount = 30;
051 private int pooltime = 3000;
052 private boolean isUseAppInfo = true;
053 private boolean isParamMetaData = false; // 5.3.8.0 (2011/08/01)
054
055 private String dbProductName = null;
056 private String dbProductVersion= null;
057 private String driverName = null;
058 private String driverVersion = null;
059
060 /* DBConfigでpropertiesの?を可能にしま?5.5.2.0 */
061 private final Properties props = new Properties();
062
063 /**
064 * dbidKeyの取?
065 *
066 * ??は、大??みで管?ます?
067 *
068 * @return dbidキー
069 */
070 public String getDbidKey() {
071 return dbidKey;
072 }
073
074 /**
075 * dbidキーの設?
076 *
077 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
078 * ??は、大??みで管?ます?
079 *
080 * @og.rev 4.1.0.1 (2008/01/21) 登録時に、大?に変換する?
081 *
082 * @param value 接続?ID
083 */
084 protected void setDbidKey( final String value ) {
085 if( isNotNull( value ) ) { dbidKey = value.toUpperCase( Locale.JAPAN ); }
086 }
087
088 /**
089 * 表?title)属?の取?
090 *
091 * こ?、dbidKey を表す表題を取得します?ラベル?名前)?ようなも?です?
092 *
093 * @og.rev 5.6.6.0 (2013/07/05) 新規追?
094 *
095 * @return 表?title)
096 */
097 public String getTitle() {
098 return title;
099 }
100
101 /**
102 * 表?title)の設?
103 *
104 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
105 *
106 * @og.rev 5.6.6.0 (2013/07/05) 新規追?
107 *
108 * @param value 表?title)
109 */
110 protected void setTitle( final String value ) {
111 if( isNotNull( value ) ) { title = value; }
112 }
113
114 /**
115 * ???の取?
116 *
117 * @return ???
118 */
119 public String getUrl() {
120 return url;
121 }
122
123 /**
124 * ???の設?
125 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
126 *
127 * @param value ?????
128 */
129 protected void setUrl( final String value ) {
130 if( isNotNull( value ) ) { url = value; }
131 }
132
133 /**
134 * ユーザーの取?
135 *
136 * @return ユーザー
137 */
138 public String getUser() {
139 return user;
140 }
141
142 /**
143 * userの設?
144 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
145 *
146 * @param value user??
147 */
148 protected void setUser( final String value ) {
149 if( isNotNull( value ) ) { user = value; }
150 }
151
152 /**
153 * パスワード?取?
154 *
155 * @return パスワー?
156 */
157 public String getPassword() {
158 return password;
159 }
160
161 /**
162 * パスワード?設?
163 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
164 *
165 * @param value パスワード文字?
166 */
167 protected void setPassword( final String value ) {
168 if( isNotNull( value ) ) { password = value; }
169 }
170
171 /**
172 * readonlyの取?
173 *
174 * @return [true:読み取り専用/false:通常]
175 */
176 public boolean isReadonly() {
177 return readonly ;
178 }
179
180 /**
181 * readonlyの設?
182 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
183 *
184 * @param value readonly?? [true/false]
185 */
186 // protected void setReadonly( final Boolean value ) {
187 // if( value != null ) { readonly = value.booleanValue(); }
188 // }
189 protected void setReadonly( final String value ) {
190 if( isNotNull( value ) ) { readonly = Boolean.valueOf( value ).booleanValue(); }
191 }
192
193 /**
194 * ?数の取?
195 *
196 * @return ?数
197 */
198 public int getMincount() {
199 return mincount;
200 }
201
202 /**
203 * ?数の設?
204 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
205 *
206 * @param value ?数(数字タイプ文字?)
207 */
208 // protected void setMincount( final Integer value ) {
209 // if( value != null ) { mincount = value.intValue(); }
210 // }
211 protected void setMincount( final String value ) {
212 if( isNotNull( value ) ) { mincount = Integer.valueOf( value ).intValue(); }
213 }
214
215 /**
216 * ?数の取?
217 *
218 * @return ?数
219 */
220 public int getMaxcount() {
221 return maxcount;
222 }
223
224 /**
225 * ?数の設?
226 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
227 *
228 * @param value ?数(数字タイプ文字?)
229 */
230 // protected void setMaxcount( final Integer value ) {
231 // if( value != null ) { maxcount = value.intValue(); }
232 // }
233 protected void setMaxcount( final String value ) {
234 if( isNotNull( value ) ) { maxcount = Integer.valueOf( value ).intValue(); }
235 }
236
237 /**
238 * プ?ルに保管して置く時?秒数))の取?
239 *
240 * @return プ?ルに保管する時間(秒数)
241 */
242 public int getPooltime() {
243 return pooltime;
244 }
245
246 /**
247 * プ?ルに保管して置く時?秒数))の設?
248 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
249 *
250 * @param value プ?ルに保管して置く時?秒数)(数字タイプ文字?)
251 */
252 // protected void setPooltime( final Integer value ) {
253 // if( value != null ) { pooltime = value.intValue(); }
254 // }
255 protected void setPooltime( final String value ) {
256 if( isNotNull( value ) ) { pooltime = Integer.valueOf( value ).intValue(); }
257 }
258
259 /**
260 * ApplicationInfoオブジェクトを使用するかど?[true/false]の??を取?
261 *
262 * @return 使用するかど?
263 */
264 public boolean isApplicationInfo() {
265 return isUseAppInfo ;
266 }
267
268 /**
269 * ApplicationInfoオブジェクトを使用するかど?[true/false]の??を設?
270 * 引数が?null でなく?ゼロ??でもな??合?み、セ?します?
271 *
272 * @param value ApplicationInfoオブジェクトを使用するかど? [true/false]
273 */
274 // protected void setApplicationInfo( final Boolean value ) {
275 // if( value != null ) { isUseAppInfo = value.booleanValue(); }
276 // }
277 protected void setApplicationInfo( final String value ) {
278 if( isNotNull( value ) ) { isUseAppInfo = Boolean.valueOf( value ).booleanValue(); }
279 }
280
281 /**
282 * メタ??タを受け取って
283 * dbProductName,dbProductVersion,driverName,driverVersion
284 * を?で設定しま?
285 *
286 * @og.rev 4.0.0.0 (2007/10/30) 保持??オブジェクト化に伴?更
287 * @og.rev 5.3.8.0 (2011/08/01) postgreSQL時?カラ?イプ判定??有無(ApplicationInfo.useParameterMetaData)
288 *
289 * @param meta メタ??タオブジェク?
290 * @throws SQLException
291 */
292 public void setMetaDataInfo( final DatabaseMetaData meta ) throws SQLException {
293 dbProductName = meta.getDatabaseProductName() ;
294 dbProductVersion= meta.getDatabaseProductVersion() ;
295 driverName = meta.getDriverName() ;
296 driverVersion = meta.getDriverVersion() ;
297
298 isUseAppInfo = isUseAppInfo && "ORACLE".equalsIgnoreCase( dbProductName ) ;
299 isParamMetaData = "PostgreSQL".equalsIgnoreCase( dbProductName ); // 5.3.8.0 (2011/08/01)
300 }
301
302 /**
303 * DBプロ?ト名の取?
304 *
305 * @return DBプロ?ト名
306 */
307 public String getDbProductName() {
308 return dbProductName;
309 }
310
311 /**
312 * DBプロ?ト?バ?ジョンの取?
313 *
314 * @return DBプロ?ト?バ?ジョン
315 */
316 public String getDbProductVersion() {
317 return dbProductVersion;
318 }
319
320 /**
321 * ドライバ?名?取?
322 *
323 * @return ドライバ??
324 */
325 public String getDriverName() {
326 return driverName;
327 }
328
329 /**
330 * ドライバ?のバ?ジョンの取?
331 *
332 * @return ドライバ?のバ?ジョン
333 */
334 public String getDriverVersion() {
335 return driverVersion;
336 }
337
338 /**
339 * ParamMetaData を利用するかど?[true/false]を返します?
340 *
341 * これは、PostgreSQL の時?、trueになります?
342 *
343 * @og.rev 5.3.8.0 (2011/08/01) 新規追?
344 *
345 * @return 利用するかど?[true/false]
346 */
347 public boolean useParamMetaData() {
348 return isParamMetaData ;
349 }
350
351 /**
352 * propMapへの追?
353 *
354 * @og.rev 5.5.2.0 (2012/05/01) 新規追?
355 * @param key プロパティのキー
356 * @param val ポロパティの値
357 */
358 protected void addProp(final String key, final String val){
359 props.put ( key, val );
360 }
361
362 /**
363 * propMapへの追?
364 * ??の=でkeyとvalueを?割する
365 *
366 * @og.rev 5.5.2.0 (2012/05/01) 新規追?
367 * @og.rev 5.5.2.1 (2012/05/07) propsへの追?れ,カンマを=に変更
368 * @param prop プロパティのキーと値の?合わ?
369 */
370 protected void addProp(final String prop){
371 // if( prop!=null && prop.indexOf( ',' ) > 0 ){
372 if( prop!=null && prop.indexOf( '=' ) > 0 ){
373 final String key = prop.substring( 0 , prop.indexOf('=') );
374 final String val = prop.substring( prop.indexOf('=') + 1 );
375 addProp( key, val ); // 5.5.2.1 (2012/05/07)
376 }
377 }
378
379 /**
380 * propMapの取?
381 *
382 * @og.rev 5.5.2.0 (2012/05/01) 新規追?
383 *
384 * @return ?Propertiesオブジェク?
385 */
386 public Properties getProps(){
387 return props;
388 }
389
390 /**
391 * ??がnullでも空??でもな?ど?を評価します?
392 *
393 * スペ?ス??、trim() してから、length() します?で、false になります?
394 *
395 * @og.rev 5.1.7.0 (2010/06/01) 新規作?
396 *
397 * @param value 評価する??
398 *
399 * @return 結果(true:nullでも空??でもな?
400 */
401 private boolean isNotNull( final String value ) {
402 return ( value != null && value.trim().length() > 0 ) ;
403 }
404
405 /**
406 * 自??身の clone を返します?
407 *
408 * Cloneable の実?、?部?は、Object クラスの clone メソ?を読んで?す?
409 *
410 * @og.rev 5.1.7.0 (2010/06/01) 新規作?
411 *
412 * @return 自??身の clone を返します?
413 */
414 @Override
415 public EDbid clone() {
416 try {
417 return (EDbid)super.clone() ;
418 }
419 catch( CloneNotSupportedException ex ) {
420 String errMsg = "clone が失敗しました? ;
421 throw new RuntimeException( errMsg,ex );
422 }
423 }
424
425 /**
426 * 簡易な???の??化します?
427 *
428 * @og.rev 5.3.4.0 (2011/04/01) toString() の簡易版
429 * @og.rev 5.5.2.1 (2012/05/07) properties??を?力するよ?する
430 * @og.rev 5.6.6.0 (2013/07/05) 表?title)属?を追?
431 *
432 * @return ???の??
433 */
434 public String info() {
435 final String CR = System.getProperty( "line.separator" );
436 final StringBuilder buf = new StringBuilder();
437 buf.append( "DBID =[" ).append( dbidKey ).append( "]," );
438 buf.append( "TITLE=[" ).append( title ).append( "]," ); // 5.6.6.0 (2013/07/05) 表?title)属?を追?
439 buf.append( "URL =[" ).append( url ).append( "]," );
440 buf.append( "USER =[" ).append( user ).append( "]," );
441 buf.append( CR );
442 buf.append( "DB Product=[" ).append( dbProductName );
443 buf.append( "(" ).append( dbProductVersion ).append( ")" ).append( "]" );
444 buf.append( CR );
445 buf.append( "DB Driver =[" ).append( driverName );
446 buf.append( "(" ).append( driverVersion ).append( ")" ).append( "]" );
447 buf.append( CR );
448 buf.append( "PROPERTIES=[" ).append( props.toString() ).append( "]" ); // 5.5.2.1 (2012/05/07)
449 buf.append( CR );
450 return buf.toString();
451 }
452
453 /**
454 * ???を文字?化します?
455 *
456 * @og.rev 5.3.4.0 (2011/04/01) info() メソ?を利用するように変更
457 *
458 * @return ???の??
459 */
460 @Override
461 public String toString() {
462 final String CR = System.getProperty( "line.separator" );
463 final StringBuilder buf = new StringBuilder();
464 buf.append( info() );
465 // buf.append( "DBID=[" ).append( dbidKey ).append( "]," );
466 // buf.append( "URL =[" ).append( url ).append( "]," );
467 // buf.append( "USER=[" ).append( user ).append( "]," );
468 // buf.append( CR );
469 // buf.append( "DB Product=[" ).append( dbProductName );
470 // buf.append( "(" ).append( dbProductVersion ).append( ")" ).append( "]" );
471 // buf.append( CR );
472 // buf.append( "DB Driver =[" ).append( driverName );
473 // buf.append( "(" ).append( driverVersion ).append( ")" ).append( "]" );
474 // buf.append( CR );
475 buf.append( "MAXCOUNT=[" ).append( maxcount ).append( "]," );
476 buf.append( "MINCOUNT=[" ).append( mincount ).append( "]," );
477 buf.append( "POOLTIME=[" ).append( pooltime ).append( "]," );
478 buf.append( "READONLY=[" ).append( readonly ).append( "]," );
479 buf.append( "APPINFO =[" ).append( isUseAppInfo ).append( "]," );
480
481 buf.append( CR );
482 return buf.toString();
483 }
484 }