/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.support.jdbc;
import com.eviware.soapui.SoapUI;
import com.eviware.soapui.model.propertyexpansion.PropertyExpander;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansionContext;
import com.eviware.soapui.support.GroovyUtils;
import com.eviware.soapui.support.SoapUIException;
import com.eviware.soapui.support.StringUtils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.regex.Matcher;
public class JdbcUtils {
public static final String PASS_TEMPLATE = "PASS_VALUE";
public static Connection initConnection(PropertyExpansionContext context, String driver, String connectionString,
String password) throws SQLException, SoapUIException {
if (JdbcUtils.missingConnSettings(driver, connectionString)) {
throw new SoapUIException("Some connections settings are missing");
}
String drvr = PropertyExpander.expandProperties(context, driver).trim();
String connStr = PropertyExpander.expandProperties(context, connectionString).trim();
String pass = StringUtils.hasContent(password) ? PropertyExpander.expandProperties(context, password).trim()
: "";
String masskedPass = connStr.replace(PASS_TEMPLATE, "#####");
if (connStr.contains(PASS_TEMPLATE)) {
pass = Matcher.quoteReplacement(pass);
connStr = connStr.replaceFirst(PASS_TEMPLATE, pass);
}
try {
GroovyUtils.registerJdbcDriver(drvr);
DriverManager.getDriver(connStr);
} catch (SQLException e) {
// SoapUI.logError( e );
try {
Class.forName(drvr).newInstance();
} catch (Exception e1) {
SoapUI.logError(e);
throw new SoapUIException("Failed to init connection for driver [" + drvr + "], connectionString ["
+ masskedPass + "]");
}
}
return DriverManager.getConnection(connStr);
}
public static boolean hasMasskedPass(String connStr) {
return !StringUtils.isNullOrEmpty(connStr) ? connStr.contains(PASS_TEMPLATE) : false;
}
public static boolean missingConnSettings(String driver, String connectionString) {
return StringUtils.isNullOrEmpty(driver) || StringUtils.isNullOrEmpty(connectionString);
}
}