package org.jbpm.gd.jpdl.properties;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import org.jbpm.gd.jpdl.model.ProcessState;
import org.jbpm.gd.jpdl.model.SubProcess;
public class SubProcessConfigurationComposite implements SelectionListener {
public static SubProcessConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) {
SubProcessConfigurationComposite result = new SubProcessConfigurationComposite();
result.widgetFactory = widgetFactory;
result.parent = parent;
result.create();
return result;
}
private TabbedPropertySheetWidgetFactory widgetFactory;
private Composite parent;
private ProcessState processState;
private Label subProcessNameLabel;
private Text subProcessNameText;
private Button subProcessVersionButton;
private Text subProcessVersionText;
private Composite variableContainerHolder;
private VariableContainerConfigurationComposite variableContainerConfigurationComposite;
private SubProcessConfigurationComposite() {}
public void setProcessState(ProcessState processState) {
if (this.processState == processState) return;
unhookListeners();
this.processState = processState;
clearControls();
if (processState != null) {
updateControls();
hookListeners();
}
}
private void hookListeners() {
subProcessNameText.addSelectionListener(this);
subProcessVersionButton.addSelectionListener(this);
subProcessVersionText.addSelectionListener(this);
}
private void unhookListeners() {
subProcessNameText.removeSelectionListener(this);
subProcessVersionButton.removeSelectionListener(this);
subProcessVersionText.removeSelectionListener(this);
}
private void clearControls() {
subProcessNameText.setText("");
subProcessVersionButton.setSelection(false);
subProcessVersionText.setEnabled(false);
subProcessVersionText.setText("");
variableContainerConfigurationComposite.setVariableContainer(null);
}
private void updateControls() {
SubProcess subProcess = processState.getSubProcess();
subProcessNameText.setText(subProcess.getName());
boolean versionEnabled = subProcess.getVersion() != null;
subProcessVersionButton.setSelection(versionEnabled);
subProcessVersionText.setEnabled(versionEnabled);
subProcessVersionText.setText(versionEnabled ? subProcess.getVersion() : "");
variableContainerConfigurationComposite.setVariableContainer(processState);
}
private void create() {
subProcessNameLabel = widgetFactory.createLabel(parent, "Subprocess Name");
subProcessNameText = widgetFactory.createText(parent, "");
subProcessVersionButton = widgetFactory.createButton(parent, "Version", SWT.CHECK);
subProcessVersionText = widgetFactory.createText(parent, "");
subProcessVersionText.setEnabled(false);
variableContainerHolder = widgetFactory.createComposite(parent);
variableContainerHolder.setLayout(new FormLayout());
variableContainerConfigurationComposite = VariableContainerConfigurationComposite.create(widgetFactory, variableContainerHolder);
subProcessNameLabel.setLayoutData(createSubProcessNameLabelLayoutData());
subProcessNameText.setLayoutData(createSubProcessNameTextLayoutData());
subProcessVersionButton.setLayoutData(createSubProcessVersionButtonLayoutData());
subProcessVersionText.setLayoutData(createSubProcessVersionTextLayoutData());
variableContainerHolder.setLayoutData(createVariableContainerHolderLayoutData());
}
private FormData createSubProcessNameLabelLayoutData() {
FormData result = new FormData();
result.left = new FormAttachment(0, 5);
result.top = new FormAttachment(0, 2);
return result;
}
private FormData createSubProcessNameTextLayoutData() {
FormData result = new FormData();
result.left = new FormAttachment(subProcessNameLabel, 0);
result.top = new FormAttachment(0, 0);
result.right = new FormAttachment(50, 0);
return result;
}
private FormData createSubProcessVersionButtonLayoutData() {
FormData result = new FormData();
result.left = new FormAttachment(subProcessNameText, 0);
result.top = new FormAttachment(0, 2);
return result;
}
private FormData createSubProcessVersionTextLayoutData() {
FormData result = new FormData();
result.left = new FormAttachment(subProcessVersionButton, 0);
result.right = new FormAttachment(100, -5);
result.top = new FormAttachment(0, 0);
return result;
}
private FormData createVariableContainerHolderLayoutData() {
FormData result = new FormData();
result.left = new FormAttachment(0, 0);
result.top = new FormAttachment(subProcessNameText, 0);
result.right = new FormAttachment(100, 0);
result.bottom = new FormAttachment(100, 0);
result.height = 100;
return result;
}
public void widgetDefaultSelected(SelectionEvent e) {
if (e.widget == subProcessNameText) {
processState.getSubProcess().setName(subProcessNameText.getText());
} else if (e.widget == subProcessVersionText) {
processState.getSubProcess().setVersion(subProcessVersionText.getText());
}
}
public void widgetSelected(SelectionEvent e) {
if (e.widget == subProcessVersionButton) {
if (subProcessVersionButton.getSelection()) {
processState.getSubProcess().setVersion(subProcessVersionText.getText());
subProcessVersionText.setEnabled(true);
subProcessVersionText.setFocus();
subProcessVersionText.selectAll();
} else {
processState.getSubProcess().setVersion(null);
subProcessVersionText.setEnabled(false);
subProcessVersionText.setText("");
}
}
}
}