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    }