提交 0c3384d6 编写于 作者: S Serge Rider

#1149 Custom Maven repos edit


Former-commit-id: 7fffcecb
上级 50171340
......@@ -21,14 +21,15 @@ import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverActivator;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.xml.XMLBuilder;
import org.jkiss.utils.xml.XMLUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;
import java.io.FileOutputStream;
......@@ -107,31 +108,51 @@ public class MavenRegistry
MavenRepository.RepositoryType.LOCAL);
}
public void loadCustomRepositories() {
public void setCustomRepositories(List<MavenRepository> customRepositories) {
// Clear not-found cache
notFoundArtifacts.clear();
// Remove all custom repositories
for (Iterator<MavenRepository> iterator = repositories.iterator(); iterator.hasNext(); ) {
MavenRepository repository = iterator.next();
if (repository.getType() == MavenRepository.RepositoryType.CUSTOM) {
iterator.remove();
// Remove old custom repos
for (Iterator<MavenRepository> iter = this.repositories.iterator(); iter.hasNext(); ) {
if (iter.next().getType() == MavenRepository.RepositoryType.CUSTOM) {
iter.remove();
}
}
// Parse repositories from preferences
String repoString = DBeaverCore.getGlobalPreferenceStore().getString(DBeaverPreferences.UI_MAVEN_REPOSITORIES);
if (CommonUtils.isEmpty(repoString)) {
return;
}
for (String repoInfo : repoString.split("\\|")) {
int divPos = repoInfo.indexOf(':');
if (divPos < 0) {
continue;
// Add new and reorder
this.repositories.addAll(customRepositories);
sortRepositories();
}
public void loadCustomRepositories() {
final File cfgFile = getConfigurationFile();
if (cfgFile.exists()) {
try {
final Document reposDocument = XMLUtils.parseDocument(cfgFile);
for (Element repoElement : XMLUtils.getChildElementList(reposDocument.getDocumentElement(), "repository")) {
String repoID = repoElement.getAttribute("id");
MavenRepository repo = findRepository(repoID);
if (repo == null) {
String repoName = repoElement.getAttribute("name");
String repoURL = repoElement.getAttribute("url");
repo = new MavenRepository(
repoID,
repoName,
repoURL,
MavenRepository.RepositoryType.CUSTOM);
List<String> scopes = new ArrayList<>();
for (Element scopeElement : XMLUtils.getChildElementList(repoElement, "scope")) {
scopes.add(scopeElement.getAttribute("group"));
}
repo.setScopes(scopes);
repositories.add(repo);
}
repo.setOrder(CommonUtils.toInt(repoElement.getAttribute("order")));
repo.setEnabled(CommonUtils.toBoolean(repoElement.getAttribute("enabled")));
}
} catch (Exception e) {
log.error("Error parsing maven repositories configuration", e);
}
String repoID = repoInfo.substring(0, divPos);
String repoURL = repoInfo.substring(divPos + 1);
MavenRepository repo = new MavenRepository(repoID, repoID, repoURL, MavenRepository.RepositoryType.CUSTOM);
repositories.add(repo);
}
}
......
......@@ -54,7 +54,7 @@ public class MavenRepository
EXTERNAL // POM-defined repository
}
private final String id;
private String id;
private final RepositoryType type;
private String name;
private String url;
......@@ -85,29 +85,59 @@ public class MavenRepository
public MavenRepository(String id, String name, String url, RepositoryType type) {
this.id = id;
this.type = type;
this.name = CommonUtils.isEmpty(name) ? id : name;
if (!url.endsWith("/")) url += "/";
this.url = url;
this.type = type;
}
// Copy constructor
public MavenRepository(MavenRepository source) {
this.id = source.id;
this.type = source.type;
this.name = source.name;
this.url = source.url;
this.scopes.addAll(source.scopes);
this.order = source.order;
this.enabled = source.enabled;
this.description = source.description;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@NotNull
public List<String> getScopes() {
return scopes;
}
public void setScopes(List<String> scopes) {
this.scopes.clear();
this.scopes.addAll(scopes);
}
public RepositoryType getType() {
return type;
}
......
......@@ -35,17 +35,12 @@ import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.registry.driver.DriverDescriptor;
import org.jkiss.dbeaver.registry.encode.EncryptionException;
import org.jkiss.dbeaver.registry.encode.SecuredPasswordEncrypter;
import org.jkiss.dbeaver.registry.maven.MavenRegistry;
import org.jkiss.dbeaver.registry.maven.MavenRepository;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.ui.dialogs.EnterNameDialog;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.utils.CommonUtils;
import java.net.MalformedURLException;
import java.net.URL;
/**
* PrefPageDrivers
*/
......@@ -57,7 +52,6 @@ public class PrefPageDrivers extends AbstractPrefPage implements IWorkbenchPrefe
private Button versionUpdateCheck;
private Table mavenRepoTable;
private List sourceList;
private Text proxyHostText;
......@@ -88,55 +82,18 @@ public class PrefPageDrivers extends AbstractPrefPage implements IWorkbenchPrefe
Group settings = UIUtils.createControlGroup(composite, "Settings", 2, GridData.FILL_HORIZONTAL, 300);
versionUpdateCheck = UIUtils.createCheckbox(settings, "Check for new driver versions", false);
}
{
Group mavenGroup = UIUtils.createControlGroup(composite, "Maven repositories", 2, GridData.FILL_HORIZONTAL, 300);
mavenRepoTable = new Table(mavenGroup, SWT.BORDER | SWT.FULL_SELECTION);
UIUtils.createTableColumn(mavenRepoTable, SWT.LEFT, "Id");
UIUtils.createTableColumn(mavenRepoTable, SWT.LEFT, "URL");
mavenRepoTable.setHeaderVisible(true);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 60;
mavenRepoTable.setLayoutData(gd);
Composite buttonsPH = UIUtils.createPlaceholder(mavenGroup, 1);
UIUtils.createToolButton(buttonsPH, "Add", new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
String urlString = EnterNameDialog.chooseName(getShell(), "Enter Maven repository URL", "http://");
if (urlString != null) {
try {
URL url = new URL(urlString);
new TableItem(mavenRepoTable, SWT.NONE).setText(new String[]{url.getHost(), urlString});
} catch (MalformedURLException e1) {
UIUtils.showErrorDialog(getShell(), "Bad URL", "Bad Maven repository URL", e1);
}
}
}
});
final Button removeButton = UIUtils.createToolButton(buttonsPH, "Remove", new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
mavenRepoTable.remove(mavenRepoTable.getSelectionIndices());
mavenRepoTable.notifyListeners(SWT.Selection, new Event());
}
});
removeButton.setEnabled(false);
{
Group proxyObjects = UIUtils.createControlGroup(composite, CoreMessages.pref_page_ui_general_group_http_proxy, 4, GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING, 300);
proxyHostText = UIUtils.createLabelText(proxyObjects, CoreMessages.pref_page_ui_general_label_proxy_host, null); //$NON-NLS-2$
proxyPortSpinner = UIUtils.createLabelSpinner(proxyObjects, CoreMessages.pref_page_ui_general_spinner_proxy_port, 0, 0, 65535);
proxyUserText = UIUtils.createLabelText(proxyObjects, CoreMessages.pref_page_ui_general_label_proxy_user, null); //$NON-NLS-2$
proxyPasswordText = UIUtils.createLabelText(proxyObjects, CoreMessages.pref_page_ui_general_label_proxy_password, null, SWT.PASSWORD | SWT.BORDER); //$NON-NLS-2$
}
mavenRepoTable.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
boolean enabled = false;
TableItem[] selection = mavenRepoTable.getSelection();
if (selection.length == 1) {
enabled = selection[0].getData() instanceof MavenRepository &&
((MavenRepository) selection[0].getData()).getType() == MavenRepository.RepositoryType.CUSTOM;
}
removeButton.setEnabled(enabled);
}
});
{
Group drivers = UIUtils.createControlGroup(composite, CoreMessages.pref_page_drivers_group_location, 2, GridData.FILL_HORIZONTAL, 300);
customDriversHome = DialogUtils.createOutputFolderChooser(drivers, "Local folder", null);
}
{
......@@ -177,21 +134,6 @@ public class PrefPageDrivers extends AbstractPrefPage implements IWorkbenchPrefe
});
}
{
Group proxyObjects = UIUtils.createControlGroup(composite, CoreMessages.pref_page_ui_general_group_http_proxy, 4, GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING, 300);
proxyHostText = UIUtils.createLabelText(proxyObjects, CoreMessages.pref_page_ui_general_label_proxy_host, null); //$NON-NLS-2$
proxyPortSpinner = UIUtils.createLabelSpinner(proxyObjects, CoreMessages.pref_page_ui_general_spinner_proxy_port, 0, 0, 65535);
proxyUserText = UIUtils.createLabelText(proxyObjects, CoreMessages.pref_page_ui_general_label_proxy_user, null); //$NON-NLS-2$
proxyPasswordText = UIUtils.createLabelText(proxyObjects, CoreMessages.pref_page_ui_general_label_proxy_password, null, SWT.PASSWORD | SWT.BORDER); //$NON-NLS-2$
}
{
Group drivers = UIUtils.createControlGroup(composite, CoreMessages.pref_page_drivers_group_location, 2, GridData.FILL_HORIZONTAL, 300);
customDriversHome = DialogUtils.createOutputFolderChooser(drivers, "Local folder", null);
}
performDefaults();
return composite;
......@@ -222,13 +164,6 @@ public class PrefPageDrivers extends AbstractPrefPage implements IWorkbenchPrefe
for (String source : DriverDescriptor.getDriversSources()) {
sourceList.add(source);
}
for (MavenRepository repo : MavenRegistry.getInstance().getRepositories()) {
TableItem item = new TableItem(mavenRepoTable, SWT.NONE);
item.setText(new String[]{repo.getId(), repo.getUrl()});
item.setData(repo);
}
UIUtils.packColumns(mavenRepoTable, true);
super.performDefaults();
}
......@@ -262,22 +197,6 @@ public class PrefPageDrivers extends AbstractPrefPage implements IWorkbenchPrefe
store.setValue(DBeaverPreferences.UI_DRIVERS_SOURCES, sources.toString());
}
{
StringBuilder mavenRepos = new StringBuilder();
for (TableItem item : mavenRepoTable.getItems()) {
String repoId = item.getText(0);
String repoURL = item.getText(1);
MavenRepository repository = MavenRegistry.getInstance().findRepository(repoId);
if (repository != null && repository.getType() != MavenRepository.RepositoryType.CUSTOM) {
continue;
}
if (mavenRepos.length() > 0) mavenRepos.append('|');
mavenRepos.append(repoId).append(':').append(repoURL);
}
store.setValue(DBeaverPreferences.UI_MAVEN_REPOSITORIES, mavenRepos.toString());
MavenRegistry.getInstance().loadCustomRepositories();
}
PrefUtils.savePreferenceStore(store);
return super.performOk();
......
......@@ -19,6 +19,8 @@ package org.jkiss.dbeaver.ui.preferences;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
......@@ -27,9 +29,6 @@ import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.registry.maven.MavenRegistry;
import org.jkiss.dbeaver.registry.maven.MavenRepository;
import org.jkiss.dbeaver.ui.UIUtils;
......@@ -38,6 +37,7 @@ import org.jkiss.utils.CommonUtils;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
......@@ -46,8 +46,6 @@ import java.util.Set;
*/
public class PrefPageDriversMaven extends AbstractPrefPage implements IWorkbenchPreferencePage, IWorkbenchPropertyPage
{
private static final Log log = Log.getLog(PrefPageDriversMaven.class);
public static final String PAGE_ID = "org.jkiss.dbeaver.preferences.drivers.maven"; //$NON-NLS-1$
private Table mavenRepoTable;
......@@ -138,9 +136,43 @@ public class PrefPageDriversMaven extends AbstractPrefPage implements IWorkbench
{
Group propsGroup = UIUtils.createControlGroup(composite, "Properties", 2, GridData.FILL_HORIZONTAL, 0);
idText = UIUtils.createLabelText(propsGroup, "ID", "", SWT.BORDER | SWT.READ_ONLY);
idText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (getSelectedRepository() != null) {
getSelectedRepository().setId(idText.getText());
mavenRepoTable.getSelection()[0].setText(0, idText.getText());
}
}
});
nameText = UIUtils.createLabelText(propsGroup, "Name", "", SWT.BORDER);
nameText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (getSelectedRepository() != null) {
getSelectedRepository().setName(nameText.getText());
}
}
});
urlText = UIUtils.createLabelText(propsGroup, "URL", "", SWT.BORDER);
urlText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (getSelectedRepository() != null) {
getSelectedRepository().setUrl(urlText.getText());
mavenRepoTable.getSelection()[0].setText(1, urlText.getText());
}
}
});
scopeText = UIUtils.createLabelText(propsGroup, "Scope", "", SWT.BORDER);
scopeText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (getSelectedRepository() != null) {
getSelectedRepository().setScopes(CommonUtils.splitString(scopeText.getText(), ','));
}
}
});
}
performDefaults();
......@@ -148,10 +180,17 @@ public class PrefPageDriversMaven extends AbstractPrefPage implements IWorkbench
return composite;
}
private void updateSelection() {
private MavenRepository getSelectedRepository() {
TableItem[] selection = mavenRepoTable.getSelection();
if (selection.length == 1) {
final MavenRepository repo = (MavenRepository) selection[0].getData();
return (MavenRepository) selection[0].getData();
}
return null;
}
private void updateSelection() {
final MavenRepository repo = getSelectedRepository();
if (repo != null) {
if (disabledRepositories.contains(repo)) {
disableButton.setText("Enable");
} else {
......@@ -162,15 +201,18 @@ public class PrefPageDriversMaven extends AbstractPrefPage implements IWorkbench
removeButton.setEnabled(isEditable);
idText.setEnabled(true);
nameText.setEnabled(true);
urlText.setEnabled(true);
scopeText.setEnabled(true);
idText.setEditable(isEditable);
idText.setText(repo.getId());
nameText.setEnabled(true);
nameText.setEditable(isEditable);
nameText.setText(repo.getName());
urlText.setEnabled(true);
urlText.setEditable(isEditable);
urlText.setText(repo.getUrl());
scopeText.setEnabled(true);
scopeText.setEditable(isEditable);
scopeText.setText(CommonUtils.makeString(repo.getScopes(), ','));
} else {
......@@ -186,12 +228,11 @@ public class PrefPageDriversMaven extends AbstractPrefPage implements IWorkbench
@Override
protected void performDefaults()
{
DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore();
for (MavenRepository repo : MavenRegistry.getInstance().getRepositories()) {
MavenRepository repoCopy = repo.getType() == MavenRepository.RepositoryType.CUSTOM ? new MavenRepository(repo) : repo;
TableItem item = new TableItem(mavenRepoTable, SWT.NONE);
item.setText(new String[]{repo.getId(), repo.getUrl()});
item.setData(repo);
item.setText(new String[]{repoCopy.getId(), repoCopy.getUrl()});
item.setData(repoCopy);
if (!repo.isEnabled()) {
disabledRepositories.add(repo);
item.setForeground(disabledColor);
......@@ -205,7 +246,20 @@ public class PrefPageDriversMaven extends AbstractPrefPage implements IWorkbench
@Override
public boolean performOk()
{
MavenRegistry.getInstance().saveConfiguration();
java.util.List<MavenRepository> customRepos = new ArrayList<>();
TableItem[] items = mavenRepoTable.getItems();
for (int i = 0; i < items.length; i++) {
TableItem item = items[i];
MavenRepository repo = (MavenRepository) item.getData();
repo.setEnabled(!disabledRepositories.contains(repo));
repo.setOrder(i);
if (repo.getType() == MavenRepository.RepositoryType.CUSTOM) {
customRepos.add(repo);
}
}
final MavenRegistry registry = MavenRegistry.getInstance();
registry.setCustomRepositories(customRepos);
registry.saveConfiguration();
return super.performOk();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册