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