44import java .io .FileInputStream ;
55import java .io .IOException ;
66import java .io .InputStream ;
7+ import java .sql .Connection ;
8+ import java .sql .DriverManager ;
9+ import java .sql .PreparedStatement ;
10+ import java .sql .ResultSet ;
11+ import java .sql .SQLException ;
12+ import java .sql .Statement ;
713import java .util .ArrayList ;
814import java .util .Arrays ;
915import java .util .Collection ;
1016import java .util .Collections ;
17+ import java .util .HashMap ;
1118import java .util .Properties ;
1219
1320import org .apache .log4j .Logger ;
1421import org .buddycloud .channelserver .channel .LocalDomainChecker ;
1522import org .xmpp .packet .JID ;
1623
1724public class Configuration extends Properties {
25+
26+
1827 private static final Logger LOGGER = Logger .getLogger (Configuration .class );
1928
2029 private static final long serialVersionUID = 1L ;
@@ -58,6 +67,10 @@ public class Configuration extends Properties {
5867
5968 public static final String DATABASE_ENV = "database" ;
6069
70+ private static final String JDBC_CONNECTION_STRING = "jdbc.proxool.driver-url" ;
71+ private static final String JDBC_PASSWORD = "jdbc.password" ;
72+ private static final String JDBC_USER = "jdbc.user" ;
73+
6174 private static Configuration instance = null ;
6275
6376 private Collection <JID > adminUsers = new ArrayList <JID >();
@@ -73,7 +86,7 @@ private Configuration() {
7386 if (null == databaseConnectionString ) {
7487 loadConfigurationFromFile ();
7588 } else {
76- loadConfigurationFromDatabase ();
89+ loadConfigurationFromDatabase (databaseConnectionString );
7790 }
7891
7992 } catch (Exception e ) {
@@ -82,8 +95,26 @@ private Configuration() {
8295 }
8396 }
8497
85- private void loadConfigurationFromDatabase () {
86- // TODO(lloydwatkin) Auto-generated method stub
98+ private void loadConfigurationFromDatabase (String connectionString ) throws SQLException {
99+ Connection connection = null ;
100+ try {
101+ connection = DriverManager .getConnection (connectionString );
102+ PreparedStatement statement = connection .prepareStatement ("SELECT \" key\" , \" value\" FROM 'configuration';" );
103+ ResultSet rs = statement .executeQuery ();
104+ while (rs .next ()) {
105+ conf .setProperty (rs .getString (1 ), rs .getString (2 ));
106+ }
107+ conf .setProperty (JDBC_CONNECTION_STRING , connectionString );
108+ conf .remove (JDBC_USER );
109+ conf .remove (JDBC_PASSWORD );
110+ } catch (SQLException e ) {
111+ LOGGER .error ("Could not get configuration from database" );
112+ System .exit (1 );
113+ } finally {
114+ if (null != connection ) {
115+ connection .close ();
116+ }
117+ }
87118
88119 }
89120
@@ -248,16 +279,16 @@ public boolean isLocalJID(JID jid) {
248279 }
249280
250281 public String getDatabaseConnectionUrl () {
251- String url = this .getProperty ("jdbc.proxool.driver-url" );
252- if (this .containsKey ("jdbc.user" )) {
282+ String url = this .getProperty (JDBC_CONNECTION_STRING );
283+ if (this .containsKey (JDBC_USER )) {
253284 url +=
254- "?user=" + this .getProperty ("jdbc.user" ) + "&password="
255- + this .getProperty ("jdbc.password" );
285+ "?user=" + this .getProperty (JDBC_USER ) + "&password="
286+ + this .getProperty (JDBC_PASSWORD );
256287 }
257288 return url ;
258289 }
259-
290+
260291 public boolean containsKey (Object value ) {
261292 return conf .containsKey (value );
262- }
293+ }
263294}
0 commit comments