提交 27e17e5a 编写于 作者: J jurgen

Dependencies model

Former-commit-id: 4df91b2d
上级 b75b8a86
......@@ -44,6 +44,8 @@ public class DriverDependencies implements DBPDriverDependencies
final Map<String, DBPDriverLibrary> libMap = new LinkedHashMap<>();
for (DBPDriverLibrary library : rootLibraries) {
DependencyNode node = new DependencyNode(null, library);
libMap.put(node.library.getId(), node.library);
resolveDependencies(monitor, node, libMap);
rootNodes.add(node);
}
......@@ -88,7 +90,7 @@ public class DriverDependencies implements DBPDriverDependencies
}
private void resolveDependencies(DBRProgressMonitor monitor, DependencyNode ownerNode, Map<String, DBPDriverLibrary> libMap) throws IOException {
Collection<? extends DBPDriverLibrary> dependencies = ownerNode.library.getDependencies(monitor, ownerNode.owner == null? null : ownerNode.owner.library);
Collection<? extends DBPDriverLibrary> dependencies = ownerNode.library.getDependencies(monitor, ownerNode.owner);
if (dependencies != null && !dependencies.isEmpty()) {
for (DBPDriverLibrary dep : dependencies) {
DependencyNode node = new DependencyNode(ownerNode, dep);
......
......@@ -23,6 +23,7 @@ import org.eclipse.core.runtime.Platform;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.connection.DBPDriverDependencies;
import org.jkiss.dbeaver.model.connection.DBPDriverLibrary;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.ui.UIIcon;
......@@ -108,6 +109,18 @@ public class DriverLibraryLocal extends DriverLibraryAbstract
return platformFile;
}
@Nullable
@Override
public Collection<? extends DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, @Nullable DBPDriverDependencies.DependencyNode ownerNode) throws IOException {
return null;
}
@Nullable
@Override
public Collection<DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, DBPDriverLibrary ownerLibrary) throws IOException {
return null;
}
protected File detectLocalFile()
{
String localPath = getLocalFilePath();
......@@ -121,12 +134,6 @@ public class DriverLibraryLocal extends DriverLibraryAbstract
return file;
}
@Nullable
@Override
public Collection<DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, DBPDriverLibrary ownerLibrary) throws IOException {
return null;
}
@NotNull
public String getDisplayName() {
return path;
......
......@@ -22,6 +22,7 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.connection.DBPDriverDependencies;
import org.jkiss.dbeaver.model.connection.DBPDriverLibrary;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
......@@ -131,6 +132,55 @@ public class DriverLibraryMavenArtifact extends DriverLibraryAbstract
return null;
}
@Nullable
@Override
public Collection<? extends DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, @Nullable DBPDriverDependencies.DependencyNode ownerNode) throws IOException {
List<DriverLibraryMavenDependency> dependencies = new ArrayList<>();
MavenLocalVersion localVersion = resolveLocalVersion(monitor, false);
if (localVersion != null) {
MavenArtifactVersion metaData = localVersion.getMetaData(monitor);
List<MavenArtifactDependency> artifactDeps = metaData.getDependencies(monitor);
if (!CommonUtils.isEmpty(artifactDeps)) {
for (MavenArtifactDependency artifactDep : artifactDeps) {
if (isDependencyExcluded(monitor, artifactDep, ownerNode)) {
continue;
}
MavenLocalVersion depLocalVersion = artifactDep.resolveDependency(monitor);
if (depLocalVersion != null) {
dependencies.add(
new DriverLibraryMavenDependency(
this.getDriver(),
depLocalVersion));
}
}
}
}
return dependencies;
}
private boolean isDependencyExcluded(DBRProgressMonitor monitor, MavenArtifactDependency dependency, DBPDriverDependencies.DependencyNode ownerNode) {
for (DBPDriverDependencies.DependencyNode node = ownerNode; node != null; node = node.owner) {
DBPDriverLibrary library = node.library;
if (library instanceof DriverLibraryMavenArtifact) {
MavenLocalVersion ownerVersion = ((DriverLibraryMavenArtifact) library).getMavenLocalVersion();
if (ownerVersion != null) {
for (MavenArtifactDependency ownerDependency : ownerVersion.getMetaData(monitor).getDependencies(monitor)) {
List<MavenArtifactReference> ownerDependencyExclusions = ownerDependency.getExclusions();
if (ownerDependencyExclusions != null) {
for (MavenArtifactReference exReference : ownerDependencyExclusions) {
if (exReference.getGroupId().equals(dependency.getGroupId()) && exReference.getArtifactId().equals(dependency.getArtifactId())) {
return true;
}
}
}
}
}
}
}
return false;
}
@Nullable
@Override
public Collection<? extends DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, DBPDriverLibrary ownerLibrary) throws IOException {
......
......@@ -133,9 +133,10 @@ public class MavenArtifactVersion {
if (CommonUtils.isEmpty(dependencies)) {
return parentDependencies;
}
parentDependencies = new ArrayList<>(parentDependencies);
parentDependencies.addAll(dependencies);
return parentDependencies;
List<MavenArtifactDependency> result = new ArrayList<>(dependencies.size() + parentDependencies.size());
result.addAll(dependencies);
result.addAll(parentDependencies);
return result;
}
}
return this.dependencies;
......
......@@ -26,6 +26,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
/**
* Driver library
......@@ -93,6 +94,9 @@ public interface DBPDriverLibrary
boolean matchesCurrentPlatform();
@Nullable
Collection<? extends DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, @Nullable DBPDriverDependencies.DependencyNode ownerNode) throws IOException;
@Nullable
Collection<? extends DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, @Nullable DBPDriverLibrary ownerLibrary) throws IOException;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册