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 }