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 }