Source code: javatools/db/ConnectionString.java
1 /*
2 * Class.java
3 *
4 * Created on 8 gennaio 2002, 18.59
5 Javatools (modified version) - Some useful general classes.
6 Copyright (C) 2002-2003 Chris Bitmead (original) Antonio Petrelli (modified)
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
22 Contact me at: brenmcguire@users.sourceforge.net
23 */
24
25 package javatools.db;
26
27 import javatools.util.*;
28 import java.io.*;
29
30 /**
31 * A class to manage the building of connection string for JDBC.
32 * @author Antonio Petrelli
33 * @version 0.3.0
34 */
35 public class ConnectionString {
36
37 /** Returns a connection string for given parameters
38 * @return The needed connection string.
39 * @param dbDir The directory to be taken for DBMSs that use database-files.
40 * @param manager The manager for getting properties.
41 * @param dbms The name of DBMS used
42 * @param driver Name of the JDBC driver class
43 * @param dbmsAddress The address of the dbms
44 * @param port Port used for connection.
45 * Use <CODE>-1</CODE> if you want to use default port.
46 * @param dbName Name of the database to connect to.
47 * @param userName User Name to connect to the DBMS. Notice that this way you will create a connection string in which user name is specified! Then you have not to put it as a parameter when you connect to the DBMS.
48 * @param password Password for connection.
49 * @throws DbException If some parameter are wrong or DbManager not valid.
50 */
51 public static String build(DbManager manager, String dbms, String driver,
52 String dbmsAddress, int port, String dbDir, String dbName,
53 String userName, String password) throws DbException {
54 String buildingString, dbPrefix, userNameClause, passwordClause, dbNameSuffix;
55
56 dbPrefix = dbms+"."+driver+".";
57 try {
58 buildingString = manager.getProps().getProperty(dbPrefix+"connectionString");
59 }
60 catch (IOException e) {
61 throw new DbException(e.getMessage());
62 }
63 if (!buildingString.equals("")) {
64 if (dbmsAddress.equals(""))
65 buildingString = SubstituteVariable.substitute(buildingString, "${dbmsAddress}", "");
66 else
67 buildingString = SubstituteVariable.substitute(buildingString, "${dbmsAddress}", dbmsAddress);
68 buildingString = SubstituteVariable.substitute(buildingString, "${dbName}", dbName);
69 try {
70 dbNameSuffix = (manager.getProps().getProperty(dbPrefix+"dbNameSuffix"));
71 if (dbNameSuffix != null)
72 if (!dbName.equals(""))
73 buildingString = SubstituteVariable.substitute(
74 buildingString, "${dbNameSuffix}", dbNameSuffix);
75 else
76 buildingString = SubstituteVariable.substitute(
77 buildingString, "${dbNameSuffix}", "");
78 }
79 catch (IOException e) {
80 }
81 try {
82 if ((manager.getProps().getProperty(dbPrefix+"pathNeeded")).equals("true")) {
83 if (dbDir != null) {
84 buildingString = SubstituteVariable.substitute(buildingString, "${dbDir}", dbDir);
85 buildingString = SubstituteVariable.substitute(buildingString, "${dbPathColon}", ":");
86 buildingString = SubstituteVariable.substitute(buildingString, "${dbDirSlash}", "/");
87 }
88 else {
89 buildingString = SubstituteVariable.substitute(buildingString, "${dbDir}", "");
90 buildingString = SubstituteVariable.substitute(buildingString, "${dbPathColon}", "");
91 buildingString = SubstituteVariable.substitute(buildingString, "${dbDirSlash}", "");
92 }
93 }
94 }
95 catch (IOException e) {
96 buildingString = SubstituteVariable.substitute(buildingString, "${dbDir}", "");
97 buildingString = SubstituteVariable.substitute(buildingString, "${dbPathColon}", "");
98 buildingString = SubstituteVariable.substitute(buildingString, "${dbDirSlash}", "");
99 }
100 try {
101 if (port <= 0) {
102 if ((manager.getProps().getProperty(dbPrefix+"defaultPortNeeded")).equals("true")) {
103 buildingString = SubstituteVariable.substitute(buildingString, "${port}",
104 manager.getProps().getProperty(dbms+".defaultPort"));
105 buildingString = SubstituteVariable.substitute(buildingString, "${portColon}", ":");
106 }
107 else {
108 buildingString = SubstituteVariable.substitute(buildingString, "${port}", "");
109 buildingString = SubstituteVariable.substitute(buildingString, "${portColon}", "");
110 }
111 }
112 else {
113 buildingString = SubstituteVariable.substitute(buildingString, "${port}", Integer.toString(port));
114 buildingString = SubstituteVariable.substitute(buildingString, "${portColon}", ":");
115 }
116 }
117 catch (IOException e) {
118 buildingString = SubstituteVariable.substitute(buildingString, "${port}", "");
119 buildingString = SubstituteVariable.substitute(buildingString, "${portColon}", "");
120 }
121 if (userName.equals("")) {
122 buildingString = SubstituteVariable.substitute(buildingString, "${userName}", "");
123 buildingString = SubstituteVariable.substitute(buildingString, "${password}", "");
124 buildingString = SubstituteVariable.substitute(buildingString, "${userNameClause}", "");
125 buildingString = SubstituteVariable.substitute(buildingString, "${userNameInterrogation}", "");
126 buildingString = SubstituteVariable.substitute(buildingString, "${passwordClause}", "");
127 buildingString = SubstituteVariable.substitute(buildingString, "${passwordAmpersand}", "");
128 }
129 else {
130 try {
131 userNameClause = manager.getProps().getProperty(dbPrefix+"userNameClause");
132 passwordClause = manager.getProps().getProperty(dbPrefix+"passwordClause");
133 }
134 catch (IOException e) {
135 throw new DbException(e.getMessage());
136 }
137 if (!userNameClause.equals("") && !passwordClause.equals("")) {
138 buildingString = SubstituteVariable.substitute(buildingString, "${userName}", userName);
139 buildingString = SubstituteVariable.substitute(buildingString, "${password}", password);
140 buildingString = SubstituteVariable.substitute(buildingString, "${userNameClause}", userNameClause);
141 buildingString = SubstituteVariable.substitute(buildingString, "${userNameInterrogation}", "?");
142 buildingString = SubstituteVariable.substitute(buildingString, "${passwordClause}", passwordClause);
143 buildingString = SubstituteVariable.substitute(buildingString, "${passwordAmpersand}", "&");
144 }
145 else {
146 buildingString = SubstituteVariable.substitute(buildingString, "${userName}", "");
147 buildingString = SubstituteVariable.substitute(buildingString, "${password}", "");
148 buildingString = SubstituteVariable.substitute(buildingString, "${userNameClause}", "");
149 buildingString = SubstituteVariable.substitute(buildingString, "${userNameInterrogation}", "");
150 buildingString = SubstituteVariable.substitute(buildingString, "${passwordClause}", "");
151 buildingString = SubstituteVariable.substitute(buildingString, "${passwordAmpersand}", "");
152 }
153 }
154 if (buildingString.indexOf("${charSetAmpersand}") >= 0) {
155 if (userName != null || userName.equals(""))
156 buildingString = SubstituteVariable.substitute(buildingString, "${charSetAmpersand}", "&");
157 else
158 buildingString = SubstituteVariable.substitute(buildingString, "${charSetAmpersand}", "?");
159 }
160 }
161 return buildingString;
162 }
163
164 /** Returns a connection string for given parameters
165 * @return The needed connection string.
166 * @param manager The manager for getting properties.
167 * @param dbms The name of DBMS used
168 * @param driver Name of the JDBC driver class
169 * @param dbmsAddress The address of the dbms
170 * @param port Port used for connection.
171 * Use <CODE>-1</CODE> if you want to use default port.
172 * @param dbName Name of the database to connect to.
173 * @param userName User Name to connect to the DBMS. Notice that this way you will create a connection string in which user name is specified! Then you have not to put it as a parameter when you connect to the DBMS.
174 * @param password Password for connection.
175 * @throws DbException If some parameter are wrong or DbManager not valid.
176 */
177 public static String build(DbManager manager, String dbms, String driver, String dbmsAddress, int port, String dbName,
178 String userName, String password) throws DbException {
179 return build (manager, dbms, driver, dbmsAddress, port, null, dbName, userName, password);
180 }
181 }