/*******************************************************************************
* Copyright (c) 2013 AGETO Service GmbH 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.jobs.internal.generic;
import java.util.List;
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.StringDialogField;
import org.eclipse.gyrex.admin.ui.jobs.internal.JobsUiActivator;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.rap.rwt.widgets.DialogCallback;
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 AddEditParameterDialog extends NonBlockingStatusDialog {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
private final StringDialogField nameField = new StringDialogField();
private final StringDialogField valueField = new StringDialogField();
private final List<Object> parameters;
private final Parameter parameterToEdit;
public AddEditParameterDialog(final Shell parent) {
this(parent, null, null);
}
public AddEditParameterDialog(final Shell parent, final Parameter parameter, final List<Object> parameters) {
super(parent);
parameterToEdit = parameter;
this.parameters = parameters;
setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
if (parameterToEdit != null) {
setTitle("Edit Parameter");
nameField.setText(StringUtils.trimToEmpty(parameter.getName()));
valueField.setText(StringUtils.trimToEmpty(parameter.getValue()));
} else {
setTitle("New Parameter");
}
}
@Override
protected Control createDialogArea(final Composite parent) {
final Composite composite = (Composite) super.createDialogArea(parent);
final GridData gd = (GridData) composite.getLayoutData();
gd.minimumHeight = convertVerticalDLUsToPixels(40);
gd.minimumWidth = convertHorizontalDLUsToPixels(200);
nameField.setLabelText("Name:");
valueField.setLabelText("Value:");
final IDialogFieldListener validateListener = new IDialogFieldListener() {
@Override
public void dialogFieldChanged(final DialogField field) {
validate();
}
};
nameField.setDialogFieldListener(validateListener);
valueField.setDialogFieldListener(validateListener);
LayoutUtil.doDefaultLayout(composite, new DialogField[] { nameField, valueField }, false);
LayoutUtil.setHorizontalGrabbing(nameField.getTextControl(null));
LayoutUtil.setHorizontalGrabbing(valueField.getTextControl(null));
LayoutUtil.setMargin(composite, 5);
return composite;
}
public String getName() {
return nameField.getText();
}
public String getValue() {
return valueField.getText();
}
@Override
protected void okPressed() {
validate();
if (!getStatus().isOK())
return;
super.okPressed();
}
@Override
public void openNonBlocking(final DialogCallback callback) {
super.openNonBlocking(callback);
if (parameterToEdit != null) {
valueField.getTextControl(null).setSelection(0);
valueField.setFocus();
} else {
nameField.setFocus();
}
}
void setError(final String message) {
updateStatus(new Status(IStatus.ERROR, JobsUiActivator.SYMBOLIC_NAME, message));
getShell().pack(true);
}
void setInfo(final String message) {
updateStatus(new Status(IStatus.INFO, JobsUiActivator.SYMBOLIC_NAME, message));
}
void setWarning(final String message) {
updateStatus(new Status(IStatus.WARNING, JobsUiActivator.SYMBOLIC_NAME, message));
}
void validate() {
if (StringUtils.isBlank(getName())) {
setInfo("Please enter a name.");
return;
}
if (StringUtils.isBlank(getValue())) {
setInfo("Please enter a value.");
return;
}
if (parameters != null) {
for (final Object parameter : parameters) {
if (parameter != parameterToEdit) {
if (StringUtils.equals(((Parameter) parameter).getName(), getName())) {
setError("A parameter with the specified name already exists. Please use a different name.");
return;
}
}
}
}
updateStatus(Status.OK_STATUS);
}
}