/**
* Copyright (c) 2011, 2012 Gunnar Wagenknecht and others.
* All rights reserved.
*
* This program and the accompanying materials are made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Gunnar Wagenknecht - initial API and implementation
*/
package org.eclipse.gyrex.admin.ui.cloud.internal;
import org.eclipse.gyrex.admin.ui.internal.widgets.NonBlockingStatusDialog;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.DialogField;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.LayoutUtil;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.Separator;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.StringDialogField;
import org.eclipse.gyrex.cloud.admin.ICloudManager;
import org.eclipse.gyrex.cloud.admin.INodeConfigurer;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.util.Policy;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.apache.commons.lang.StringUtils;
public class ConnectToCloudDialog extends NonBlockingStatusDialog {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
private final StringDialogField connectStringField = new StringDialogField();
private final ICloudManager cloudManager;
/**
* Creates a new instance.
*
* @param cloudManager
* @param parent
*/
public ConnectToCloudDialog(final ICloudManager cloudManager, final Shell parent) {
super(parent);
this.cloudManager = cloudManager;
setTitle("Connect Node");
setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
}
@Override
protected Control createDialogArea(final Composite parent) {
final Composite composite = (Composite) super.createDialogArea(parent);
final GridData gd = (GridData) composite.getLayoutData();
gd.minimumHeight = convertVerticalDLUsToPixels(60);
gd.minimumWidth = convertHorizontalDLUsToPixels(400);
connectStringField.setLabelText("Connect String");
final IDialogFieldListener validateListener = new IDialogFieldListener() {
@Override
public void dialogFieldChanged(final DialogField field) {
validate();
}
};
connectStringField.setDialogFieldListener(validateListener);
LayoutUtil.doDefaultLayout(composite, new DialogField[] { new Separator(), connectStringField }, false);
LayoutUtil.setHorizontalGrabbing(connectStringField.getTextControl(null));
connectStringField.setFocus();
return composite;
}
@Override
protected void okPressed() {
validate();
if (!getStatus().isOK()) {
return;
}
final INodeConfigurer nodeConfigurer = cloudManager.getNodeConfigurer(cloudManager.getLocalInfo().getNodeId());
final IStatus status = nodeConfigurer.configureConnection(connectStringField.getText());
if (!status.isOK()) {
Policy.getStatusHandler().show(status, "Error Connecting Node");
return;
}
super.okPressed();
}
void setError(final String message) {
updateStatus(new Status(IStatus.ERROR, CloudUiActivator.SYMBOLIC_NAME, message));
getShell().pack(true);
}
void setInfo(final String message) {
updateStatus(new Status(IStatus.INFO, CloudUiActivator.SYMBOLIC_NAME, message));
}
void setWarning(final String message) {
updateStatus(new Status(IStatus.WARNING, CloudUiActivator.SYMBOLIC_NAME, message));
}
void validate() {
final String connectStr = connectStringField.getText();
if (StringUtils.isBlank(connectStr)) {
setInfo("Please enter a connect string.");
return;
}
updateStatus(Status.OK_STATUS);
}
}