提交 0e345be6 编写于 作者: S Sergei.Rider

#2597 Copy driver + driver manager dialog enhancements


Former-commit-id: e529476f
上级 dcd29fd6
......@@ -348,6 +348,7 @@ public class CoreMessages extends NLS {
public static String dialog_driver_manager_button_delete;
public static String dialog_driver_manager_button_edit;
public static String dialog_driver_manager_button_new;
public static String dialog_driver_manager_button_copy;
public static String dialog_driver_manager_label_unavailable;
public static String dialog_driver_manager_label_user_defined;
public static String dialog_driver_manager_message_cant_delete_text;
......
......@@ -407,6 +407,7 @@ dialog_data_label_value = Value:
dialog_driver_manager_button_delete = &Delete
dialog_driver_manager_button_edit = &Edit ...
dialog_driver_manager_button_new = &New
dialog_driver_manager_button_copy = &Copy
dialog_driver_manager_label_unavailable = - Unavailable
dialog_driver_manager_label_user_defined = - User defined
dialog_driver_manager_message_cant_delete_text = Your can''t delete driver "{0}" because it''s used by following datasource(s):
......
......@@ -266,6 +266,11 @@ public class DataSourceProviderDescriptor extends AbstractDescriptor
return new DriverDescriptor(this, id);
}
public DriverDescriptor createDriver(DriverDescriptor copyFrom)
{
return new DriverDescriptor(this, SecurityUtils.generateGUID(false), copyFrom);
}
public void addDriver(DriverDescriptor driver)
{
this.drivers.add(driver);
......@@ -483,4 +488,12 @@ public class DataSourceProviderDescriptor extends AbstractDescriptor
}
public DriverDescriptor getDriverByName(String category, String name) {
for (DriverDescriptor driver : drivers) {
if (CommonUtils.equalObjects(category, driver.getCategory()) && CommonUtils.equalObjects(name, driver.getName())) {
return driver;
}
}
return null;
}
}
......@@ -168,22 +168,56 @@ public class DriverDescriptor extends AbstractDescriptor implements DBPDriver
}
// New driver constructor
public DriverDescriptor(DataSourceProviderDescriptor providerDescriptor, String id)
public DriverDescriptor(DataSourceProviderDescriptor providerDescriptor, String id) {
this(providerDescriptor, id, null);
}
public DriverDescriptor(DataSourceProviderDescriptor providerDescriptor, String id, DriverDescriptor copyFrom)
{
super(providerDescriptor.getPluginId());
this.providerDescriptor = providerDescriptor;
this.id = id;
this.custom = true;
this.iconPlain = providerDescriptor.getIcon();
if (this.iconPlain == null) {
this.iconPlain = DBIcon.TREE_DATABASE;
}
makeIconExtensions();
this.origName = null;
this.origDescription = null;
this.origClassName = null;
this.origDefaultPort = null;
this.origSampleURL = null;
this.iconPlain = providerDescriptor.getIcon();
if (this.iconPlain == null) {
this.iconPlain = DBIcon.TREE_DATABASE;
}
makeIconExtensions();
if (copyFrom != null) {
// Copy props from source
this.category = copyFrom.category;
this.name = copyFrom.name;
this.description = copyFrom.description;
this.driverClassName = copyFrom.driverClassName;
this.driverDefaultPort = copyFrom.driverDefaultPort;
this.sampleURL = copyFrom.sampleURL;
this.webURL = copyFrom.webURL;
this.embedded = copyFrom.embedded;
this.clientRequired = copyFrom.clientRequired;
this.supportsDriverProperties = copyFrom.supportsDriverProperties;
this.anonymousAccess = copyFrom.anonymousAccess;
this.customDriverLoader = copyFrom.customDriverLoader;
this.clientHomeIds.addAll(copyFrom.clientHomeIds);
for (DriverFileSource fs : copyFrom.fileSources) {
this.fileSources.add(new DriverFileSource(fs));
}
this.libraries.addAll(copyFrom.libraries);
this.connectionPropertyDescriptors.addAll(copyFrom.connectionPropertyDescriptors);
this.defaultParameters.putAll(copyFrom.defaultParameters);
this.customParameters.putAll(copyFrom.customParameters);
this.defaultConnectionProperties.putAll(copyFrom.defaultConnectionProperties);
this.customConnectionProperties.putAll(copyFrom.customConnectionProperties);
}
}
// Predefined driver constructor
......
......@@ -69,6 +69,13 @@ public class DriverFileSource
}
}
public DriverFileSource(DriverFileSource copyFrom) {
this.url = copyFrom.url;
this.name = copyFrom.name;
this.instructions = copyFrom.instructions;
this.files.addAll(copyFrom.files);
}
public String getUrl() {
return url;
}
......
......@@ -123,6 +123,20 @@ public class DriverEditDialog extends HelpEnabledDialog {
this.origLibList = new ArrayList<>();
}
public DriverEditDialog(Shell shell, DataSourceProviderDescriptor provider, DriverDescriptor driver) {
super(shell, IHelpContextIds.CTX_DRIVER_EDITOR);
this.provider = provider;
this.driver = provider.createDriver(driver);
this.defaultCategory = driver.getCategory();
this.newDriver = true;
this.origLibList = new ArrayList<>();
}
public DriverDescriptor getDriver() {
return driver;
}
public int open(boolean addFiles) {
this.showAddFiles = addFiles;
return open();
......@@ -766,6 +780,7 @@ public class DriverEditDialog extends HelpEnabledDialog {
@Override
protected void okPressed() {
// Set props
driver.setName(driverNameText.getText());
driver.setCategory(driverCategoryCombo.getText());
......@@ -785,6 +800,12 @@ public class DriverEditDialog extends HelpEnabledDialog {
driver.setClientHomeIds(clientHomesPanel.getHomeIds());
}
DriverDescriptor oldDriver = provider.getDriverByName(driver.getCategory(), driver.getName());
if (oldDriver != null && oldDriver != driver) {
UIUtils.showMessageBox(getShell(), "Driver create", "Driver '" + driver.getName() + "' already exists. Change driver name", SWT.ICON_ERROR);
return;
}
// Finish
if (provider.getDriver(driver.getId()) == null) {
provider.addDriver(driver);
......
......@@ -21,6 +21,7 @@ import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.*;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
......@@ -55,6 +56,7 @@ public class DriverManagerDialog extends HelpEnabledDialog implements ISelection
private DriverDescriptor selectedDriver;
private Button newButton;
private Button copyButton;
private Button editButton;
private Button deleteButton;
private DriverTreeControl treeControl;
......@@ -115,65 +117,39 @@ public class DriverManagerDialog extends HelpEnabledDialog implements ISelection
Composite buttonBar = new Composite(group, SWT.TOP);
buttonBar.setLayout(new GridLayout(1, false));
GridData gd = new GridData(GridData.FILL_VERTICAL);
gd.minimumWidth = 100;
buttonBar.setLayoutData(gd);
newButton = new Button(buttonBar, SWT.FLAT | SWT.PUSH);
newButton.setText(CoreMessages.dialog_driver_manager_button_new);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.widthHint = 100;
newButton.setLayoutData(gd);
newButton.addSelectionListener(new SelectionListener()
{
newButton = UIUtils.createPushButton(buttonBar, CoreMessages.dialog_driver_manager_button_new, null, new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
public void widgetSelected(SelectionEvent e) {
createDriver();
}
});
newButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
copyButton = UIUtils.createPushButton(buttonBar, CoreMessages.dialog_driver_manager_button_copy, null, new SelectionAdapter() {
@Override
public void widgetDefaultSelected(SelectionEvent e)
{
public void widgetSelected(SelectionEvent e) {
copyDriver();
}
});
copyButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
editButton = new Button(buttonBar, SWT.FLAT | SWT.PUSH);
editButton.setText(CoreMessages.dialog_driver_manager_button_edit);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.widthHint = 100;
editButton.setLayoutData(gd);
editButton.addSelectionListener(new SelectionListener()
{
editButton = UIUtils.createPushButton(buttonBar, CoreMessages.dialog_driver_manager_button_edit, null, new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
public void widgetSelected(SelectionEvent e) {
editDriver();
}
@Override
public void widgetDefaultSelected(SelectionEvent e)
{
}
});
editButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
deleteButton = new Button(buttonBar, SWT.FLAT | SWT.PUSH);
deleteButton.setText(CoreMessages.dialog_driver_manager_button_delete);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.widthHint = 100;
deleteButton.setLayoutData(gd);
deleteButton.addSelectionListener(new SelectionListener()
{
deleteButton = UIUtils.createPushButton(buttonBar, CoreMessages.dialog_driver_manager_button_delete, null, new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
public void widgetSelected(SelectionEvent e) {
deleteDriver();
}
@Override
public void widgetDefaultSelected(SelectionEvent e)
{
}
});
deleteButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
{
final Composite legend = UIUtils.createPlaceholder(buttonBar, 2, 5);
......@@ -271,6 +247,7 @@ public class DriverManagerDialog extends HelpEnabledDialog implements ISelection
private void updateButtons()
{
newButton.setEnabled(onlyManagableProvider != null || (selectedProvider != null && selectedProvider.isDriversManagable()));
copyButton.setEnabled(selectedDriver != null && selectedDriver.isManagable());
editButton.setEnabled(selectedDriver != null);
deleteButton.setEnabled(selectedDriver != null && selectedDriver.getProviderDescriptor().isDriversManagable());
......@@ -307,6 +284,18 @@ public class DriverManagerDialog extends HelpEnabledDialog implements ISelection
DriverEditDialog dialog = new DriverEditDialog(getShell(), provider, selectedCategory);
if (dialog.open() == IDialogConstants.OK_ID) {
treeControl.getViewer().refresh();
treeControl.getViewer().setSelection(new StructuredSelection(dialog.getDriver()));
}
}
}
private void copyDriver()
{
if (selectedDriver != null) {
DriverEditDialog dialog = new DriverEditDialog(getShell(), selectedDriver.getProviderDescriptor(), selectedDriver);
if (dialog.open() == IDialogConstants.OK_ID) {
treeControl.getViewer().refresh();
treeControl.getViewer().setSelection(new StructuredSelection(dialog.getDriver()));
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册