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 }