提交 922f2181 编写于 作者: J jurgen

Dependencies model

上级 4df91b2d
......@@ -52,6 +52,7 @@ public class DriverDependencies implements DBPDriverDependencies
libraryList.clear();
libraryList.addAll(libMap.values());
/*
{
StringBuilder sb = new StringBuilder();
Set<String> ns = new TreeSet<>();
......@@ -72,12 +73,14 @@ public class DriverDependencies implements DBPDriverDependencies
dumpNode(node, 0);
}
}
*/
}
} catch (IOException e) {
throw new DBException("IO error while resolving dependencies", e);
}
}
/*
private void dumpNode(DependencyNode node, int level) {
if (node.duplicate) {
return;
......@@ -88,6 +91,7 @@ public class DriverDependencies implements DBPDriverDependencies
dumpNode(child, level + 1);
}
}
*/
private void resolveDependencies(DBRProgressMonitor monitor, DependencyNode ownerNode, Map<String, DBPDriverLibrary> libMap) throws IOException {
Collection<? extends DBPDriverLibrary> dependencies = ownerNode.library.getDependencies(monitor, ownerNode.owner);
......
......@@ -115,12 +115,6 @@ public class DriverLibraryLocal extends DriverLibraryAbstract
return null;
}
@Nullable
@Override
public Collection<DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, DBPDriverLibrary ownerLibrary) throws IOException {
return null;
}
protected File detectLocalFile()
{
String localPath = getLocalFilePath();
......
......@@ -181,53 +181,6 @@ public class DriverLibraryMavenArtifact extends DriverLibraryAbstract
return false;
}
@Nullable
@Override
public Collection<? extends DBPDriverLibrary> getDependencies(@NotNull DBRProgressMonitor monitor, DBPDriverLibrary ownerLibrary) throws IOException {
List<DriverLibraryMavenDependency> dependencies = new ArrayList<>();
List<MavenArtifactReference> exclusions = null;
MavenLocalVersion localVersion = resolveLocalVersion(monitor, false);
if (localVersion != null) {
// Find owner's exclusions
if (ownerLibrary instanceof DriverLibraryMavenArtifact) {
MavenLocalVersion ownerVersion = ((DriverLibraryMavenArtifact) ownerLibrary).getMavenLocalVersion();
if (ownerVersion != null) {
exclusions = ownerVersion.getMetaData(monitor)
.findExclusionsFor(localVersion.getArtifact().getGroupId(), localVersion.getArtifact().getArtifactId());
}
}
MavenArtifactVersion metaData = localVersion.getMetaData(monitor);
List<MavenArtifactDependency> artifactDeps = metaData.getDependencies(monitor);
if (!CommonUtils.isEmpty(artifactDeps)) {
for (MavenArtifactDependency artifactDep : artifactDeps) {
boolean excluded = false;
if (exclusions != null) {
for (MavenArtifactReference ex : exclusions) {
if (ex.getGroupId().equals(artifactDep.getGroupId()) && ex.getArtifactId().equals(artifactDep.getArtifactId())) {
excluded = true;
break;
}
}
if (excluded) {
// Excluded
continue;
}
}
MavenLocalVersion depLocalVersion = artifactDep.resolveDependency(monitor);
if (depLocalVersion != null) {
dependencies.add(
new DriverLibraryMavenDependency(
this.getDriver(),
depLocalVersion));
}
}
}
}
return dependencies;
}
@NotNull
public String getDisplayName() {
MavenArtifact artifact = getMavenArtifact();
......
......@@ -89,18 +89,14 @@ class DriverDownloadAutoPage extends DriverDownloadPage {
@Override
void resolveLibraries() {
final Map<String, List<DBPDriverLibrary>> depMap = new LinkedHashMap<>();
final DBPDriverDependencies[] ref = new DBPDriverDependencies[1];
try {
new RunnableContextDelegate(getContainer()).run(true, true, new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
monitor.beginTask("Resolve dependencies", 100);
try {
DBPDriverDependencies dependencies = getWizard().getDriver().resolveDependencies(monitor);
for (DBPDriverLibrary library : getWizard().getFiles()) {
resolveDependencies(monitor, library, null, depMap);
}
ref[0] = getWizard().getDriver().resolveDependencies(monitor);
} catch (Exception e) {
throw new InvocationTargetException(e);
} finally {
......@@ -114,15 +110,16 @@ class DriverDownloadAutoPage extends DriverDownloadPage {
UIUtils.showErrorDialog(null, "Resolve libraries", "Error resolving driver libraries", e.getTargetException());
}
final Set<String> addedDeps = new HashSet<>();
DBPDriverDependencies dependencies = ref[0];
int totalItems = 0;
for (DBPDriverLibrary file : getWizard().getFiles()) {
for (DBPDriverDependencies.DependencyNode node : dependencies.getLibraryMap()) {
DBPDriverLibrary library = node.library;
TreeItem item = new TreeItem(filesTree, SWT.NONE);
item.setImage(DBeaverIcons.getImage(file.getIcon()));
item.setText(0, file.getDisplayName());
item.setText(1, CommonUtils.notEmpty(file.getVersion()));
item.setImage(DBeaverIcons.getImage(library.getIcon()));
item.setText(0, library.getDisplayName());
item.setText(1, CommonUtils.notEmpty(library.getVersion()));
totalItems++;
if (addDependencies(item, file, depMap, addedDeps)) {
if (addDependencies(item, node)) {
item.setExpanded(true);
totalItems += item.getItemCount();
}
......@@ -136,51 +133,21 @@ class DriverDownloadAutoPage extends DriverDownloadPage {
shell.setSize(shell.getSize().x, shell.getSize().y + filesTree.getItemHeight() * totalItems);
shell.layout();
}
private void resolveDependencies(DBRProgressMonitor monitor, DBPDriverLibrary library, DBPDriverLibrary ownerLibrary, Map<String, List<DBPDriverLibrary>> depMap) throws IOException {
String libraryPath = library.getPath();
List<DBPDriverLibrary> deps = depMap.get(libraryPath);
if (deps != null) {
return;
}
deps = new ArrayList<>();
depMap.put(libraryPath, deps);
Collection<? extends DBPDriverLibrary> dependencies = library.getDependencies(monitor, ownerLibrary);
private boolean addDependencies(TreeItem parent, DBPDriverDependencies.DependencyNode node) {
Collection<DBPDriverDependencies.DependencyNode> dependencies = node.dependencies;
if (dependencies != null && !dependencies.isEmpty()) {
for (DBPDriverLibrary dep : dependencies) {
deps.add(dep);
resolveDependencies(monitor, dep, library, depMap);
}
}
}
private boolean addDependencies(TreeItem parent, DBPDriverLibrary library, Map<String, List<DBPDriverLibrary>> depMap, Set<String> addedDeps) {
Collection<? extends DBPDriverLibrary> dependencies = depMap.get(library.getPath());
if (dependencies != null && !dependencies.isEmpty()) {
Map<DBPDriverLibrary, TreeItem> itemMap = new HashMap<>();
for (DBPDriverLibrary dep : dependencies) {
for (DBPDriverDependencies.DependencyNode dep : dependencies) {
TreeItem item = new TreeItem(parent, SWT.NONE);
item.setImage(DBeaverIcons.getImage(dep.getIcon()));
item.setText(0, dep.getDisplayName());
item.setText(1, CommonUtils.notEmpty(dep.getVersion()));
item.setImage(DBeaverIcons.getImage(dep.library.getIcon()));
item.setText(0, dep.library.getDisplayName());
item.setText(1, CommonUtils.notEmpty(dep.library.getVersion()));
if (addedDeps.contains(dep.getPath())) {
if (dep.duplicate) {
item.setForeground(getShell().getDisplay().getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW));
} else {
addDependencies(item, dep);
}
itemMap.put(dep, item);
}
for (DBPDriverLibrary dep : dependencies) {
TreeItem item = itemMap.get(dep);
if (!addedDeps.contains(dep.getPath())) {
addedDeps.add(dep.getPath());
if (addDependencies(item, dep, depMap, addedDeps)) {
//item.setExpanded(true);
}
}
}
return true;
}
return false;
......
......@@ -97,9 +97,6 @@ public interface DBPDriverLibrary
@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;
void downloadLibraryFile(@NotNull DBRProgressMonitor monitor, boolean forceUpdate)
throws IOException, InterruptedException;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册