/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.database.gui;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import de.rcenvironment.components.database.common.DatabaseConnection;
import de.rcenvironment.core.component.workflow.model.spi.ComponentInstanceProperties;
import de.rcenvironment.core.datamodel.api.EndpointActionType;
/**
* Database management dialog.
*
* @author Oliver Seebach
*/
public class DatabaseManagementDialog extends Dialog {
protected Composite composite;
protected Composite client;
protected ComponentInstanceProperties configuration;
protected Table table;
protected Button buttonAdd;
protected Button buttonEdit;
protected Button buttonRemove;
protected MenuItem itemAdd;
protected MenuItem itemEdit;
protected MenuItem itemRemove;
protected TableColumnLayout tableLayout;
protected DatabaseManagementDialog(Shell parentShell) {
super(parentShell);
setShellStyle(SWT.DIALOG_TRIM | SWT.PRIMARY_MODAL | SWT.RESIZE);
}
@Override
protected void configureShell(Shell shell) {
shell.setText("Manage Databases");
// shell.setMinimumSize(500, 300);
super.configureShell(shell);
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, "Close", true);
}
@Override
protected Control createDialogArea(Composite parent) {
client = new Composite(parent, SWT.NONE);
client.setLayout(new GridLayout(2, false));
final Composite tableComposite = new Composite(client, SWT.NONE);
tableLayout = new TableColumnLayout();
tableComposite.setLayout(tableLayout);
table = new Table(tableComposite, SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
table.setHeaderVisible(true);
GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 5);
final int minHeight = 300;
final int minWidth = 500;
tableLayoutData.heightHint = minHeight; // effectively min height
tableLayoutData.minimumWidth = minWidth; // effectively min height
tableComposite.setLayoutData(tableLayoutData);
final int columnWeight = 20;
// 1. column - db name
TableColumn colDbName = new TableColumn(table, SWT.NONE);
colDbName.setText("Name");
// 2. column - db type
TableColumn colType = new TableColumn(table, SWT.NONE);
colType.setText("Type");
// 3. column - db host
TableColumn colHost = new TableColumn(table, SWT.NONE);
colHost.setText("Host");
// 4. column - db port
TableColumn colPort = new TableColumn(table, SWT.NONE);
colPort.setText("Port");
// 5. column - db username
TableColumn colUsername = new TableColumn(table, SWT.NONE);
colUsername.setText("Username");
// 6. column - db password
TableColumn colPassword = new TableColumn(table, SWT.NONE);
colPassword.setText("Password");
// 7. column - db default scheme
TableColumn colDefaultScheme = new TableColumn(table, SWT.NONE);
colDefaultScheme.setText("Scheme");
// 8. column - db status
TableColumn colStatus = new TableColumn(table, SWT.NONE);
colStatus.setText("Status");
tableLayout.setColumnData(colDbName, new ColumnWeightData(columnWeight, true));
tableLayout.setColumnData(colType, new ColumnWeightData(columnWeight, true));
tableLayout.setColumnData(colHost, new ColumnWeightData(columnWeight, true));
tableLayout.setColumnData(colPort, new ColumnWeightData(columnWeight, true));
tableLayout.setColumnData(colUsername, new ColumnWeightData(columnWeight, true));
tableLayout.setColumnData(colPassword, new ColumnWeightData(columnWeight, true));
tableLayout.setColumnData(colDefaultScheme, new ColumnWeightData(columnWeight, true));
tableLayout.setColumnData(colStatus, new ColumnWeightData(columnWeight, true));
TableItem dummyItem = new TableItem(table, SWT.NONE);
String[] tableData = new String[8];
// tableData[0] = "name";
// tableData[1] = "name";
// tableData[2] = "name";
// tableData[3] = "name";
// tableData[4] = "name";
// tableData[5] = "name";
// tableData[6] = "name";
// tableData[7] = "name";
dummyItem.setText(tableData);
buttonAdd = new Button(client, SWT.FLAT);
buttonAdd.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
buttonAdd.setText(EndpointActionType.ADD.toString());
buttonAdd.addSelectionListener(new AddDatabaseButtonListener());
buttonEdit = new Button(client, SWT.FLAT);
buttonEdit.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
buttonEdit.setText(EndpointActionType.EDIT.toString());
buttonEdit.addSelectionListener(new EditDatabaseButtonListener());
buttonRemove = new Button(client, SWT.FLAT);
buttonRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
buttonRemove.setText(EndpointActionType.REMOVE.toString());
buttonRemove.addSelectionListener(new RemoveDatabaseButtonListener());
loadDatabaseConnections();
return super.createDialogArea(parent);
}
private void loadDatabaseConnections(){
for (DatabaseConnection dbCon : readDatabaseConnectionsFromConfig()){
parseDbConnectionAndAddToTable(dbCon);
}
}
private TableItem parseDbConnectionAndAddToTable(DatabaseConnection dbCon){
TableItem item = new TableItem(table, SWT.NONE);
item.setText(0, dbCon.getName());
item.setText(1, dbCon.getType());
item.setText(2, dbCon.getHost());
item.setText(3, dbCon.getPort());
item.setText(4, dbCon.getUsername());
item.setText(5, dbCon.getPassword());
item.setText(6, dbCon.getScheme());
item.setText(7, dbCon.getState());
return item;
}
private List<DatabaseConnection> readDatabaseConnectionsFromConfig(){
List<DatabaseConnection> connections = new ArrayList<>();
// retrieve connections here
return connections;
}
/**
* Listener to add database from management.
*
* @author Oliver Seebach
*/
private final class AddDatabaseButtonListener implements SelectionListener {
@Override
public void widgetSelected(SelectionEvent event) {
// DatabaseConnectionAddEditDialog addDialog = new DatabaseConnectionAddEditDialog
// (Display.getDefault().getActiveShell(), DatabaseManagementActionType.ADD);
// addDialog.open();
}
@Override
public void widgetDefaultSelected(SelectionEvent event) {
widgetSelected(event);
}
}
/**
* Listener to edit database from management.
*
* @author Oliver Seebach
*/
private final class EditDatabaseButtonListener implements SelectionListener {
@Override
public void widgetSelected(SelectionEvent event) {
TableItem item = table.getSelection()[0];
// DatabaseConnectionAddEditDialog addDialog = new DatabaseConnectionAddEditDialog(
// Display.getDefault().getActiveShell(), item, DatabaseManagementActionType.EDIT);
// addDialog.open();
}
@Override
public void widgetDefaultSelected(SelectionEvent event) {
widgetSelected(event);
}
}
/**
* Listener to remove database from management.
*
* @author Oliver Seebach
*/
private final class RemoveDatabaseButtonListener implements SelectionListener {
@Override
public void widgetSelected(SelectionEvent event) {
int selectedItemIndex = table.getSelectionIndex();
DatabaseConnectionDeleteCommand deleteCommand = new DatabaseConnectionDeleteCommand(table, selectedItemIndex);
deleteCommand.execute(); // TODO use command stack here
}
@Override
public void widgetDefaultSelected(SelectionEvent event) {
widgetSelected(event);
}
}
}