package org.reldb.dbrowser.ui;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.Text;
import org.reldb.rel.shared.Defaults;
public class RemoteDatabaseDialog extends Dialog {
private final static int defaultPort = Defaults.getDefaultPort();
public static class RemoteDatabaseDialogResponse {
private String domain;
private int port;
public RemoteDatabaseDialogResponse(String domain, int port) {
this.domain = domain;
this.port = port;
}
public String getDomain() {
return domain;
}
public int getPort() {
return port;
}
public String toString() {
return domain + ":" + port;
}
}
protected RemoteDatabaseDialogResponse result;
protected Shell shlOpenRemoteDatabase;
private Text domain;
private Text port;
/**
* Create the dialog.
* @param parent
* @param style
*/
public RemoteDatabaseDialog(Shell parent) {
super(parent, SWT.None);
}
/**
* Open the dialog.
* @return the result
*/
public RemoteDatabaseDialogResponse open() {
createContents();
shlOpenRemoteDatabase.open();
shlOpenRemoteDatabase.layout();
Display display = getParent().getDisplay();
while (!shlOpenRemoteDatabase.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return result;
}
/**
* Create contents of the dialog.
*/
private void createContents() {
shlOpenRemoteDatabase = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.RESIZE);
shlOpenRemoteDatabase.setSize(450, 112);
shlOpenRemoteDatabase.setText("Open Remote Database");
shlOpenRemoteDatabase.setLayout(new FormLayout());
Label lblDomain = new Label(shlOpenRemoteDatabase, SWT.NONE);
FormData fd_lblDomain = new FormData();
fd_lblDomain.top = new FormAttachment(0, 10);
fd_lblDomain.left = new FormAttachment(0, 10);
lblDomain.setLayoutData(fd_lblDomain);
lblDomain.setText("Domain name or IP address:");
Label lblPort = new Label(shlOpenRemoteDatabase, SWT.NONE);
FormData fd_lblPort = new FormData();
fd_lblPort.left = new FormAttachment(0, 10);
lblPort.setLayoutData(fd_lblPort);
lblPort.setText("Port:");
domain = new Text(shlOpenRemoteDatabase, SWT.BORDER);
FormData fd_domain = new FormData();
fd_domain.right = new FormAttachment(100, -10);
fd_domain.left = new FormAttachment(lblDomain, 6);
fd_domain.top = new FormAttachment(0, 5);
domain.setLayoutData(fd_domain);
port = new Text(shlOpenRemoteDatabase, SWT.BORDER);
fd_lblPort.top = new FormAttachment(port, 6, SWT.TOP);
FormData fd_port = new FormData();
fd_port.top = new FormAttachment(lblDomain, 6);
fd_port.left = new FormAttachment(0, 48);
port.setLayoutData(fd_port);
port.setText(String.valueOf(defaultPort));
Button btnCancel = new Button(shlOpenRemoteDatabase, SWT.NONE);
FormData fd_btnCancel = new FormData();
fd_btnCancel.bottom = new FormAttachment(100, -10);
fd_btnCancel.right = new FormAttachment(domain, 0, SWT.RIGHT);
fd_btnCancel.left = new FormAttachment(100, -79);
btnCancel.setLayoutData(fd_btnCancel);
btnCancel.setText("Cancel");
btnCancel.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
shlOpenRemoteDatabase.dispose();
}
});
Button btnOk = new Button(shlOpenRemoteDatabase, SWT.NONE);
btnOk.setSelection(true);
FormData fd_btnOk = new FormData();
fd_btnOk.left = new FormAttachment(btnCancel, -73, SWT.LEFT);
fd_btnOk.top = new FormAttachment(btnCancel, 0, SWT.TOP);
fd_btnOk.right = new FormAttachment(btnCancel, -6);
btnOk.setLayoutData(fd_btnOk);
btnOk.setText("Ok");
btnOk.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String errStr = "";
if (domain.getText().trim().length() == 0) {
errStr += ((errStr.length() > 0) ? "\n" : "") + "You must specify a domain name or IP address.";
}
int portValue = 0;
if (port.getText().trim().length() == 0) {
errStr += ((errStr.length() > 0) ? "\n" : "") + "You must specify a port between 0 and 65535.";
} else {
try {
portValue = Integer.parseInt(port.getText());
if (portValue < 0)
errStr += ((errStr.length() > 0) ? "\n" : "") + "The port must be an integer between 0 and 65535.";
} catch (NumberFormatException nfe) {
errStr += ((errStr.length() > 0) ? "\n" : "") + "The port you entered, '" + port.getText() + "' should be an integer between 0 and 65535.";
}
}
if (errStr.length() > 0) {
MessageDialog.openError(shlOpenRemoteDatabase, "Error", errStr);
} else {
result = new RemoteDatabaseDialogResponse(domain.getText(), portValue);
shlOpenRemoteDatabase.dispose();
}
}
});
shlOpenRemoteDatabase.setDefaultButton(btnOk);
}
}