package org.insightech.er.editor.view.dialog.common;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
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 org.insightech.er.ResourceString;
import org.insightech.er.common.dialog.AbstractDialog;
import org.insightech.er.common.exception.InputException;
import org.insightech.er.editor.model.settings.DBSetting;
import org.insightech.er.preference.PreferenceInitializer;
import org.insightech.er.util.Format;
public class DBSettingListDialog extends AbstractDialog {
private Table settingTable;
private List<DBSetting> dbSettingList;
private DBSetting result;
private String database;
public DBSettingListDialog(Shell parentShell, String database) {
super(parentShell);
this.database = database;
this.dbSettingList = new ArrayList<DBSetting>();
}
@Override
protected void initialize(Composite composite) {
GridData gridData = new GridData();
gridData.heightHint = 150;
this.settingTable = new Table(composite, SWT.FULL_SELECTION
| SWT.BORDER);
this.settingTable.setHeaderVisible(true);
this.settingTable.setLayoutData(gridData);
this.settingTable.setLinesVisible(false);
TableColumn dbsystemColumn = new TableColumn(this.settingTable,
SWT.LEFT);
dbsystemColumn.setWidth(100);
dbsystemColumn.setText(ResourceString
.getResourceString("label.database"));
TableColumn serverColumn = new TableColumn(this.settingTable, SWT.LEFT);
serverColumn.setWidth(100);
serverColumn.setText(ResourceString
.getResourceString("label.server.name"));
TableColumn portColumn = new TableColumn(this.settingTable, SWT.RIGHT);
portColumn.setWidth(80);
portColumn.setText(ResourceString.getResourceString("label.port"));
TableColumn databaseColumn = new TableColumn(this.settingTable,
SWT.LEFT);
databaseColumn.setWidth(100);
databaseColumn.setText(ResourceString
.getResourceString("label.database.name"));
TableColumn userNameColumn = new TableColumn(this.settingTable,
SWT.LEFT);
userNameColumn.setWidth(100);
userNameColumn.setText(ResourceString
.getResourceString("label.user.name"));
TableColumn urlTableColumn = new TableColumn(this.settingTable,
SWT.LEFT);
urlTableColumn.setWidth(130);
urlTableColumn.setText(ResourceString.getResourceString("label.url"));
}
/**
* {@inheritDoc}
*/
@Override
protected void addListener() {
super.addListener();
this.settingTable.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void mouseDoubleClick(MouseEvent e) {
buttonPressed(IDialogConstants.OK_ID);
}
});
this.settingTable.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent e) {
validate();
int index = settingTable.getSelectionIndex();
if (index == -1) {
return;
}
selectTable(index);
}
});
}
@Override
protected void perfomeOK() throws InputException {
int index = settingTable.getSelectionIndex();
this.result = this.dbSettingList.get(index);
}
public DBSetting getResult() {
return this.result;
}
public int getResultIndex() {
return this.dbSettingList.indexOf(this.result);
}
@Override
protected void setData() {
this.dbSettingList = PreferenceInitializer
.getDBSettingList(this.database);
for (DBSetting dbSetting : this.dbSettingList) {
TableItem item = new TableItem(this.settingTable, SWT.NONE);
item.setText(0, dbSetting.getDbsystem());
item.setText(1, dbSetting.getServer());
if (dbSetting.getPort() != 0) {
item.setText(2, String.valueOf(dbSetting.getPort()));
}
item.setText(3, dbSetting.getDatabase());
item.setText(4, dbSetting.getUser());
item.setText(5, Format.null2blank(dbSetting.getUrl()));
}
this.setButtonEnabled(false);
}
/**
* {@inheritDoc}
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, ResourceString
.getResourceString("label.load.setting"), true);
createButton(parent, IDialogConstants.STOP_ID, ResourceString
.getResourceString("label.delete"), false);
createButton(parent, IDialogConstants.CLOSE_ID,
IDialogConstants.CLOSE_LABEL, false);
setButtonEnabled(false);
}
private void setButtonEnabled(boolean enabled) {
Button okButton = this.getButton(IDialogConstants.OK_ID);
if (okButton != null) {
okButton.setEnabled(enabled);
}
Button deleteButton = this.getButton(IDialogConstants.STOP_ID);
if (deleteButton != null) {
deleteButton.setEnabled(enabled);
}
}
private void selectTable(int index) {
this.settingTable.select(index);
if (index >= 0) {
this.setButtonEnabled(true);
} else {
this.setButtonEnabled(false);
}
}
@Override
protected String getErrorMessage() {
int index = settingTable.getSelectionIndex();
if (index == -1) {
return "dialog.message.load.db.setting";
}
return null;
}
@Override
protected String getTitle() {
return "label.load.database.setting";
}
/**
* {@inheritDoc}
*/
@Override
protected void buttonPressed(int buttonId) {
if (buttonId == IDialogConstants.STOP_ID) {
int index = this.settingTable.getSelectionIndex();
if (index != -1) {
this.settingTable.remove(index);
this.dbSettingList.remove(index);
PreferenceInitializer.saveSetting(this.dbSettingList);
if (index >= this.settingTable.getItemCount()) {
index = this.settingTable.getItemCount() - 1;
}
this.selectTable(index);
}
}
super.buttonPressed(buttonId);
}
}