/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
* Copyright (C) 2011-2012 Eugene Fradkin (eugene.fradkin@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.ui.preferences;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
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.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;
/**
* PrefPageDrivers
*/
public class PrefPageDrivers extends AbstractPrefPage implements IWorkbenchPreferencePage, IWorkbenchPropertyPage
{
private static final Log log = Log.getLog(PrefPageDrivers.class);
public static final String PAGE_ID = "org.jkiss.dbeaver.preferences.drivers"; //$NON-NLS-1$
private Button versionUpdateCheck;
private List sourceList;
private Text proxyHostText;
private Spinner proxyPortSpinner;
private Text proxyUserText;
private Text proxyPasswordText;
private SecuredPasswordEncrypter encrypter;
private Text customDriversHome;
@Override
public void init(IWorkbench workbench)
{
try {
encrypter = new SecuredPasswordEncrypter();
} catch (EncryptionException e) {
// ignore
log.warn(e);
}
}
@Override
protected Control createContents(Composite parent)
{
Composite composite = UIUtils.createPlaceholder(parent, 1, 5);
{
Group settings = UIUtils.createControlGroup(composite, "Settings", 2, GridData.FILL_HORIZONTAL, 300);
versionUpdateCheck = UIUtils.createCheckbox(settings, "Check for new driver versions", 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$
}
{
Group drivers = UIUtils.createControlGroup(composite, CoreMessages.pref_page_drivers_group_location, 2, GridData.FILL_HORIZONTAL, 300);
customDriversHome = DialogUtils.createOutputFolderChooser(drivers, "Local folder", null);
}
{
Group repoGroup = UIUtils.createControlGroup(composite, "File repositories", 2, GridData.FILL_HORIZONTAL, 300);
sourceList = new List(repoGroup, SWT.BORDER | SWT.SINGLE);
sourceList.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite buttonsPH = UIUtils.createPlaceholder(repoGroup, 1);
UIUtils.createToolButton(buttonsPH, "Add", new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
String url = EnterNameDialog.chooseName(getShell(), "Enter drivers location URL", "http://");
if (url != null) {
sourceList.add(url);
}
}
});
final Button removeButton = UIUtils.createToolButton(buttonsPH, "Remove", new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
sourceList.remove(sourceList.getSelectionIndices());
sourceList.notifyListeners(SWT.Selection, new Event());
}
});
removeButton.setEnabled(false);
sourceList.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
if (sourceList.getSelectionIndex() >= 0) {
removeButton.setEnabled(sourceList.getItemCount() > 1);
} else {
removeButton.setEnabled(false);
}
}
});
}
performDefaults();
return composite;
}
@Override
protected void performDefaults()
{
DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore();
versionUpdateCheck.setSelection(store.getBoolean(DBeaverPreferences.UI_DRIVERS_VERSION_UPDATE));
proxyHostText.setText(store.getString(DBeaverPreferences.UI_PROXY_HOST));
proxyPortSpinner.setSelection(store.getInt(DBeaverPreferences.UI_PROXY_PORT));
proxyUserText.setText(store.getString(DBeaverPreferences.UI_PROXY_USER));
// Load and decrypt password
String passwordString = store.getString(DBeaverPreferences.UI_PROXY_PASSWORD);
if (!CommonUtils.isEmpty(passwordString) && encrypter != null) {
try {
passwordString = encrypter.decrypt(passwordString);
} catch (EncryptionException e) {
log.warn(e);
}
}
proxyPasswordText.setText(passwordString);
customDriversHome.setText(DriverDescriptor.getCustomDriversHome().getAbsolutePath());
for (String source : DriverDescriptor.getDriversSources()) {
sourceList.add(source);
}
super.performDefaults();
}
@Override
public boolean performOk()
{
DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore();
store.setValue(DBeaverPreferences.UI_DRIVERS_VERSION_UPDATE, versionUpdateCheck.getSelection());
store.setValue(DBeaverPreferences.UI_PROXY_HOST, proxyHostText.getText());
store.setValue(DBeaverPreferences.UI_PROXY_PORT, proxyPortSpinner.getSelection());
store.setValue(DBeaverPreferences.UI_PROXY_USER, proxyUserText.getText());
String password = proxyPasswordText.getText();
if (!CommonUtils.isEmpty(password) && encrypter != null) {
// Encrypt password
try {
password = encrypter.encrypt(password);
} catch (EncryptionException e) {
log.warn(e);
}
}
store.setValue(DBeaverPreferences.UI_PROXY_PASSWORD, password);
store.setValue(DBeaverPreferences.UI_DRIVERS_HOME, customDriversHome.getText());
{
StringBuilder sources = new StringBuilder();
for (String item : sourceList.getItems()) {
if (sources.length() > 0) sources.append('|');
sources.append(item);
}
store.setValue(DBeaverPreferences.UI_DRIVERS_SOURCES, sources.toString());
}
PrefUtils.savePreferenceStore(store);
return super.performOk();
}
@Override
public IAdaptable getElement()
{
return null;
}
@Override
public void setElement(IAdaptable element)
{
}
}