/* * JBoss, Home of Professional Open Source. * Copyright 2010, Red Hat, Inc., and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY 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 along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.as.connector.services.driver; import org.jboss.modules.ModuleIdentifier; /** * Metadata describing a JDBC driver that has been installed as a service in the * runtime. * @author Brian Stansberry (c) 2011 Red Hat Inc. */ public final class InstalledDriver { private final String driverName; private final ModuleIdentifier moduleName; private final String deploymentUnitName; private final String driverClassName; private final String dataSourceClassName; private final String xaDataSourceClassName; private final int majorVersion; private final int minorVersion; private final boolean jdbcCompliant; /** * Creates a new InstalledDriver for a driver that was loaded from the * module path. * @param driverName the symbolic name of the driver was loaded * @param moduleName the name of the module from which the driver was loaded * @param driverClassName the name of the {@link java.sql.Driver} * implementation class * @param dataSourceClassName the name of the {@link javax.sql.DataSource} * implementation class * @param xaDataSourceClassName the name of the {@link javax.sql.XADataSource} * implementation class * @param majorVersion the driver major version * @param minorVersion the driver minor version * @param jdbcCompliant whether the driver is JDBC compliant */ public InstalledDriver(final String driverName, final ModuleIdentifier moduleName, final String driverClassName, final String dataSourceClassName, final String xaDataSourceClassName, final int majorVersion, final int minorVersion, final boolean jdbcCompliant) { this.deploymentUnitName = null; this.moduleName = moduleName; this.driverName = driverName; this.driverClassName = driverClassName; this.dataSourceClassName = dataSourceClassName; this.xaDataSourceClassName = xaDataSourceClassName; this.majorVersion = majorVersion; this.minorVersion = minorVersion; this.jdbcCompliant = jdbcCompliant; } /** * Creates a new InstalledDriver for a driver that was installed from a * deployment. * @param deploymentUnitName the name of the deployment unit from which the * driver was installed * @param driverClassName the name of the {@link java.sql.Driver} * implementation class * @param dataSourceClassName the name of the {@link javax.sql.DataSource} * implementation class * @param xaDataSourceClassName the name of the {@link javax.sql.XADataSource} * implementation class * @param majorVersion the driver major version * @param minorVersion the driver minor version * @param jdbcCompliant whether the driver is JDBC compliant */ public InstalledDriver(final String deploymentUnitName, final String driverClassName, final String dataSourceClassName, final String xaDataSourceClassName, final int majorVersion, final int minorVersion, final boolean jdbcCompliant) { this.deploymentUnitName = deploymentUnitName; this.moduleName = null; this.driverName = deploymentUnitName; this.driverClassName = driverClassName; this.dataSourceClassName = dataSourceClassName; this.xaDataSourceClassName = xaDataSourceClassName; this.majorVersion = majorVersion; this.minorVersion = minorVersion; this.jdbcCompliant = jdbcCompliant; } /** * Gets the name of the module from which the driver was loaded, if it was * loaded from the module path. * @return the module name, or {@code null} if {@link #isFromDeployment()} * returns {@code true} */ public ModuleIdentifier getModuleName() { return moduleName; } /** * Gets the name of the deployment unit from which the driver was loaded, if * it was loaded from a deployment. * @return the deployment unit name, or {@code null} if * {@link #isFromDeployment()} returns {@code false} */ public String getDeploymentUnitName() { return deploymentUnitName; } /** * Gets the fully qualified class name of the driver's implementation of * {@link java.sql.Driver} * @return the class name. Will not be {@code null} */ public String getDriverClassName() { return driverClassName; } /** * Gets the driver's major version number. * @return the major version number */ public int getMajorVersion() { return majorVersion; } /** * Gets the driver's minor version number. * @return the minor version number */ public int getMinorVersion() { return minorVersion; } /** * Gets whether the driver is JDBC compliant. * @return {@code true} if the driver is JDBC compliant; {@code false} if * not */ public boolean isJdbcCompliant() { return jdbcCompliant; } /** * Gets whether the driver was loaded from a deployment unit. * @return {@code true} if the driver was loaded from a deployment unit; * {@code false} if it was loaded from a module on the module path */ public boolean isFromDeployment() { return deploymentUnitName != null; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; InstalledDriver that = (InstalledDriver) o; if (jdbcCompliant != that.jdbcCompliant) return false; if (majorVersion != that.majorVersion) return false; if (minorVersion != that.minorVersion) return false; if (dataSourceClassName != null ? !dataSourceClassName.equals(that.dataSourceClassName) : that.dataSourceClassName != null) return false; if (deploymentUnitName != null ? !deploymentUnitName.equals(that.deploymentUnitName) : that.deploymentUnitName != null) return false; if (driverClassName != null ? !driverClassName.equals(that.driverClassName) : that.driverClassName != null) return false; if (driverName != null ? !driverName.equals(that.driverName) : that.driverName != null) return false; if (moduleName != null ? !moduleName.equals(that.moduleName) : that.moduleName != null) return false; if (xaDataSourceClassName != null ? !xaDataSourceClassName.equals(that.xaDataSourceClassName) : that.xaDataSourceClassName != null) return false; return true; } @Override public int hashCode() { int result = driverName != null ? driverName.hashCode() : 0; result = 31 * result + (moduleName != null ? moduleName.hashCode() : 0); result = 31 * result + (deploymentUnitName != null ? deploymentUnitName.hashCode() : 0); result = 31 * result + (driverClassName != null ? driverClassName.hashCode() : 0); result = 31 * result + (dataSourceClassName != null ? dataSourceClassName.hashCode() : 0); result = 31 * result + (xaDataSourceClassName != null ? xaDataSourceClassName.hashCode() : 0); result = 31 * result + majorVersion; result = 31 * result + minorVersion; result = 31 * result + (jdbcCompliant ? 1 : 0); return result; } @Override public String toString() { StringBuilder sb = new StringBuilder(); if (moduleName != null) { sb.append(moduleName); } else { sb.append(deploymentUnitName); } sb.append(':'); sb.append(driverClassName); sb.append('#'); sb.append(majorVersion); sb.append('#'); sb.append(minorVersion); return sb.toString(); } public String getDriverName() { return driverName; } public String getDataSourceClassName() { return dataSourceClassName; } public String getXaDataSourceClassName() { return xaDataSourceClassName; } }