1
package org.hisp.dhis.reports.util;
3
import java.io.BufferedReader;
5
import java.io.FileNotFoundException;
6
import java.io.FileReader;
7
import java.io.IOException;
8
import java.sql.Connection;
9
import java.sql.DriverManager;
10
import java.util.ArrayList;
11
import java.util.List;
13
import javax.xml.parsers.DocumentBuilder;
14
import javax.xml.parsers.DocumentBuilderFactory;
16
import org.hisp.dhis.system.database.DatabaseInfo;
17
import org.hisp.dhis.system.database.DatabaseInfoProvider;
18
import org.w3c.dom.Document;
19
import org.w3c.dom.Element;
20
import org.w3c.dom.Node;
21
import org.w3c.dom.NodeList;
22
import org.xml.sax.SAXException;
23
import org.xml.sax.SAXParseException;
25
public class DBConnection
27
// -------------------------------------------------------------------------
29
// -------------------------------------------------------------------------
31
private DatabaseInfoProvider provider;
33
public void setProvider( DatabaseInfoProvider provider )
35
this.provider = provider;
38
// -------------------------------------------------------------------------
40
// -------------------------------------------------------------------------
42
private DatabaseInfo info;
44
public DatabaseInfo getInfo()
50
Connection con = null;
52
String dbConnectionXMLFileName = System.getenv( "DHIS2_HOME" ) + File.separator
53
+ "db" + File.separator + "DBConnections.xml";
56
* To retrieve the db details from xml file
58
public List<String> getDBDeatilsFromXML()
60
List<String> li = null;
63
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
64
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
65
Document doc = docBuilder.parse( new File( dbConnectionXMLFileName ) );
67
NodeList listOfDBConnections = doc.getElementsByTagName( "db-connection" );
69
Node dbConnectionsNode = listOfDBConnections.item( 0 );
70
li = new ArrayList<String>();
71
if ( dbConnectionsNode.getNodeType() == Node.ELEMENT_NODE )
73
Element dbConnectionElement = (Element) dbConnectionsNode;
75
NodeList dbUserNameList = dbConnectionElement.getElementsByTagName( "uname" );
76
Element dbUserNameElement = (Element) dbUserNameList.item( 0 );
77
NodeList textDBUNList = dbUserNameElement.getChildNodes();
78
li.add( 0, ( textDBUNList.item( 0 )).getNodeValue().trim() );
80
NodeList dbUserPwdList = dbConnectionElement.getElementsByTagName( "upwd" );
81
Element dbUserPwdElement = (Element) dbUserPwdList.item( 0 );
82
NodeList textDUPwdList = dbUserPwdElement.getChildNodes();
83
li.add( 1, ( textDUPwdList.item( 0 )).getNodeValue().trim() );
85
NodeList dbURLList = dbConnectionElement.getElementsByTagName( "dburl" );
86
Element dbURLElement = (Element) dbURLList.item( 0 );
87
NodeList textDBURLList = dbURLElement.getChildNodes();
88
li.add( 2, ( textDBURLList.item( 0 )).getNodeValue().trim() );
90
NodeList dbStateNameList = dbConnectionElement.getElementsByTagName( "state-name" );
91
Element dbStateNameElement = (Element) dbStateNameList.item( 0 );
92
NodeList textDBSNameList = dbStateNameElement.getChildNodes();
93
li.add( 3, ( textDBSNameList.item( 0 )).getNodeValue().trim() );
96
catch ( SAXParseException err )
98
System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId() );
99
System.out.println( " " + err.getMessage() );
101
catch ( SAXException e )
103
Exception x = e.getException();
104
((x == null) ? e : x).printStackTrace();
106
catch ( Throwable t )
113
public List<String> getDBDeatilsFromHibernate()
115
String path = System.getenv( "DHIS2_HOME" ) + File.separator
116
+ "hibernate.properties";
117
FileReader fr = null;
118
BufferedReader input = null;
120
List<String> li = new ArrayList<String>();
123
fr = new FileReader( path );
124
input = new BufferedReader( fr );
126
String s = input.readLine();
127
while ( s instanceof String )
129
if ( s.contains( "jdbc:mysql:" ) )
132
* String tempS2[] = s.split("/"); String dbName =
133
* "jdbc:mysql://localhost/"+tempS2[tempS2.length-1].substring(0,
134
* tempS2[tempS2.length-1].indexOf('?'));
135
* System.out.println("DBName : "+dbName); li.add(0,dbName);
137
String tempS2[] = s.split( "=" );
138
String dbName = tempS2[1].substring( 0, tempS2[1].indexOf( '?' ) ).trim();
139
//System.out.println( "DBName : " + dbName );
142
if ( s.contains( "hibernate.connection.username" ) )
144
String tempS2[] = s.split( "=" );
145
//System.out.println( "UserName : " + tempS2[tempS2.length - 1].trim() );
146
li.add( 1, tempS2[tempS2.length - 1].trim() );
148
if ( s.contains( "hibernate.connection.password" ) )
150
String tempS2[] = s.split( "=" );
151
//System.out.println( "PassWord : " + tempS2[tempS2.length - 1].trim() );
152
li.add( 2, tempS2[tempS2.length - 1].trim() );
154
// System.out.println(s);
155
s = input.readLine();
158
catch ( FileNotFoundException e )
160
System.out.println( e.getMessage() );
162
catch ( IOException e )
164
System.out.println( e.getMessage() );
175
catch ( Exception e )
177
System.out.println( e.getMessage() );
182
}// getDBDeatilsFromHibernate end
184
public List<String> getDBInfo()
186
// DatabaseInfoProvider provider = new org.hisp.dhis.system.database.HibernateDatabaseInfoProvider();
187
info = provider.getDatabaseInfo();
189
List<String> dbInfoList = new ArrayList<String>();
191
dbInfoList.add( 0, info.getName() );
192
dbInfoList.add( 1, info.getUser() );
193
dbInfoList.add( 2, info.getPassword() );
194
dbInfoList.add( 3, info.getUrl() );
196
//System.out.println("DB URL: "+info.getUrl());
201
public Connection openConnection()
207
// To get From XML File
208
// List li = (ArrayList)getDBDeatilsFromXML();
209
// String userName = (String) li.get(0);
210
// String userPass = (String) li.get(1);
211
// String urlForConnection = (String) li.get(2);
213
// To get From Hibernate.Properties File
214
//List<String> li = (ArrayList) getDBDeatilsFromHibernate();
215
//String urlForConnection = (String) li.get( 0 );
216
//String userName = (String) li.get( 1 );
217
//String userPass = (String) li.get( 2 );
219
List<String> li = new ArrayList<String>( getDBInfo() );
220
String dbName = li.get( 0 );
221
String userName = li.get( 1 );
222
String userPass = li.get( 2 );
223
String urlForConnection = li.get( 3 );
225
// Direct DBConnection
226
// String userName = "dhis";
227
// String userPass = "";
228
// String urlForConnection = "jdbc:mysql://localhost/jh_dhis2";
230
Class.forName( "com.mysql.jdbc.Driver" ).newInstance();
231
con = DriverManager.getConnection( urlForConnection, userName, userPass );
233
catch ( Exception e )
235
System.out.println( "Exception while opening connection : " + e.getMessage() );
239
} // openConnection end
241
public void closeConnection()
253
catch ( Exception e )
255
System.out.println( e.getMessage() );
258
} // closeConnection end