package org.kie.eclipse.navigator.view.actions.dialogs;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
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.Label;
import org.eclipse.swt.widgets.Shell;
import com.eclipsesource.json.JsonObject;
public abstract class AbstractKieRequestDialog extends TitleAreaDialog {
protected JsonObject properties = new JsonObject();
protected Button okButton;
protected Composite errorComposite;
protected Label errorText;
protected IKieRequestValidator validator;
private String title;
protected abstract void createFields(Composite parent);
public AbstractKieRequestDialog(Shell shell, String title, IKieRequestValidator validator) {
super(shell);
this.validator = validator;
this.title = title;
// We don't really provide help, the help toolbar is used as an
// error message field which includes an image and text label.
// This is better than the default TitleAreaDialog behavior of
// overwriting the description with an error message.
// See the createHelpControl()} and setErrorMessage() overrides
setHelpAvailable(true);
}
public JsonObject getResult() {
return properties;
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(title);
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.TitleAreaDialog#createContents(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createContents(Composite parent) {
Control contents = super.createContents(parent);
setTitle(title);
validate();
return contents;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite parentComposite = (Composite)super.createDialogArea(parent);
Composite composite = new Composite(parentComposite, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
composite.setLayout(new GridLayout(3,false));
composite.setFont(parent.getFont());
createFields(composite);
return parentComposite;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.TrayDialog#createHelpControl(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createHelpControl(Composite parent) {
((GridLayout) parent.getLayout()).numColumns++;
errorComposite = new Composite(parent, SWT.NONE);
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
errorComposite.setLayoutData(gd);
errorComposite.setLayout(new GridLayout(2, false));
Label errorImage = new Label(errorComposite, SWT.NONE);
errorImage.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
errorImage.setImage(JFaceResources.getImage(DLG_IMG_TITLE_ERROR));
errorText = new Label(errorComposite, SWT.NONE);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
errorText.setLayoutData(gd);
errorText.setText("");
return errorComposite;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.TitleAreaDialog#setErrorMessage(java.lang.String)
*/
@Override
public void setErrorMessage(String newErrorMessage) {
if (errorComposite!=null && !errorComposite.isDisposed()) {
if (newErrorMessage==null || newErrorMessage.isEmpty()) {
errorComposite.setVisible(false);
((GridData)errorComposite.getLayoutData()).exclude = true;
errorText.setText("");
}
else {
errorComposite.setVisible(true);
((GridData)errorComposite.getLayoutData()).exclude = false;
errorText.setText(newErrorMessage);
}
errorText.getParent().getParent().layout();
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean)
*/
@Override
protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
Button button = super.createButton(parent, id, label, defaultButton);
if (id==IDialogConstants.OK_ID)
okButton = button;
return button;
}
protected void validate() {
String msg = null;
if (validator!=null && (msg = validator.isValid(properties))!=null) {
setErrorMessage(msg);
setDialogComplete(false);
}
else {
setErrorMessage(null);
setDialogComplete(true);
}
}
protected void setDialogComplete(boolean value) {
okButton.setEnabled(value);
}
}