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 }