/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.syncope.installer.utilities;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import org.apache.syncope.installer.enums.DBs;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.Driver;
public final class DriverLoader extends URLClassLoader {
private static final String POSTGRES_JAR =
"http://repo1.maven.org/maven2/postgresql/postgresql/9.1-901.jdbc4/postgresql-9.1-901.jdbc4.jar";
private static final String MYSQL_JAR =
"http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar";
private static final String MARIADB_JAR =
"http://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/1.1.8/mariadb-java-client-1.1.8.jar";
private static final String POSTGRES_CLASS_DRIVER = "org.postgresql.Driver";
private static final String MYSQL_CLASS_DRIVER = "com.mysql.jdbc.Driver";
private static final String MARIADB_CLASS_DRIVER = "org.mariadb.jdbc.Driver";
private DriverLoader(final URL[] urls) {
super(urls);
addURL(urls[0]);
}
private static DriverLoader DRIVER_LOADER;
public static Driver load(final DBs selectedDB, final boolean isProxyEnabled, final String proxyHost,
final String proxyPort, final String proxyUser, final String proxyPwd) {
Driver driver = null;
switch (selectedDB) {
case POSTGRES:
driver = downloadDriver(POSTGRES_JAR, POSTGRES_CLASS_DRIVER, isProxyEnabled, proxyHost, proxyPort,
proxyUser, proxyPwd);
break;
case MYSQL:
driver = downloadDriver(MYSQL_JAR, MYSQL_CLASS_DRIVER, isProxyEnabled, proxyHost, proxyPort,
proxyUser, proxyPwd);
break;
case MARIADB:
driver = downloadDriver(MARIADB_JAR, MARIADB_CLASS_DRIVER, isProxyEnabled, proxyHost, proxyPort,
proxyUser, proxyPwd);
break;
case SQLSERVER:
break;
case ORACLE:
break;
default:
break;
}
return driver;
}
private static Driver downloadDriver(final String driverUrl, final String driverClassName,
final boolean isProxyEnabled, final String proxyHost, final String proxyPort, final String proxyUser,
final String proxyPwd) {
Driver driver = null;
try {
if (isProxyEnabled) {
System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", proxyPort);
if (proxyUser != null && !proxyUser.isEmpty() && proxyPwd != null) {
Authenticator.setDefault(new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(proxyUser, proxyPwd.toCharArray());
}
});
System.setProperty("http.proxyUser", proxyUser);
System.setProperty("http.proxyPassword", proxyPwd);
}
}
final URL[] url = { new URL(driverUrl) };
DRIVER_LOADER = new DriverLoader(url);
driver = (Driver) DRIVER_LOADER.loadClass(driverClassName).newInstance();
} catch (Exception e) {
// ignore
}
return driver;
}
}