/*
* JBoss, Home of Professional Open Source
* Copyright 2007, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
* This program is distributed in the hope that it will be useful, but WITHOUT A
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
* (C) 2005-2006,
* @author JBoss Inc.
*/
//
// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
//
// Arjuna Technologies Ltd.,
// Newcastle upon Tyne,
// Tyne and Wear,
// UK.
//
package org.jboss.jbossts.qa.Utils;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import java.net.UnknownHostException;
public class JDBCProfileStore
{
private final static String BASE_DIRECTORY_PROPERTY = "jdbcprofilestore.dir";
public static int numberOfDrivers(String profileName)
throws Exception
{
loadProfile();
return Integer.parseInt((String) _profile.get(profileName + "_NumberOfDrivers"));
}
public static String driver(String profileName, int driverNumber)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_Driver" + driverNumber);
}
public static String databaseURL(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_DatabaseURL");
}
public static String databaseUser(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_DatabaseUser");
}
public static String databasePassword(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_DatabasePassword");
}
public static String databaseDynamicClass(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_DatabaseDynamicClass");
}
// new methods for jndi
public static String binding(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_Binding");
}
public static String databaseName(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_DatabaseName");
}
public static String host(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_Host");
}
public static String port(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_Port");
}
// new method to get a single driver
public static String driver(String profileName)
throws Exception
{
loadProfile();
return (String) _profile.get(profileName + "_Driver");
}
// end of new methods
/**
* New method call to get query timeout value
*/
public static int timeout(String profileName)
throws Exception
{
loadProfile();
//get loaded value or default
String loadedvalue = _profile.getProperty(profileName + "_Timeout", "20");
return Integer.parseInt(loadedvalue);
}
public static String getTableName(String username, String suffix) throws UnknownHostException {
// read JBTM-390 before messing with this function.
// previously this would have been: username + "_" + suffix as in "DROP TABLE " + databaseUser + "_InfoTable");
String value = username+"_"+getLocalHostNameForTables()+"_"+suffix;
// in addition to the problems with the valid characters, there are issues with the max length.
// for oracle it's 30, but we stick a 4 char suffix on indexes, so the table name should not be more than 26
// in certain cases this may mean we wind up with non-uniq names, which is a pain.
if(value.length() > 26) {
value = value.substring(0, 26);
}
return value;
}
private static String getLocalHostNameForTables() throws UnknownHostException {
String hostName = java.net.InetAddress.getLocalHost().getHostName();
hostName = stripHostName(hostName); // strip to local portion, force lower case.
hostName = hostName.replace("-", "_"); // some db's don't like hyphens in identifiers
return hostName;
}
private static void loadProfile()
throws Exception
{
if (_profile == null)
{
String hostName = java.net.InetAddress.getLocalHost().getHostName();
String baseDir = System.getProperty(BASE_DIRECTORY_PROPERTY);
if (baseDir == null)
{
throw new Exception(BASE_DIRECTORY_PROPERTY + " property not set - cannot find JDBC test profiles!");
}
_profile = new Properties();
File file = new File(baseDir + File.separator + stripHostName(hostName) + File.separator + "JDBCProfiles");
if(!file.exists()) {
// no host specific profile, fallback to a default one
file = new File(baseDir + File.separator + "default" + File.separator + "JDBCProfiles");
}
FileInputStream profileFileInputStream = new FileInputStream(file);
_profile.load(profileFileInputStream);
profileFileInputStream.close();
}
}
private static String stripHostName(String hostName)
{
hostName = hostName.toLowerCase();
if (hostName.indexOf('.') != -1)
{
hostName = hostName.substring(0, hostName.indexOf('.'));
}
return hostName;
}
private static Properties _profile = null;
}