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 }