package org.activiti.designer.property.ui;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
public class IOParameterDialog extends Dialog implements ITabbedPropertyConstants {
public String source;
public String sourceExpression;
public String target;
public String targetExpression;
protected String savedSource;
protected String savedSourceExpression;
protected String savedTarget;
protected String savedTargetExpression;
public IOParameterDialog(Shell parent, TableItem[] fieldList) {
// Pass the default styles here
this(parent, fieldList, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
}
public IOParameterDialog(Shell parent, TableItem[] fieldList, String savedSource, String savedSourceExpression,
String savedTarget, String savedTargetExpression) {
// Pass the default styles here
this(parent, fieldList, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
this.savedSource = savedSource;
this.savedSourceExpression = savedSourceExpression;
this.savedTarget = savedTarget;
this.savedTargetExpression = savedTargetExpression;
}
public IOParameterDialog(Shell parent, TableItem[] fieldList, int style) {
// Let users override the default styles
super(parent, style);
setText("Form property configuration");
}
/**
* Opens the dialog and returns the input
*
* @return String
*/
public String open() {
// Create the dialog window
Shell shell = new Shell(getParent(), getStyle());
shell.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
shell.setText(getText());
shell.setSize(700, 400);
Point location = getParent().getShell().getLocation();
Point size = getParent().getShell().getSize();
shell.setLocation((location.x + size.x - 300) / 2, (location.y + size.y - 150) / 2);
createContents(shell);
shell.open();
Display display = getParent().getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return null;
}
/**
* Creates the dialog's contents
*
* @param shell
* the dialog window
*/
private void createContents(final Shell shell) {
FormLayout layout = new FormLayout();
layout.marginHeight = 5;
layout.marginWidth = 5;
shell.setLayout(layout);
FormData data;
final Text sourceText = new Text(shell, SWT.BORDER);
if(savedSource != null) {
sourceText.setText(savedSource);
}
data = new FormData();
data.left = new FormAttachment(0, 120);
data.right = new FormAttachment(70, 0);
data.top = new FormAttachment(0, 10);
sourceText.setLayoutData(data);
createLabel("Source", shell, sourceText);
final Text sourceExpressionText = new Text(shell, SWT.BORDER);
if(savedSourceExpression != null) {
sourceExpressionText.setText(savedSourceExpression);
}
data = new FormData();
data.left = new FormAttachment(0, 120);
data.right = new FormAttachment(70, 0);
data.top = new FormAttachment(sourceText, 10);
sourceExpressionText.setLayoutData(data);
createLabel("Source expression", shell, sourceExpressionText);
final Text targetText = new Text(shell, SWT.BORDER);
if(savedTarget != null) {
targetText.setText(savedTarget);
}
data = new FormData();
data.left = new FormAttachment(0, 120);
data.right = new FormAttachment(70, 0);
data.top = new FormAttachment(sourceExpressionText, 10);
targetText.setLayoutData(data);
createLabel("Target", shell, targetText);
final Text targetExpressionText = new Text(shell, SWT.BORDER);
if(savedTargetExpression != null) {
targetExpressionText.setText(savedTargetExpression);
}
data = new FormData();
data.left = new FormAttachment(0, 120);
data.right = new FormAttachment(70, 0);
data.top = new FormAttachment(targetText, 10);
targetExpressionText.setLayoutData(data);
createLabel("Target expression", shell, targetExpressionText);
// Create the cancel button and add a handler
// so that pressing it will set input to null
Button cancel = new Button(shell, SWT.PUSH);
cancel.setText("Cancel");
data = new FormData();
data.left = new FormAttachment(0, 120);
data.right = new FormAttachment(50, 0);
data.top = new FormAttachment(targetExpressionText, 20);
cancel.setLayoutData(data);
cancel.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
shell.close();
}
});
Button ok = new Button(shell, SWT.PUSH);
ok.setText("OK");
data = new FormData();
data.left = new FormAttachment(0, 0);
data.right = new FormAttachment(cancel, -HSPACE);
data.top = new FormAttachment(cancel, 0, SWT.TOP);
ok.setLayoutData(data);
ok.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if(StringUtils.isEmpty(sourceText.getText()) && StringUtils.isEmpty(sourceExpressionText.getText())) {
MessageDialog.openError(shell, "Validation error", "Source or source expression must be filled.");
return;
}
if(StringUtils.isEmpty(targetText.getText()) && StringUtils.isEmpty(targetExpressionText.getText())) {
MessageDialog.openError(shell, "Validation error", "Target or target expression must be filled.");
return;
}
source = sourceText.getText();
sourceExpression = sourceExpressionText.getText();
target = targetText.getText();
targetExpression = targetExpressionText.getText();
shell.close();
}
});
// Set the OK button as the default, so
// user can type input and press Enter
// to dismiss
shell.setDefaultButton(ok);
}
private void createLabel(String text, Shell shell, Control control) {
CLabel idLabel = new CLabel(shell, SWT.NONE);
idLabel.setText(text);
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.right = new FormAttachment(control, -HSPACE);
data.top = new FormAttachment(control, 0, SWT.TOP);
idLabel.setLayoutData(data);
idLabel.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
}
}