提交 76578739 编写于 作者: S serge-rider

Driver model small refactoring

上级 1255e0e0
......@@ -147,7 +147,7 @@ public interface DBPDriver extends DBPNamedObject
List<? extends DBPDriverFileSource> getDriverFileSources();
@NotNull
Object getDriverInstance(@NotNull DBRProgressMonitor monitor) throws DBException;
<T> T getDriverInstance(@NotNull DBRProgressMonitor monitor) throws DBException;
void loadDriver(DBRProgressMonitor monitor) throws DBException;
......
......@@ -667,8 +667,7 @@ public abstract class JDBCDataSource
protected Driver getDriverInstance(@NotNull DBRProgressMonitor monitor)
throws DBException
{
return Driver.class.cast(
container.getDriver().getDriverInstance(monitor));
return container.getDriver().getDriverInstance(monitor);
}
/**
......
......@@ -299,25 +299,43 @@ public class DataSourceProviderRegistry implements DBPDataSourceProviderRegistry
@Nullable
public DriverDescriptor findDriver(@NotNull String driverIdOrName) {
// Try to find by ID
for (DataSourceProviderDescriptor pd : dataSourceProviders) {
DriverDescriptor driver = pd.getDriver(driverIdOrName);
if (driver != null) {
return driver;
DriverDescriptor driver = null;
if (driverIdOrName.contains(":")) {
String[] driverPath = driverIdOrName.split(":");
if (driverPath.length == 2) {
DataSourceProviderDescriptor dsProvider = getDataSourceProvider(driverPath[0]);
if (dsProvider != null) {
driver = dsProvider.getDriver(driverPath[1]);
}
}
}
// Try to find by name
for (DataSourceProviderDescriptor pd : dataSourceProviders) {
for (DriverDescriptor driver : pd.getDrivers()) {
if (driver.getName().equalsIgnoreCase(driverIdOrName)) {
while (driver.getReplacedBy() != null) {
driver = driver.getReplacedBy();
if (driver == null) {
// Try to find by ID
for (DataSourceProviderDescriptor pd : dataSourceProviders) {
driver = pd.getDriver(driverIdOrName);
if (driver != null) {
break;
}
}
}
if (driver == null) {
// Try to find by name
for (DataSourceProviderDescriptor pd : dataSourceProviders) {
for (DriverDescriptor d : pd.getDrivers()) {
if (d.getName().equalsIgnoreCase(driverIdOrName)) {
driver = d;
}
return driver;
}
}
}
return null;
// Find replacement
if (driver != null) {
while (driver.getReplacedBy() != null) {
driver = driver.getReplacedBy();
}
}
return driver;
}
//////////////////////////////////////////////
......
......@@ -555,15 +555,15 @@ public class DriverDescriptor extends AbstractDescriptor implements DBPDriver {
@NotNull
@Override
public Object getDriverInstance(@NotNull DBRProgressMonitor monitor)
public <T> T getDriverInstance(@NotNull DBRProgressMonitor monitor)
throws DBException {
if (driverInstance == null) {
loadDriver(monitor);
}
if (isInternalDriver() && driverInstance == null) {
return createDriverInstance();
return (T)createDriverInstance();
}
return driverInstance;
return (T)driverInstance;
}
private void resetDriverInstance() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册