/******************************************************************************* * Copyright (c) 2011, 2012 Red Hat, Inc. * All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation * * @author Bob Brodt ******************************************************************************/ package org.eclipse.bpmn2.modeler.ui.property.events; import org.eclipse.bpmn2.FormalExpression; import org.eclipse.bpmn2.TimerEventDefinition; import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection; import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite; import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.TextObjectEditor; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; /** * @author Bob Brodt * */ public class TimerEventDefinitionDetailComposite extends DefaultDetailComposite { protected FormalExpression expression = null; protected Button timeDateButton; protected Button timeCycleButton; protected Button timeDurationButton; protected TextObjectEditor timeValueEditor; public enum TimerType { NONE, TIMEDATE, TIMECYCLE, TIMEDURATION }; protected TimerType timerType = TimerType.NONE; /** * @param parent * @param style */ public TimerEventDefinitionDetailComposite(Composite parent, int style) { super(parent, style); } /** * @param section */ public TimerEventDefinitionDetailComposite(AbstractBpmn2PropertySection section) { super(section); } @Override public void cleanBindings() { super.cleanBindings(); timeDateButton = null; timeCycleButton = null; timeDurationButton = null; } @Override public void createBindings(EObject be) { final TimerEventDefinition event = (TimerEventDefinition)be; Composite composite = getAttributesParent(); createLabel(composite, Messages.TimerEventDefinitionDetailComposite_Type); Composite buttonComposite = toolkit.createComposite(composite); buttonComposite.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); FillLayout layout = new FillLayout(); layout.marginWidth = 10; layout.spacing = 20; buttonComposite.setLayout(layout); timeDateButton = toolkit.createButton(buttonComposite, Messages.TimerEventDefinitionDetailComposite_Time_Date, SWT.RADIO); timeCycleButton = toolkit.createButton(buttonComposite, Messages.TimerEventDefinitionDetailComposite_Interval, SWT.RADIO); timeDurationButton = toolkit.createButton(buttonComposite, Messages.TimerEventDefinitionDetailComposite_Duration, SWT.RADIO); if (!isModelObjectEnabled(event.eClass(), PACKAGE.getTimerEventDefinition_TimeDate())) timeDateButton.setVisible(false); if (!isModelObjectEnabled(event.eClass(), PACKAGE.getTimerEventDefinition_TimeCycle())) timeCycleButton.setVisible(false); if (!isModelObjectEnabled(event.eClass(), PACKAGE.getTimerEventDefinition_TimeDuration())) timeDurationButton.setVisible(false); if (event.getTimeDate()!=null) { expression = (FormalExpression)event.getTimeDate(); timeDateButton.setSelection(true); timerType = TimerType.TIMEDATE; } else if (event.getTimeCycle()!=null) { expression = (FormalExpression)event.getTimeCycle(); timeCycleButton.setSelection(true); timerType = TimerType.TIMECYCLE; } else if (event.getTimeDuration()!=null) { expression = (FormalExpression)event.getTimeDuration(); timeDurationButton.setSelection(true); timerType = TimerType.TIMEDURATION; } else{ timerType = TimerType.NONE; expression = createModelObject(FormalExpression.class); } timeValueEditor = new TextObjectEditor(this, expression, PACKAGE.getFormalExpression_Body()); timeDateButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (timeDateButton.getSelection() && timerType!=TimerType.TIMEDATE) { TransactionalEditingDomain domain = getDiagramEditor().getEditingDomain(); domain.getCommandStack().execute(new RecordingCommand(domain) { @Override protected void doExecute() { FormalExpression exp = expression; //createModelObject(FormalExpression.class); event.eUnset(PACKAGE.getTimerEventDefinition_TimeCycle()); event.eUnset(PACKAGE.getTimerEventDefinition_TimeDuration()); event.setTimeDate(exp); String body = exp.getBody(); if (body==null || "null".equals(body)) //$NON-NLS-1$ body = ""; //$NON-NLS-1$ exp.setBody(""); //$NON-NLS-1$ exp.setBody(body); timeValueEditor.setObject(exp); timerType = TimerType.TIMEDATE; } }); } } }); timeCycleButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (timeCycleButton.getSelection() && timerType!=TimerType.TIMECYCLE) { TransactionalEditingDomain domain = getDiagramEditor().getEditingDomain(); domain.getCommandStack().execute(new RecordingCommand(domain) { @Override protected void doExecute() { FormalExpression exp = expression; //createModelObject(FormalExpression.class); event.eUnset(PACKAGE.getTimerEventDefinition_TimeDate()); event.eUnset(PACKAGE.getTimerEventDefinition_TimeDuration()); event.setTimeCycle(exp); String body = exp.getBody(); if (body==null || "null".equals(body)) //$NON-NLS-1$ body = ""; //$NON-NLS-1$ exp.setBody(""); //$NON-NLS-1$ exp.setBody(body); timeValueEditor.setObject(exp); timerType = TimerType.TIMECYCLE; } }); } } }); timeDurationButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (timeDurationButton.getSelection() && timerType!=TimerType.TIMEDURATION) { TransactionalEditingDomain domain = getDiagramEditor().getEditingDomain(); domain.getCommandStack().execute(new RecordingCommand(domain) { @Override protected void doExecute() { FormalExpression exp = expression; //createModelObject(FormalExpression.class); event.eUnset(PACKAGE.getTimerEventDefinition_TimeDate()); event.eUnset(PACKAGE.getTimerEventDefinition_TimeCycle()); event.setTimeDuration(exp); String body = exp.getBody(); if (body==null || "null".equals(body)) //$NON-NLS-1$ body = ""; //$NON-NLS-1$ exp.setBody(""); //$NON-NLS-1$ exp.setBody(body); timeValueEditor.setObject(exp); timerType = TimerType.TIMEDURATION; } }); } } }); timeValueEditor.createControl(composite, Messages.TimerEventDefinitionDetailComposite_Value); } }