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    }