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    }