package org.jbpm.gd.jpdl.properties; import org.eclipse.swt.custom.CCombo; 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.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import org.jbpm.gd.jpdl.model.Action; import org.jbpm.gd.jpdl.model.Script; import org.jbpm.gd.jpdl.model.Timer; public class TimerActionConfigurationComposite implements SelectionListener { public static TimerActionConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) { TimerActionConfigurationComposite result = new TimerActionConfigurationComposite(); result.widgetFactory = widgetFactory; result.parent = parent; result.create(); return result; } private TabbedPropertySheetWidgetFactory widgetFactory; private Composite parent; private Label actionTypeLabel; private CCombo actionTypeCombo; private Composite actionComposite; private Composite scriptComposite; private ActionConfigurationComposite actionConfigurationComposite; private ScriptConfigurationComposite scriptConfigurationComposite; private Timer timer; private TimerActionConfigurationComposite() {} public void setTimer(Timer timer) { if (this.timer == timer) return; unhookListeners(); clearControls(); this.timer = timer; if (timer != null) { updateControls(); hookListeners(); } } private void hookListeners() { actionTypeCombo.addSelectionListener(this); } private void unhookListeners() { actionTypeCombo.removeSelectionListener(this); } private void clearControls() { actionTypeCombo.setText("<None>"); actionComposite.setVisible(false); scriptComposite.setVisible(false); } private void updateControls() { if (timer.getScript() != null) { actionTypeCombo.setText("Script"); scriptConfigurationComposite.setScript(timer.getScript()); scriptComposite.setVisible(true); } else if (timer.getAction() != null){ actionTypeCombo.setText("Action"); actionConfigurationComposite.setAction(timer.getAction()); actionComposite.setVisible(true); } else { actionTypeCombo.setText("<None>"); } } private void create() { actionTypeLabel = widgetFactory.createLabel(parent, "Action Type"); actionTypeCombo = widgetFactory.createCCombo(parent); actionTypeCombo.setItems( new String[] {"<None>", "Action", "Script"}); actionTypeCombo.addSelectionListener(this); actionComposite = widgetFactory.createComposite(parent); actionComposite.setLayout(new FormLayout()); actionConfigurationComposite = ActionConfigurationComposite.create(widgetFactory, actionComposite); actionComposite.setVisible(false); scriptComposite = widgetFactory.createComposite(parent); scriptComposite.setLayout(new FormLayout()); scriptConfigurationComposite = ScriptConfigurationComposite.create(widgetFactory, scriptComposite); scriptComposite.setVisible(false); actionTypeLabel.setLayoutData(createActionTypeLabelLayoutData()); actionTypeCombo.setLayoutData(createActionTypeComboLayoutData()); actionComposite.setLayoutData(createActionCompositeLayoutData()); scriptComposite.setLayoutData(createActionCompositeLayoutData()); } private FormData createActionCompositeLayoutData() { FormData data = new FormData(); data.top = new FormAttachment(actionTypeCombo, 0); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); data.bottom = new FormAttachment(100, 0); return data; } private FormData createActionTypeComboLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(actionTypeLabel, 0); data.top = new FormAttachment(0, 0); return data; } private FormData createActionTypeLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(0, 2); return data; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { if (e.widget == actionTypeCombo) { handleActionTypeComboSelected(); } } private void handleActionTypeComboSelected() { if ("Action".equals(actionTypeCombo.getText())) { if (actionConfigurationComposite.getAction() == null) { actionConfigurationComposite.setAction( (Action)timer.getFactory().createById("org.jbpm.gd.jpdl.action")); } timer.setScript(null); timer.setAction(actionConfigurationComposite.getAction()); } else if ("Script".equals(actionTypeCombo.getText())) { if (scriptConfigurationComposite.getScript() == null) { scriptConfigurationComposite.setScript( (Script)timer.getFactory().createById("org.jbpm.gd.jpdl.script")); } timer.setAction(null); timer.setScript(scriptConfigurationComposite.getScript()); } else { timer.setScript(null); timer.setAction(null); } actionComposite.setVisible("Action".equals(actionTypeCombo.getText())); scriptComposite.setVisible("Script".equals(actionTypeCombo.getText())); } }