提交 b316e260 编写于 作者: J jurgen

Version change

Former-commit-id: dd82944a
上级 fe186e30
......@@ -31,6 +31,8 @@ import org.jkiss.utils.CommonUtils;
import java.io.*;
import java.net.URLConnection;
import java.text.NumberFormat;
import java.util.Collection;
import java.util.Collections;
/**
* DriverLibraryAbstract
......@@ -42,7 +44,7 @@ public abstract class DriverLibraryAbstract implements DBPDriverLibrary
protected final DriverDescriptor driver;
protected final FileType type;
protected final OSDescriptor system;
protected final String path;
protected String path;
protected boolean custom;
protected boolean disabled;
......@@ -103,6 +105,17 @@ public abstract class DriverLibraryAbstract implements DBPDriverLibrary
return null;
}
@NotNull
@Override
public Collection<String> getAvailableVersions(DBRProgressMonitor monitor) throws IOException {
return Collections.emptyList();
}
@Override
public void setVersion(DBRProgressMonitor monitor, @NotNull String version) throws IOException {
throw new IOException("Vaersions are not supported");
}
@NotNull
@Override
public FileType getType()
......
......@@ -32,6 +32,7 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
......@@ -43,7 +44,7 @@ public class DriverLibraryMavenArtifact extends DriverLibraryAbstract
public static final String PATH_PREFIX = "maven:/";
private final MavenArtifactReference reference;
private MavenArtifactReference reference;
protected MavenArtifactVersion localVersion;
public DriverLibraryMavenArtifact(DriverDescriptor driver, FileType type, String path) {
......@@ -71,6 +72,35 @@ public class DriverLibraryMavenArtifact extends DriverLibraryAbstract
return true;
}
@NotNull
@Override
public Collection<String> getAvailableVersions(DBRProgressMonitor monitor) throws IOException {
MavenArtifactVersion artifactVersion = getArtifactVersion(monitor);
if (artifactVersion != null) {
Collection<String> availableVersion = artifactVersion.getArtifact().getAvailableVersion(monitor);
if (availableVersion != null) {
return availableVersion;
}
}
return Collections.emptyList();
}
@Override
public void setVersion(DBRProgressMonitor monitor, @NotNull String version) throws IOException {
MavenArtifactReference newReference = new MavenArtifactReference(
this.reference.getGroupId(),
this.reference.getArtifactId(),
this.reference.getClassifier(),
version);
MavenArtifactVersion newVersion = MavenRegistry.getInstance().findArtifact(monitor, null, newReference);
if (newVersion == null) {
throw new IOException("Can't resolve artifact version " + newReference);
}
this.reference = newReference;
this.localVersion = newVersion;
this.path = PATH_PREFIX + this.localVersion.toString();
}
@Override
public void resetVersion() {
this.localVersion = null;
......@@ -79,10 +109,10 @@ public class DriverLibraryMavenArtifact extends DriverLibraryAbstract
@Nullable
protected MavenArtifactVersion getArtifactVersion(DBRProgressMonitor monitor) {
if (localVersion == null) {
localVersion = MavenRegistry.getInstance().findArtifact(monitor, null, reference);
if (this.localVersion == null) {
this.localVersion = MavenRegistry.getInstance().findArtifact(monitor, null, reference);
}
return localVersion;
return this.localVersion;
}
@Nullable
......@@ -155,7 +185,7 @@ public class DriverLibraryMavenArtifact extends DriverLibraryAbstract
@NotNull
public String getDisplayName() {
return getId();
return path;
}
@Override
......
......@@ -190,6 +190,14 @@ public class MavenArtifact implements IMavenIdentifier
return MavenArtifactReference.makeId(this);
}
@Nullable
public Collection<String> getAvailableVersion(DBRProgressMonitor monitor) throws IOException {
if (CommonUtils.isEmpty(versions) && !metadataLoaded) {
loadMetadata(monitor);
}
return versions;
}
public Date getLastUpdate() {
return lastUpdate;
}
......@@ -396,5 +404,4 @@ public class MavenArtifact implements IMavenIdentifier
}
}
}
......@@ -90,6 +90,7 @@ public class MavenArtifactVersion implements IMavenIdentifier {
loadPOM(monitor);
}
@NotNull
public MavenArtifact getArtifact() {
return artifact;
}
......
......@@ -17,13 +17,16 @@
*/
package org.jkiss.dbeaver.ui.dialogs.driver;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.custom.TreeEditor;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.model.connection.DBPDriverDependencies;
......@@ -33,6 +36,7 @@ import org.jkiss.dbeaver.model.runtime.DBRRunnableContext;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.registry.driver.DriverDependencies;
import org.jkiss.dbeaver.registry.driver.DriverDescriptor;
import org.jkiss.dbeaver.runtime.DefaultProgressMonitor;
import org.jkiss.dbeaver.runtime.RunnableContextDelegate;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIUtils;
......@@ -42,6 +46,7 @@ import org.jkiss.utils.CommonUtils;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
......@@ -49,6 +54,7 @@ class DriverDownloadAutoPage extends DriverDownloadPage {
private Tree filesTree;
private Font boldFont;
private TreeEditor treeEditor;
DriverDownloadAutoPage() {
super("Automatic download", "Download driver files", null);
......@@ -81,6 +87,27 @@ class DriverDownloadAutoPage extends DriverDownloadPage {
UIUtils.createTreeColumn(filesTree, SWT.LEFT, "File");
UIUtils.createTreeColumn(filesTree, SWT.LEFT, "Version");
UIUtils.createTreeColumn(filesTree, SWT.LEFT, "Description");
treeEditor = new TreeEditor(filesTree);
treeEditor.horizontalAlignment = SWT.RIGHT;
treeEditor.verticalAlignment = SWT.CENTER;
treeEditor.grabHorizontal = true;
treeEditor.minimumWidth = 50;
filesTree.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e)
{
TreeItem item = filesTree.getItem(new Point(e.x, e.y));
if (item != null) {
if (UIUtils.getColumnAtPos(item, e.x, e.y) == 1) {
showVersionEditor(item);
return;
}
}
disposeOldEditor();
}
});
}
if (!wizard.isForceDownload()) {
......@@ -102,6 +129,96 @@ class DriverDownloadAutoPage extends DriverDownloadPage {
setControl(composite);
}
private void disposeOldEditor()
{
if (treeEditor.getEditor() != null) {
treeEditor.getEditor().dispose();
}
Control oldEditor = treeEditor.getEditor();
if (oldEditor != null) oldEditor.dispose();
}
private void showVersionEditor(final TreeItem item) {
disposeOldEditor();
final DBPDriverDependencies.DependencyNode dependencyNode = (DBPDriverDependencies.DependencyNode) item.getData();
if (dependencyNode == null || dependencyNode.library == null || !dependencyNode.library.isDownloadable()) {
return;
}
final List<String> allVersions = new ArrayList<>();
try {
getContainer().run(true, true, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
try {
allVersions.addAll(
dependencyNode.library.getAvailableVersions(new DefaultProgressMonitor(monitor)));
} catch (IOException e) {
throw new InvocationTargetException(e);
}
}
});
} catch (InvocationTargetException e) {
UIUtils.showErrorDialog(getShell(), "Versions", "Error reading versions", e.getTargetException());
return;
} catch (InterruptedException e) {
return;
}
final String currentVersion = dependencyNode.library.getVersion();
if (currentVersion != null && !allVersions.contains(currentVersion)) {
allVersions.add(currentVersion);
}
final Combo editor = new Combo(filesTree, SWT.DROP_DOWN | SWT.READ_ONLY);
int versionIndex = -1;
for (int i = 0; i < allVersions.size(); i++) {
String version = allVersions.get(i);
editor.add(version);
if (version.equals(currentVersion)) {
versionIndex = i;
}
}
if (versionIndex >= 0) {
editor.select(versionIndex);
}
editor.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String newVersion = editor.getItem(editor.getSelectionIndex());
disposeOldEditor();
setLibraryVersion(dependencyNode.library, newVersion);
}
});
treeEditor.setEditor(editor, item, 1);
editor.setListVisible(true);
}
private boolean setLibraryVersion(final DBPDriverLibrary library, final String version) {
String curVersion = library.getVersion();
if (CommonUtils.equalObjects(curVersion, version)) {
return false;
}
try {
getContainer().run(true, true, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
try {
library.setVersion(new DefaultProgressMonitor(monitor), version);
} catch (IOException e) {
throw new InvocationTargetException(e);
}
}
});
resolveLibraries();
return true;
} catch (InvocationTargetException e) {
UIUtils.showErrorDialog(getShell(), "Version change", "Error changing library version", e.getTargetException());
} catch (InterruptedException e) {
// ignore
}
return false;
}
@Override
void resolveLibraries() {
final DriverDependencies dependencies = getWizard().getDependencies();
......@@ -126,10 +243,12 @@ class DriverDownloadAutoPage extends DriverDownloadPage {
return;
}
filesTree.removeAll();
int totalItems = 1;
for (DBPDriverDependencies.DependencyNode node : dependencies.getLibraryMap()) {
DBPDriverLibrary library = node.library;
TreeItem item = new TreeItem(filesTree, SWT.NONE);
item.setData(node);
item.setImage(DBeaverIcons.getImage(library.getIcon()));
item.setText(0, library.getDisplayName());
item.setText(1, CommonUtils.notEmpty(library.getVersion()));
......@@ -169,6 +288,7 @@ class DriverDownloadAutoPage extends DriverDownloadPage {
if (dependencies != null && !dependencies.isEmpty()) {
for (DBPDriverDependencies.DependencyNode dep : dependencies) {
TreeItem item = new TreeItem(parent, SWT.NONE);
item.setData(dep);
item.setImage(DBeaverIcons.getImage(dep.library.getIcon()));
item.setText(0, dep.library.getDisplayName());
item.setText(1, CommonUtils.notEmpty(dep.library.getVersion()));
......
......@@ -290,11 +290,13 @@
<parameter name="script-delimiter" value="go"/>
<parameter name="supports-multiple-results" value="true"/>
<!--
<fileSource url="http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774"
name="Microsoft JDBC Drivers"
instruction=".">
<file name="sqljdbc41.jar" description="JDBC driver"/>
</fileSource>
-->
<file type="jar" path="repo:/drivers/mssql/sqljdbc4.jar"/>
<file type="lib" os="win32" arch="x86" path="repo:/drivers/mssql/auth/x86/sqljdbc_auth.dll"/>
......
......@@ -97,6 +97,12 @@ public interface DBPDriverLibrary
void downloadLibraryFile(@NotNull DBRProgressMonitor monitor, boolean forceUpdate, String taskName)
throws IOException, InterruptedException;
@NotNull
Collection<String> getAvailableVersions(DBRProgressMonitor monitor) throws IOException;
void setVersion(DBRProgressMonitor monitor, @NotNull String version)
throws IOException;
void resetVersion();
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册