[ui.fsm] Bug 464413 - Reconnecting a guarded transition will change the
transition to a triggered transition

Change-Id: I1051556f96a164e9efd6066987e7f8b49853550f
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
index 177741f..a161b21 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
@@ -19,7 +19,6 @@
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.etrice.core.fsm.fSM.CPBranchTransition;
 import org.eclipse.etrice.core.fsm.fSM.ChoicepointTerminal;
-import org.eclipse.etrice.core.fsm.fSM.ComponentCommunicationType;
 import org.eclipse.etrice.core.fsm.fSM.ContinuationTransition;
 import org.eclipse.etrice.core.fsm.fSM.DetailCode;
 import org.eclipse.etrice.core.fsm.fSM.EntryPoint;
@@ -33,6 +32,7 @@
 import org.eclipse.etrice.core.fsm.fSM.SubStateTrPointTerminal;
 import org.eclipse.etrice.core.fsm.fSM.TrPointTerminal;
 import org.eclipse.etrice.core.fsm.fSM.Transition;
+import org.eclipse.etrice.core.fsm.fSM.TransitionChainStartTransition;
 import org.eclipse.etrice.core.fsm.fSM.TransitionTerminal;
 import org.eclipse.etrice.core.fsm.fSM.TriggeredTransition;
 import org.eclipse.etrice.ui.behavior.fsm.dialogs.IFSMDialogFactory;
@@ -446,15 +446,55 @@
 					trans = t;
 				}
 				else {
-					NonInitialTransition t = mc.getCommType()==ComponentCommunicationType.DATA_DRIVEN?
-						((orig instanceof GuardedTransition)?
-							(GuardedTransition)orig : FSMFactory.eINSTANCE.createGuardedTransition()
-						)
-						:
-						((orig instanceof TriggeredTransition)?
-							(TriggeredTransition)orig : FSMFactory.eINSTANCE.createTriggeredTransition()
-						)
-						;
+					TransitionChainStartTransition t = null;
+					switch(mc.getCommType()){
+						case EVENT_DRIVEN:
+							if(orig instanceof TriggeredTransition)
+								t = (TransitionChainStartTransition) orig;
+							else
+								t = FSMFactory.eINSTANCE.createTriggeredTransition();
+							break;
+						case DATA_DRIVEN:
+							if(orig instanceof GuardedTransition)
+								t = (TransitionChainStartTransition) orig;
+							else
+								t = FSMFactory.eINSTANCE.createGuardedTransition();
+							break;
+						case ASYNCHRONOUS:
+							if(orig instanceof TriggeredTransition || orig instanceof GuardedTransition )
+								t = (TransitionChainStartTransition) orig;
+							else {
+								// let user choose between triggered and guarded transition
+					        	Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+					        	MessageDialog dlg = new MessageDialog(
+					        			shell,
+					        			"Create new transition",
+										null, 	// accept the default window icon
+					        			"Select the kind of transition",
+										MessageDialog.QUESTION,
+										new String[] {
+					        				"triggered",
+					        				"guarded"
+					        			},
+										0		// default button index
+									);
+					        	
+					        	switch (dlg.open()) {	// open returns index of pressed button
+									case 0:
+										t = FSMFactory.eINSTANCE.createTriggeredTransition();
+										break;
+									case 1:
+										t = FSMFactory.eINSTANCE.createGuardedTransition();
+										break;
+					        	}
+							}
+						break;
+						case SYNCHRONOUS:
+							break;
+						default:
+							break;
+					}
+					
 					t.setFrom(src);
 					t.setTo(dst);
 					trans = t;
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java
index b1c2ed2..91a6886 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java
+++ b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java
@@ -177,14 +177,15 @@
 		FSMHelpers fsmHelpers = SupportUtil.getInstance().getFSMHelpers();
 
 		if (trans instanceof GuardedTransition) {
+			GuardedTransition guardedTrans = (GuardedTransition) trans;
 			if (inherited) {
-				String code = fsmHelpers.getDetailCode(((GuardedTransition) trans).getGuard());
+				String code = fsmHelpers.getDetailCode(guardedTrans.getGuard());
 				createFixedText(body, "&Guard:", code, true);
 			}
 			else {
 				GuardValidator gv = new GuardValidator("guard must not be empty");
 
-				createActionCodeEditor(body, "&Guard:", trans.getAction(),
+				createActionCodeEditor(body, "&Guard:", guardedTrans.getGuard(),
 						trans,
 						FSMPackage.eINSTANCE.getGuardedTransition_Guard(), gv,
 						s2m_not_null, m2s_null_empty, true, true, true,