/*
* 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.dialogs.connection;
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.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.connection.DBPClientHome;
import org.jkiss.dbeaver.model.connection.DBPClientManager;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.ui.UIUtils;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
/**
* ClientHomesSelector
*/
public class ClientHomesSelector
{
private static final Log log = Log.getLog(ClientHomesSelector.class);
private Composite selectorPanel;
private Combo homesCombo;
//private Label versionLabel;
private DBPDriver driver;
private List<String> homeIds = new ArrayList<>();
private String currentHomeId;
public ClientHomesSelector(
Composite parent,
int style,
String title)
{
selectorPanel = new Composite(parent, style);
selectorPanel.setLayout(new GridLayout(2, false));
UIUtils.createControlLabel(selectorPanel, title);
//label.setFont(UIUtils.makeBoldFont(label.getFont()));
homesCombo = new Combo(selectorPanel, SWT.READ_ONLY);
//directoryDialog = new DirectoryDialog(selectorContainer.getShell(), SWT.OPEN);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.grabExcessHorizontalSpace = true;
homesCombo.setLayoutData(gd);
homesCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
if (homesCombo.getSelectionIndex() == homesCombo.getItemCount() - 1) {
manageHomes();
} else {
currentHomeId = homeIds.get(homesCombo.getSelectionIndex());
}
displayClientVersion();
handleHomeChange();
}
});
// versionLabel = new Label(this, SWT.CENTER);
// gd = new GridData();
// gd.widthHint = 60;
// versionLabel.setLayoutData(gd);
}
public Composite getPanel() {
return selectorPanel;
}
private void manageHomes()
{
String newHomeId = ClientHomesPanel.chooseClientHome(selectorPanel.getShell(), driver);
if (newHomeId != null) {
currentHomeId = newHomeId;
}
populateHomes(driver, currentHomeId);
}
public void populateHomes(DBPDriver driver, String currentHome)
{
this.driver = driver;
this.currentHomeId = currentHome;
this.homesCombo.removeAll();
this.homeIds.clear();
DBPClientManager clientManager = driver.getClientManager();
if (clientManager != null) {
Set<String> homes = new LinkedHashSet<>(
clientManager.findClientHomeIds());
homes.addAll(driver.getClientHomeIds());
for (String homeId : homes) {
DBPClientHome home = driver.getClientHome(homeId);
if (home != null) {
homesCombo.add(home.getDisplayName());
homeIds.add(home.getHomeId());
if (currentHomeId != null && home.getHomeId().equals(currentHomeId)) {
homesCombo.select(homesCombo.getItemCount() - 1);
}
}
}
this.homesCombo.add(CoreMessages.controls_client_home_selector_browse);
}
displayClientVersion();
}
private void displayClientVersion()
{
/*
DBPClientHome clientHome = currentHomeId == null ? null : driver.getClientHome(currentHomeId);
if (clientHome != null) {
try {
// display client version
if (clientHome.getProductVersion() != null) {
versionLabel.setText(clientHome.getProductVersion());
} else {
versionLabel.setText(clientHome.getProductName());
}
} catch (DBException e) {
log.error(e);
}
} else {
versionLabel.setText(""); //$NON-NLS-1$
}
*/
}
protected void handleHomeChange()
{
}
public String getSelectedHome()
{
return currentHomeId;
}
}