Browse Source

Added features for RuntimeService, TimerService and Callbacks in iterfaces.
Update of existing examples and genmodels.

markus.muehlbrandt@itemis.de 13 years ago
parent
commit
4281344316
40 changed files with 580 additions and 444 deletions
  1. 68 0
      TestScenarios/GenModelJava.sgen
  2. 115 115
      TestScenarios/TestModels/Test_Expression.sct
  3. 4 1
      examples/org.yakindu.sct.generator.java.trafficlight/GenModelJava.sgen
  4. 5 5
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/Event.java
  5. 1 1
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/EventNotification.java
  6. 2 2
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/ITimedStatemachine.java
  7. 1 1
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/ITimerHandler.java
  8. 60 0
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/RuntimeService.java
  9. 2 2
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/TimeEvent.java
  10. 1 1
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/TimerHandler.java
  11. 1 0
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/trafficlightwaiting/DefaultInterface.java
  12. 119 119
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/trafficlightwaiting/TrafficLightWaitingCycleBasedStatemachine.java
  13. 8 35
      examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/trafficlightwaiting/TrafficLightWaitingEventBasedStatemachine.java
  14. 4 10
      examples/org.yakindu.sct.generator.java.trafficlight/src/org/yakindu/sct/examples/java/trafficlight/CrossingDemoCycleBased.java
  15. 11 9
      examples/org.yakindu.sct.generator.java.trafficlight/src/org/yakindu/sct/examples/java/trafficlight/CrossingDemoEventBased.java
  16. 4 1
      plugins/org.yakindu.sct.generator.java/library/FeatureTypeLibrary.xmi
  17. 8 2
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/IJavaFeatureConstants.java
  18. 13 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureConstants.java
  19. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomCycleBasedStatemachine.xpt
  20. 1 4
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomEventBasedStatemachine.xpt
  21. 5 7
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomInterface.xpt
  22. 10 7
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomInterfaceImpl.xpt
  23. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Event.xpt
  24. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/EventNotification.xpt
  25. 0 2
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Expression.ext
  26. 108 0
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/GenmodelEntries.ext
  27. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/INotificationListener.xpt
  28. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/INotificationSender.xpt
  29. 2 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/IStatemachine.xpt
  30. 2 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ITimedStatemachine.xpt
  31. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ITimerService.xpt
  32. 7 5
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Main.xpt
  33. 5 69
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Naming.ext
  34. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Notification.xpt
  35. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/NotificationSender.xpt
  36. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/NotificationType.xpt
  37. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/RuntimeService.xpt
  38. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/TimeEvent.xpt
  39. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/TimerService.xpt
  40. 1 3
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ValuedEvent.xpt

+ 68 - 0
TestScenarios/GenModelJava.sgen

@@ -5,6 +5,13 @@ GeneratorModel for yakindu::java {
 			targetFolder = "src-gen"
 		}
 		
+		feature GeneralFeatures{
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = true
+			TimerService = true
+			RuntimeService = true
+		}
+		
 		feature licenseHeader {
 			licenseText = "/**
  * Copyright (c) 2011 committers of YAKINDU and others.
@@ -23,6 +30,14 @@ GeneratorModel for yakindu::java {
 			targetProject = "org.yakindu.sct.generator.java.runtime.test"
 			targetFolder = "src-gen"
 		}
+		
+		feature GeneralFeatures{
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = true
+			TimerService = true
+			RuntimeService = true
+		}
+		
 		feature licenseHeader {
 			licenseText = "/**
  * Copyright (c) 2011 committers of YAKINDU and others.
@@ -36,11 +51,20 @@ GeneratorModel for yakindu::java {
  */"
 		}
 	}
+	
 	statechart Test_Expression {
 		feature Outlet {
 			targetProject = "org.yakindu.sct.generator.java.runtime.test"
 			targetFolder = "src-gen"
 		}
+		
+		feature GeneralFeatures{
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = true
+			TimerService = true
+			RuntimeService = true
+		}
+		
 		feature licenseHeader {
 			licenseText = "/**
  * Copyright (c) 2011 committers of YAKINDU and others.
@@ -54,11 +78,20 @@ GeneratorModel for yakindu::java {
  */"
 		}
 	}
+	
 	statechart Test_Hierarchy {
 		feature Outlet {
 			targetProject = "org.yakindu.sct.generator.java.runtime.test"
 			targetFolder = "src-gen"
 		}
+		
+		feature GeneralFeatures{
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = true
+			TimerService = true
+			RuntimeService = true
+		}
+		
 		feature licenseHeader {
 			licenseText = "/**
  * Copyright (c) 2011 committers of YAKINDU and others.
@@ -72,12 +105,20 @@ GeneratorModel for yakindu::java {
  */"
 		}
 	}
+	
 	statechart Test_LocalActions {
 		feature Outlet {
 			targetProject = "org.yakindu.sct.generator.java.runtime.test"
 			targetFolder = "src-gen"
 		}
 		
+		feature GeneralFeatures{
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = true
+			TimerService = true
+			RuntimeService = true
+		}
+		
 		feature licenseHeader {
 			licenseText = "/**
  * Copyright (c) 2011 committers of YAKINDU and others.
@@ -91,11 +132,20 @@ GeneratorModel for yakindu::java {
  */"
 		}
 	}
+	
 	statechart Test_ParallelRegions {
 		feature Outlet {
 			targetProject = "org.yakindu.sct.generator.java.runtime.test"
 			targetFolder = "src-gen"
 		}
+		
+		feature GeneralFeatures{
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = true
+			TimerService = true
+			RuntimeService = true
+		}
+		
 		feature licenseHeader {
 			licenseText = "/**
  * Copyright (c) 2011 committers of YAKINDU and others.
@@ -109,11 +159,20 @@ GeneratorModel for yakindu::java {
  */"
 		}
 	}
+	
 	statechart Test_ShallowHistory {
 		feature Outlet {
 			targetProject = "org.yakindu.sct.generator.java.runtime.test"
 			targetFolder = "src-gen"
 		}
+		
+		feature GeneralFeatures{
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = true
+			TimerService = true
+			RuntimeService = true
+		}
+		
 		feature licenseHeader {
 			licenseText = "/**
  * Copyright (c) 2011 committers of YAKINDU and others.
@@ -127,11 +186,20 @@ GeneratorModel for yakindu::java {
  */"
 		}
 	}
+	
 	statechart Test_Transition {
 		feature Outlet {
 			targetProject = "org.yakindu.sct.generator.java.runtime.test"
 			targetFolder = "src-gen"
 		}
+		
+		feature GeneralFeatures{
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = true
+			TimerService = true
+			RuntimeService = true
+		}	
+		
 		feature licenseHeader {
 			licenseText = "/**
  * Copyright (c) 2011 committers of YAKINDU and others.

+ 115 - 115
TestScenarios/TestModels/Test_Expression.sct

@@ -1,115 +1,115 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sgraph="http://www.yakindu.org/sct/sgraph/2.0.0">
-  <sgraph:Statechart xmi:id="_wXk3MAuIEeGVgpgRVT1uXw" name="Test_Expression" specification="interface:&#xA;in event event1 : integer&#xA;out event event2 : real&#xA;var var1 : integer = 6&#xA;var var2 : integer = 123&#xA;var var3 : real = 19.4&#xA;var var4 : real = 43.3&#xA;var var5 : boolean = false&#xA;&#xA;interface other:&#xA;var var1 : boolean&#xA;var var2 : real&#xA;var var3 : integer&#xA;&#xA;&#xA;">
-    <regions xmi:id="_wXmFUguIEeGVgpgRVT1uXw" name="main region">
-      <vertices xsi:type="sgraph:Entry" xmi:id="_wXpIoQuIEeGVgpgRVT1uXw">
-        <outgoingTransitions xmi:id="_wXrk4wuIEeGVgpgRVT1uXw" target="_wXqWwAuIEeGVgpgRVT1uXw"/>
-      </vertices>
-      <vertices xsi:type="sgraph:State" xmi:id="_wXqWwAuIEeGVgpgRVT1uXw" specification="entry / var3 += var2 * var3;&#xA;exit / var2 = 1;&#xA;exit / var4 = 22.3;" name="state1" incomingTransitions="_wXrk4wuIEeGVgpgRVT1uXw _foN2kAuLEeGVgpgRVT1uXw">
-        <outgoingTransitions xmi:id="_ep-FoAuLEeGVgpgRVT1uXw" specification="event1[ (other.var1 == true ) || (var5 == false) ] / other.var1 = false;" target="_dUv_IAuLEeGVgpgRVT1uXw"/>
-      </vertices>
-      <vertices xsi:type="sgraph:State" xmi:id="_dUv_IAuLEeGVgpgRVT1uXw" specification="entry / var3 /= 5;&#xA;entry / var1 += 1;&#xA;oncycle / var1 += 1;" name="state2" incomingTransitions="_ep-FoAuLEeGVgpgRVT1uXw">
-        <outgoingTransitions xmi:id="_foN2kAuLEeGVgpgRVT1uXw" specification="event1[var3 > 0] / var5 = true;" target="_wXqWwAuIEeGVgpgRVT1uXw"/>
-      </vertices>
-    </regions>
-  </sgraph:Statechart>
-  <notation:Diagram xmi:id="_wXmFUAuIEeGVgpgRVT1uXw" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_wXk3MAuIEeGVgpgRVT1uXw" measurementUnit="Pixel">
-    <children xmi:id="_wXnTcAuIEeGVgpgRVT1uXw" type="Region" element="_wXmFUguIEeGVgpgRVT1uXw">
-      <children xsi:type="notation:DecorationNode" xmi:id="_wXohkAuIEeGVgpgRVT1uXw" type="RegionName">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_wXohkQuIEeGVgpgRVT1uXw"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_wXohkguIEeGVgpgRVT1uXw"/>
-      </children>
-      <children xsi:type="notation:Shape" xmi:id="_wXohkwuIEeGVgpgRVT1uXw" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
-        <children xmi:id="_wXpIoguIEeGVgpgRVT1uXw" type="Entry" element="_wXpIoQuIEeGVgpgRVT1uXw">
-          <children xmi:id="_wXpvsAuIEeGVgpgRVT1uXw" type="BorderItemLabelContainer">
-            <children xsi:type="notation:DecorationNode" xmi:id="_wXpvswuIEeGVgpgRVT1uXw" type="BorderItemLabel">
-              <styles xsi:type="notation:ShapeStyle" xmi:id="_wXpvtAuIEeGVgpgRVT1uXw"/>
-              <layoutConstraint xsi:type="notation:Location" xmi:id="_wXpvtQuIEeGVgpgRVT1uXw"/>
-            </children>
-            <styles xsi:type="notation:ShapeStyle" xmi:id="_wXpvsQuIEeGVgpgRVT1uXw" fontName="Verdana" lineColor="4210752"/>
-            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXpvsguIEeGVgpgRVT1uXw"/>
-          </children>
-          <styles xsi:type="notation:ShapeStyle" xmi:id="_wXpIowuIEeGVgpgRVT1uXw" fontName="Verdana" lineColor="4210752"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXpvtguIEeGVgpgRVT1uXw" x="213" y="-1"/>
-        </children>
-        <children xmi:id="_wXqWwguIEeGVgpgRVT1uXw" type="State" element="_wXqWwAuIEeGVgpgRVT1uXw">
-          <children xsi:type="notation:DecorationNode" xmi:id="_wXq90AuIEeGVgpgRVT1uXw" type="StateName">
-            <styles xsi:type="notation:ShapeStyle" xmi:id="_wXq90QuIEeGVgpgRVT1uXw"/>
-            <layoutConstraint xsi:type="notation:Location" xmi:id="_wXq90guIEeGVgpgRVT1uXw"/>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_wXq90wuIEeGVgpgRVT1uXw" type="StateTextCompartment">
-            <children xsi:type="notation:Shape" xmi:id="_wXq91AuIEeGVgpgRVT1uXw" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXq91QuIEeGVgpgRVT1uXw"/>
-            </children>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_wXrk4AuIEeGVgpgRVT1uXw" type="StateFigureCompartment" collapsed="true"/>
-          <styles xsi:type="notation:ShapeStyle" xmi:id="_wXqWwwuIEeGVgpgRVT1uXw" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-          <styles xsi:type="notation:FontStyle" xmi:id="_wXqWxAuIEeGVgpgRVT1uXw"/>
-          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_wXrk4QuIEeGVgpgRVT1uXw"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXrk4guIEeGVgpgRVT1uXw" x="121" y="49"/>
-        </children>
-        <children xmi:id="_dU-ooAuLEeGVgpgRVT1uXw" type="State" element="_dUv_IAuLEeGVgpgRVT1uXw">
-          <children xsi:type="notation:DecorationNode" xmi:id="_dU_PsAuLEeGVgpgRVT1uXw" type="StateName">
-            <styles xsi:type="notation:ShapeStyle" xmi:id="_dU_PsQuLEeGVgpgRVT1uXw"/>
-            <layoutConstraint xsi:type="notation:Location" xmi:id="_dU_PsguLEeGVgpgRVT1uXw"/>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_dU_PswuLEeGVgpgRVT1uXw" type="StateTextCompartment">
-            <children xsi:type="notation:Shape" xmi:id="_dU_PtAuLEeGVgpgRVT1uXw" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_dU_PtQuLEeGVgpgRVT1uXw"/>
-            </children>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_dU_PtguLEeGVgpgRVT1uXw" type="StateFigureCompartment"/>
-          <styles xsi:type="notation:ShapeStyle" xmi:id="_dU-ooQuLEeGVgpgRVT1uXw" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-          <styles xsi:type="notation:FontStyle" xmi:id="_dU-ooguLEeGVgpgRVT1uXw"/>
-          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_dU_2wAuLEeGVgpgRVT1uXw"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_dU-oowuLEeGVgpgRVT1uXw" x="147" y="209"/>
-        </children>
-        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXohlAuIEeGVgpgRVT1uXw"/>
-      </children>
-      <styles xsi:type="notation:ShapeStyle" xmi:id="_wXnTcQuIEeGVgpgRVT1uXw" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
-      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXpIoAuIEeGVgpgRVT1uXw" x="220" y="5" width="706" height="405"/>
-    </children>
-    <children xsi:type="notation:Shape" xmi:id="_wXtaEwuIEeGVgpgRVT1uXw" type="StatechartText" fontName="Verdana" lineColor="4210752">
-      <children xsi:type="notation:DecorationNode" xmi:id="_wXuBIAuIEeGVgpgRVT1uXw" type="StatechartName">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_wXuBIQuIEeGVgpgRVT1uXw"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_wXuBIguIEeGVgpgRVT1uXw"/>
-      </children>
-      <children xsi:type="notation:Shape" xmi:id="_wXuBIwuIEeGVgpgRVT1uXw" type="StatechartTextExpression" fontName="Verdana" lineColor="4210752">
-        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXuBJAuIEeGVgpgRVT1uXw"/>
-      </children>
-      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXuBJQuIEeGVgpgRVT1uXw" x="10" y="10" width="200" height="400"/>
-    </children>
-    <styles xsi:type="notation:DiagramStyle" xmi:id="_wXmFUQuIEeGVgpgRVT1uXw"/>
-    <edges xmi:id="_wXszAAuIEeGVgpgRVT1uXw" type="Transition" element="_wXrk4wuIEeGVgpgRVT1uXw" source="_wXpIoguIEeGVgpgRVT1uXw" target="_wXqWwguIEeGVgpgRVT1uXw">
-      <children xsi:type="notation:DecorationNode" xmi:id="_wXtaEAuIEeGVgpgRVT1uXw" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_wXtaEQuIEeGVgpgRVT1uXw"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_wXtaEguIEeGVgpgRVT1uXw" y="40"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_wXszAQuIEeGVgpgRVT1uXw" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_wXszAwuIEeGVgpgRVT1uXw" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_wXszAguIEeGVgpgRVT1uXw" points="[7, 3, -136, -63]$[47, 22, -96, -44]"/>
-    </edges>
-    <edges xmi:id="_eqGogAuLEeGVgpgRVT1uXw" type="Transition" element="_ep-FoAuLEeGVgpgRVT1uXw" source="_wXqWwguIEeGVgpgRVT1uXw" target="_dU-ooAuLEeGVgpgRVT1uXw">
-      <children xsi:type="notation:DecorationNode" xmi:id="_eqHPkAuLEeGVgpgRVT1uXw" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_eqHPkQuLEeGVgpgRVT1uXw"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_eqHPkguLEeGVgpgRVT1uXw" x="7" y="-244"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_eqGogQuLEeGVgpgRVT1uXw" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_eqGogwuLEeGVgpgRVT1uXw" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_eqGogguLEeGVgpgRVT1uXw" points="[3, 32, -13, -123]$[5, 160, -11, 5]"/>
-      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_-CuLgBQuEeGt3dzsSIW24Q" id="(0.5477386934673367,0.9662921348314607)"/>
-      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_erE44AuLEeGVgpgRVT1uXw" id="(0.6216216216216216,0.19101123595505617)"/>
-    </edges>
-    <edges xmi:id="_foWZcAuLEeGVgpgRVT1uXw" type="Transition" element="_foN2kAuLEeGVgpgRVT1uXw" source="_dU-ooAuLEeGVgpgRVT1uXw" target="_wXqWwguIEeGVgpgRVT1uXw">
-      <children xsi:type="notation:DecorationNode" xmi:id="_foXAgAuLEeGVgpgRVT1uXw" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_foXAgQuLEeGVgpgRVT1uXw"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_foXAgguLEeGVgpgRVT1uXw" y="-106"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_foWZcQuLEeGVgpgRVT1uXw" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_foWZcwuLEeGVgpgRVT1uXw" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_foWZcguLEeGVgpgRVT1uXw" points="[-20, -39, 53, 108]$[-72, -144, 1, 3]"/>
-      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="__1U0QAusEeGwaYhzcwLTXw" id="(0.4594594594594595,0.07865168539325842)"/>
-      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_fpTbsAuLEeGVgpgRVT1uXw" id="(0.4371859296482412,0.9438202247191011)"/>
-    </edges>
-  </notation:Diagram>
-</xmi:XMI>
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sgraph="http://www.yakindu.org/sct/sgraph/2.0.0">
+  <sgraph:Statechart xmi:id="_wXk3MAuIEeGVgpgRVT1uXw" name="Test_Expression" specification="interface:&#xA;in event event1 : integer&#xA;out event event2 : real&#xA;in event event3&#xA;var var1 : integer = 6&#xA;var var2 : integer = 123&#xA;var var3 : real = 19.4&#xA;var var4 : real = 43.3&#xA;var var5 : boolean = false&#xA;&#xA;interface other:&#xA;var var1 : boolean&#xA;var var2 : real&#xA;var var3 : integer&#xA;&#xA;&#xA;">
+    <regions xmi:id="_wXmFUguIEeGVgpgRVT1uXw" name="main region">
+      <vertices xsi:type="sgraph:Entry" xmi:id="_wXpIoQuIEeGVgpgRVT1uXw">
+        <outgoingTransitions xmi:id="_wXrk4wuIEeGVgpgRVT1uXw" target="_wXqWwAuIEeGVgpgRVT1uXw"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_wXqWwAuIEeGVgpgRVT1uXw" specification="entry / var3 += var2 * var3;&#xA;exit / var2 = 1;&#xA;exit / var4 = 22.3;" name="state1" incomingTransitions="_wXrk4wuIEeGVgpgRVT1uXw _foN2kAuLEeGVgpgRVT1uXw">
+        <outgoingTransitions xmi:id="_ep-FoAuLEeGVgpgRVT1uXw" specification="event1[ (other.var1 == true ) || (var5 == false) ] / other.var1 = false;" target="_dUv_IAuLEeGVgpgRVT1uXw"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_dUv_IAuLEeGVgpgRVT1uXw" specification="entry / var3 /= 5;&#xA;entry / var1 += 1;&#xA;oncycle / var1 += 1;" name="state2" incomingTransitions="_ep-FoAuLEeGVgpgRVT1uXw">
+        <outgoingTransitions xmi:id="_foN2kAuLEeGVgpgRVT1uXw" specification="event1[var3 > 0] / var5 = true;" target="_wXqWwAuIEeGVgpgRVT1uXw"/>
+      </vertices>
+    </regions>
+  </sgraph:Statechart>
+  <notation:Diagram xmi:id="_wXmFUAuIEeGVgpgRVT1uXw" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_wXk3MAuIEeGVgpgRVT1uXw" measurementUnit="Pixel">
+    <children xmi:id="_wXnTcAuIEeGVgpgRVT1uXw" type="Region" element="_wXmFUguIEeGVgpgRVT1uXw">
+      <children xsi:type="notation:DecorationNode" xmi:id="_wXohkAuIEeGVgpgRVT1uXw" type="RegionName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_wXohkQuIEeGVgpgRVT1uXw"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_wXohkguIEeGVgpgRVT1uXw"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_wXohkwuIEeGVgpgRVT1uXw" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+        <children xmi:id="_wXpIoguIEeGVgpgRVT1uXw" type="Entry" element="_wXpIoQuIEeGVgpgRVT1uXw">
+          <children xmi:id="_wXpvsAuIEeGVgpgRVT1uXw" type="BorderItemLabelContainer">
+            <children xsi:type="notation:DecorationNode" xmi:id="_wXpvswuIEeGVgpgRVT1uXw" type="BorderItemLabel">
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_wXpvtAuIEeGVgpgRVT1uXw"/>
+              <layoutConstraint xsi:type="notation:Location" xmi:id="_wXpvtQuIEeGVgpgRVT1uXw"/>
+            </children>
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_wXpvsQuIEeGVgpgRVT1uXw" fontName="Verdana" lineColor="4210752"/>
+            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXpvsguIEeGVgpgRVT1uXw"/>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_wXpIowuIEeGVgpgRVT1uXw" fontName="Verdana" lineColor="4210752"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXpvtguIEeGVgpgRVT1uXw" x="213" y="-1"/>
+        </children>
+        <children xmi:id="_wXqWwguIEeGVgpgRVT1uXw" type="State" element="_wXqWwAuIEeGVgpgRVT1uXw">
+          <children xsi:type="notation:DecorationNode" xmi:id="_wXq90AuIEeGVgpgRVT1uXw" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_wXq90QuIEeGVgpgRVT1uXw"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_wXq90guIEeGVgpgRVT1uXw"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_wXq90wuIEeGVgpgRVT1uXw" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_wXq91AuIEeGVgpgRVT1uXw" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXq91QuIEeGVgpgRVT1uXw"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_wXrk4AuIEeGVgpgRVT1uXw" type="StateFigureCompartment" collapsed="true"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_wXqWwwuIEeGVgpgRVT1uXw" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_wXqWxAuIEeGVgpgRVT1uXw"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_wXrk4QuIEeGVgpgRVT1uXw"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXrk4guIEeGVgpgRVT1uXw" x="121" y="49"/>
+        </children>
+        <children xmi:id="_dU-ooAuLEeGVgpgRVT1uXw" type="State" element="_dUv_IAuLEeGVgpgRVT1uXw">
+          <children xsi:type="notation:DecorationNode" xmi:id="_dU_PsAuLEeGVgpgRVT1uXw" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_dU_PsQuLEeGVgpgRVT1uXw"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_dU_PsguLEeGVgpgRVT1uXw"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_dU_PswuLEeGVgpgRVT1uXw" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_dU_PtAuLEeGVgpgRVT1uXw" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_dU_PtQuLEeGVgpgRVT1uXw"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_dU_PtguLEeGVgpgRVT1uXw" type="StateFigureCompartment"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_dU-ooQuLEeGVgpgRVT1uXw" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_dU-ooguLEeGVgpgRVT1uXw"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_dU_2wAuLEeGVgpgRVT1uXw"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_dU-oowuLEeGVgpgRVT1uXw" x="147" y="209"/>
+        </children>
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXohlAuIEeGVgpgRVT1uXw"/>
+      </children>
+      <styles xsi:type="notation:ShapeStyle" xmi:id="_wXnTcQuIEeGVgpgRVT1uXw" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXpIoAuIEeGVgpgRVT1uXw" x="220" y="5" width="706" height="405"/>
+    </children>
+    <children xsi:type="notation:Shape" xmi:id="_wXtaEwuIEeGVgpgRVT1uXw" type="StatechartText" fontName="Verdana" lineColor="4210752">
+      <children xsi:type="notation:DecorationNode" xmi:id="_wXuBIAuIEeGVgpgRVT1uXw" type="StatechartName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_wXuBIQuIEeGVgpgRVT1uXw"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_wXuBIguIEeGVgpgRVT1uXw"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_wXuBIwuIEeGVgpgRVT1uXw" type="StatechartTextExpression" fontName="Verdana" lineColor="4210752">
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXuBJAuIEeGVgpgRVT1uXw"/>
+      </children>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wXuBJQuIEeGVgpgRVT1uXw" x="10" y="10" width="200" height="400"/>
+    </children>
+    <styles xsi:type="notation:DiagramStyle" xmi:id="_wXmFUQuIEeGVgpgRVT1uXw"/>
+    <edges xmi:id="_wXszAAuIEeGVgpgRVT1uXw" type="Transition" element="_wXrk4wuIEeGVgpgRVT1uXw" source="_wXpIoguIEeGVgpgRVT1uXw" target="_wXqWwguIEeGVgpgRVT1uXw">
+      <children xsi:type="notation:DecorationNode" xmi:id="_wXtaEAuIEeGVgpgRVT1uXw" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_wXtaEQuIEeGVgpgRVT1uXw"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_wXtaEguIEeGVgpgRVT1uXw" y="40"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_wXszAQuIEeGVgpgRVT1uXw" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_wXszAwuIEeGVgpgRVT1uXw" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_wXszAguIEeGVgpgRVT1uXw" points="[7, 3, -136, -63]$[47, 22, -96, -44]"/>
+    </edges>
+    <edges xmi:id="_eqGogAuLEeGVgpgRVT1uXw" type="Transition" element="_ep-FoAuLEeGVgpgRVT1uXw" source="_wXqWwguIEeGVgpgRVT1uXw" target="_dU-ooAuLEeGVgpgRVT1uXw">
+      <children xsi:type="notation:DecorationNode" xmi:id="_eqHPkAuLEeGVgpgRVT1uXw" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_eqHPkQuLEeGVgpgRVT1uXw"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_eqHPkguLEeGVgpgRVT1uXw" x="7" y="-244"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_eqGogQuLEeGVgpgRVT1uXw" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_eqGogwuLEeGVgpgRVT1uXw" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_eqGogguLEeGVgpgRVT1uXw" points="[3, 32, -13, -123]$[5, 160, -11, 5]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_-CuLgBQuEeGt3dzsSIW24Q" id="(0.5477386934673367,0.9662921348314607)"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_erE44AuLEeGVgpgRVT1uXw" id="(0.6216216216216216,0.19101123595505617)"/>
+    </edges>
+    <edges xmi:id="_foWZcAuLEeGVgpgRVT1uXw" type="Transition" element="_foN2kAuLEeGVgpgRVT1uXw" source="_dU-ooAuLEeGVgpgRVT1uXw" target="_wXqWwguIEeGVgpgRVT1uXw">
+      <children xsi:type="notation:DecorationNode" xmi:id="_foXAgAuLEeGVgpgRVT1uXw" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_foXAgQuLEeGVgpgRVT1uXw"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_foXAgguLEeGVgpgRVT1uXw" y="-106"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_foWZcQuLEeGVgpgRVT1uXw" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_foWZcwuLEeGVgpgRVT1uXw" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_foWZcguLEeGVgpgRVT1uXw" points="[-20, -39, 53, 108]$[-72, -144, 1, 3]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="__1U0QAusEeGwaYhzcwLTXw" id="(0.4594594594594595,0.07865168539325842)"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_fpTbsAuLEeGVgpgRVT1uXw" id="(0.4371859296482412,0.9438202247191011)"/>
+    </edges>
+  </notation:Diagram>
+</xmi:XMI>

+ 4 - 1
examples/org.yakindu.sct.generator.java.trafficlight/GenModelJava.sgen

@@ -20,7 +20,10 @@
 		}
 		
 		feature GeneralFeatures {
-			createEventBasedStatemachine = true
+			EventBasedStatemachine = true
+			InterfaceObserverSupport = false
+			TimerService = true
+			RuntimeService = true
 		}
 
 		//create a dump file of execution model (sexec)

+ 5 - 5
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/Event.java

@@ -12,13 +12,13 @@ package org.yakindu.sct.runtime.java;
 
 public class Event<Type extends Enum<Type>> {
 
-	private Type name;
+	private Type id;
 
-	public Event(Type name) {
-		this.name = name;
+	public Event(Type id) {
+		this.id = id;
 	}
 
-	public Type getName() {
-		return name;
+	public Type getId() {
+		return id;
 	}
 }

+ 1 - 1
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/EventNotification.java

@@ -12,7 +12,7 @@ package org.yakindu.sct.runtime.java;
 
 import org.yakindu.sct.runtime.java.Event;
 
-public class EventNotification extends Notification<Event<?>> {
+public class EventNotification extends Notification<Event<? extends Enum<?>>> {
 
 	public EventNotification(Event<? extends Enum<?>> element) {
 		super(NotificationType.EventNotification, element);

+ 2 - 2
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/ITimedStatemachine.java

@@ -17,7 +17,7 @@ public interface ITimedStatemachine
 			IStatemachine,
 			INotificationListener {
 
-	public void setTimerHandler(ITimerHandler timerHandler);
+	public void setTimerService(ITimerService timerService);
 
-	public ITimerHandler getTimerHandler();
+	public ITimerService getTimerService();
 }

+ 1 - 1
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/ITimerHandler.java

@@ -10,7 +10,7 @@
  */
 package org.yakindu.sct.runtime.java;
 
-public interface ITimerHandler {
+public interface ITimerService {
 
 	public void setTimer(TimeEvent<? extends Enum<?>> event, long time,
 			long cycleStartTime);

+ 60 - 0
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/RuntimeService.java

@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are 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:
+ *     committers of YAKINDU - initial API and implementation
+ */
+package org.yakindu.sct.runtime.java;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+public class RuntimeService {
+
+	private Timer timer = new Timer();
+
+	private Set<IStatemachine> statemachineSet = new HashSet<IStatemachine>();
+
+	private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+
+	private TimerTask timerTask = new TimerTask() {
+
+		@Override
+		public void run() {
+			lock.readLock().lock();
+			for (IStatemachine statemachine : statemachineSet) {
+				statemachine.runCycle();
+			}
+			lock.readLock().unlock();
+		}
+	};
+
+	public RuntimeService(long cyclePeriod) {
+		timer.scheduleAtFixedRate(timerTask, 0, cyclePeriod);
+	}
+
+	public boolean addStatemachine(IStatemachine statemachine) {
+		lock.writeLock().lock();
+		boolean ret = statemachineSet.add(statemachine);
+		lock.writeLock().unlock();
+		return ret;
+	}
+
+	public boolean removeStatemachine(IStatemachine statemachine) {
+		lock.writeLock().lock();
+		boolean ret = statemachineSet.remove(statemachine);
+		lock.writeLock().unlock();
+		return ret;
+	}
+
+	public void cancel() {
+		timer.cancel();
+	}
+}

+ 2 - 2
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/TimeEvent.java

@@ -18,8 +18,8 @@ public class TimeEvent<EnumType extends Enum<EnumType>>
 
 	private ITimedStatemachine statemachine;
 
-	public TimeEvent(EnumType name, boolean periodic) {
-		super(name, periodic);
+	public TimeEvent(EnumType id, boolean periodic) {
+		super(id, periodic);
 	}
 
 	public void setTime(long time) {

+ 1 - 1
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/TimerHandler.java

@@ -17,7 +17,7 @@ import java.util.TimerTask;
 
 import org.yakindu.sct.runtime.java.EventNotification;
 
-public class TimerHandler implements ITimerHandler {
+public class TimerService implements ITimerService {
 
 	private final Timer timer = new Timer();
 

+ 1 - 0
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/trafficlightwaiting/DefaultInterface.java

@@ -17,6 +17,7 @@ public interface DefaultInterface {
 	}
 
 	public void raiseKeypress1();
+
 	public void raiseKeypress2();
 
 }

+ 119 - 119
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/trafficlightwaiting/TrafficLightWaitingCycleBasedStatemachine.java

@@ -18,7 +18,7 @@ import java.util.Set;
 import org.yakindu.sct.runtime.java.Event;
 import org.yakindu.sct.runtime.java.TimeEvent;
 import org.yakindu.sct.runtime.java.ITimedStatemachine;
-import org.yakindu.sct.runtime.java.ITimerHandler;
+import org.yakindu.sct.runtime.java.ITimerService;
 import org.yakindu.sct.runtime.java.EventNotification;
 import org.yakindu.sct.runtime.java.Notification;
 
@@ -65,7 +65,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 	private final Collection<Event<? extends Enum<?>>> outEvents;
 
-	private ITimerHandler timerHandler;
+	private ITimerService timerService;
 
 	private long cycleStartTime;
 
@@ -104,16 +104,16 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 	}
 
-	public void setTimerHandler(ITimerHandler timerHandler) {
-		this.timerHandler = timerHandler;
+	public void setTimerService(ITimerService timerService) {
+		this.timerService = timerService;
 	}
 
-	public ITimerHandler getTimerHandler() {
-		if (timerHandler == null) {
+	public ITimerService getTimerService() {
+		if (timerService == null) {
 			throw new NullPointerException(
-					"TimerHandler of statemachine \"+TrafficLightWaiting+\" not set!");
+					"TimerService of statemachine \"+TrafficLightWaiting+\" not set!");
 		}
-		return timerHandler;
+		return timerService;
 	}
 
 	public void notify(Notification<?> notification) {
@@ -161,37 +161,37 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 			} else if (activeStates.contains(State.WaitOn)) {
 				activeStates.remove(State.WaitOn);
-				getTimerHandler().resetTimer(WaitOn_time_event_0);
+				getTimerService().resetTimer(WaitOn_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.WaitOff)) {
 				activeStates.remove(State.WaitOff);
-				getTimerHandler().resetTimer(WaitOff_time_event_0);
+				getTimerService().resetTimer(WaitOff_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.StreetAttention)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
 			} else if (activeStates.contains(State.StreetRed)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianGreen)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianRed)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
 			} else if (activeStates.contains(State.StreetPrepare)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 			}
 
@@ -201,7 +201,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			interfacePedestrian.setVarRed(false);
 			interfacePedestrian.setVarGreen(false);
 
-			getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+			getTimerService().setTimer(YellowOn_time_event_0, 500,
 					cycleStartTime);
 			interfaceTrafficLight.setVarYellow(true);
 
@@ -211,10 +211,10 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			if (occuredEvents.contains(defaultInterface.getEventKeypress1())) {
 				activeStates.remove(State.StreetGreen);
 
-				getTimerHandler().setTimer(PedWaiting_time_event_0, (7 * 1000),
+				getTimerService().setTimer(PedWaiting_time_event_0, (7 * 1000),
 						cycleStartTime);
 
-				getTimerHandler().setTimer(WaitOn_time_event_0, 500,
+				getTimerService().setTimer(WaitOn_time_event_0, 500,
 						cycleStartTime);
 				interfacePedestrian.setVarRequest(true);
 
@@ -233,37 +233,37 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 			} else if (activeStates.contains(State.WaitOn)) {
 				activeStates.remove(State.WaitOn);
-				getTimerHandler().resetTimer(WaitOn_time_event_0);
+				getTimerService().resetTimer(WaitOn_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.WaitOff)) {
 				activeStates.remove(State.WaitOff);
-				getTimerHandler().resetTimer(WaitOff_time_event_0);
+				getTimerService().resetTimer(WaitOff_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.StreetAttention)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
 			} else if (activeStates.contains(State.StreetRed)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianGreen)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianRed)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
 			} else if (activeStates.contains(State.StreetPrepare)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 			}
 
@@ -273,7 +273,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			interfacePedestrian.setVarRed(false);
 			interfacePedestrian.setVarGreen(false);
 
-			getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+			getTimerService().setTimer(YellowOn_time_event_0, 500,
 					cycleStartTime);
 			interfaceTrafficLight.setVarYellow(true);
 
@@ -283,17 +283,17 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			if (occuredEvents.contains(PedWaiting_time_event_0)) {
 				if (activeStates.contains(State.WaitOn)) {
 					activeStates.remove(State.WaitOn);
-					getTimerHandler().resetTimer(WaitOn_time_event_0);
+					getTimerService().resetTimer(WaitOn_time_event_0);
 
 				} else if (activeStates.contains(State.WaitOff)) {
 					activeStates.remove(State.WaitOff);
-					getTimerHandler().resetTimer(WaitOff_time_event_0);
+					getTimerService().resetTimer(WaitOff_time_event_0);
 
 				}
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
-				getTimerHandler().setTimer(StreetAttention_time_event_0,
+				getTimerService().setTimer(StreetAttention_time_event_0,
 						(2 * 1000), cycleStartTime);
 				interfaceTrafficLight.setVarRed(false);
 				interfaceTrafficLight.setVarYellow(true);
@@ -304,9 +304,9 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			} else {
 				if (occuredEvents.contains(WaitOn_time_event_0)) {
 					activeStates.remove(State.WaitOn);
-					getTimerHandler().resetTimer(WaitOn_time_event_0);
+					getTimerService().resetTimer(WaitOn_time_event_0);
 
-					getTimerHandler().setTimer(WaitOff_time_event_0, 500,
+					getTimerService().setTimer(WaitOff_time_event_0, 500,
 							cycleStartTime);
 					interfacePedestrian.setVarRequest(false);
 
@@ -325,37 +325,37 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 			} else if (activeStates.contains(State.WaitOn)) {
 				activeStates.remove(State.WaitOn);
-				getTimerHandler().resetTimer(WaitOn_time_event_0);
+				getTimerService().resetTimer(WaitOn_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.WaitOff)) {
 				activeStates.remove(State.WaitOff);
-				getTimerHandler().resetTimer(WaitOff_time_event_0);
+				getTimerService().resetTimer(WaitOff_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.StreetAttention)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
 			} else if (activeStates.contains(State.StreetRed)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianGreen)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianRed)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
 			} else if (activeStates.contains(State.StreetPrepare)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 			}
 
@@ -365,7 +365,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			interfacePedestrian.setVarRed(false);
 			interfacePedestrian.setVarGreen(false);
 
-			getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+			getTimerService().setTimer(YellowOn_time_event_0, 500,
 					cycleStartTime);
 			interfaceTrafficLight.setVarYellow(true);
 
@@ -375,17 +375,17 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			if (occuredEvents.contains(PedWaiting_time_event_0)) {
 				if (activeStates.contains(State.WaitOn)) {
 					activeStates.remove(State.WaitOn);
-					getTimerHandler().resetTimer(WaitOn_time_event_0);
+					getTimerService().resetTimer(WaitOn_time_event_0);
 
 				} else if (activeStates.contains(State.WaitOff)) {
 					activeStates.remove(State.WaitOff);
-					getTimerHandler().resetTimer(WaitOff_time_event_0);
+					getTimerService().resetTimer(WaitOff_time_event_0);
 
 				}
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
-				getTimerHandler().setTimer(StreetAttention_time_event_0,
+				getTimerService().setTimer(StreetAttention_time_event_0,
 						(2 * 1000), cycleStartTime);
 				interfaceTrafficLight.setVarRed(false);
 				interfaceTrafficLight.setVarYellow(true);
@@ -396,9 +396,9 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			} else {
 				if (occuredEvents.contains(WaitOff_time_event_0)) {
 					activeStates.remove(State.WaitOff);
-					getTimerHandler().resetTimer(WaitOff_time_event_0);
+					getTimerService().resetTimer(WaitOff_time_event_0);
 
-					getTimerHandler().setTimer(WaitOn_time_event_0, 500,
+					getTimerService().setTimer(WaitOn_time_event_0, 500,
 							cycleStartTime);
 					interfacePedestrian.setVarRequest(true);
 
@@ -417,37 +417,37 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 			} else if (activeStates.contains(State.WaitOn)) {
 				activeStates.remove(State.WaitOn);
-				getTimerHandler().resetTimer(WaitOn_time_event_0);
+				getTimerService().resetTimer(WaitOn_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.WaitOff)) {
 				activeStates.remove(State.WaitOff);
-				getTimerHandler().resetTimer(WaitOff_time_event_0);
+				getTimerService().resetTimer(WaitOff_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.StreetAttention)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
 			} else if (activeStates.contains(State.StreetRed)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianGreen)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianRed)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
 			} else if (activeStates.contains(State.StreetPrepare)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 			}
 
@@ -457,7 +457,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			interfacePedestrian.setVarRed(false);
 			interfacePedestrian.setVarGreen(false);
 
-			getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+			getTimerService().setTimer(YellowOn_time_event_0, 500,
 					cycleStartTime);
 			interfaceTrafficLight.setVarYellow(true);
 
@@ -466,9 +466,9 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		} else {
 			if (occuredEvents.contains(StreetAttention_time_event_0)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
-				getTimerHandler().setTimer(StreetRed_time_event_0, (2 * 1000),
+				getTimerService().setTimer(StreetRed_time_event_0, (2 * 1000),
 						cycleStartTime);
 				interfaceTrafficLight.setVarRed(true);
 				interfaceTrafficLight.setVarYellow(false);
@@ -487,37 +487,37 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 			} else if (activeStates.contains(State.WaitOn)) {
 				activeStates.remove(State.WaitOn);
-				getTimerHandler().resetTimer(WaitOn_time_event_0);
+				getTimerService().resetTimer(WaitOn_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.WaitOff)) {
 				activeStates.remove(State.WaitOff);
-				getTimerHandler().resetTimer(WaitOff_time_event_0);
+				getTimerService().resetTimer(WaitOff_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.StreetAttention)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
 			} else if (activeStates.contains(State.StreetRed)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianGreen)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianRed)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
 			} else if (activeStates.contains(State.StreetPrepare)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 			}
 
@@ -527,7 +527,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			interfacePedestrian.setVarRed(false);
 			interfacePedestrian.setVarGreen(false);
 
-			getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+			getTimerService().setTimer(YellowOn_time_event_0, 500,
 					cycleStartTime);
 			interfaceTrafficLight.setVarYellow(true);
 
@@ -536,9 +536,9 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		} else {
 			if (occuredEvents.contains(StreetRed_time_event_0)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
-				getTimerHandler().setTimer(PedestrianGreen_time_event_0,
+				getTimerService().setTimer(PedestrianGreen_time_event_0,
 						(7 * 1000), cycleStartTime);
 				interfacePedestrian.setVarRed(false);
 				interfacePedestrian.setVarGreen(true);
@@ -556,37 +556,37 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 			} else if (activeStates.contains(State.WaitOn)) {
 				activeStates.remove(State.WaitOn);
-				getTimerHandler().resetTimer(WaitOn_time_event_0);
+				getTimerService().resetTimer(WaitOn_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.WaitOff)) {
 				activeStates.remove(State.WaitOff);
-				getTimerHandler().resetTimer(WaitOff_time_event_0);
+				getTimerService().resetTimer(WaitOff_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.StreetAttention)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
 			} else if (activeStates.contains(State.StreetRed)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianGreen)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianRed)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
 			} else if (activeStates.contains(State.StreetPrepare)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 			}
 
@@ -596,7 +596,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			interfacePedestrian.setVarRed(false);
 			interfacePedestrian.setVarGreen(false);
 
-			getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+			getTimerService().setTimer(YellowOn_time_event_0, 500,
 					cycleStartTime);
 			interfaceTrafficLight.setVarYellow(true);
 
@@ -605,9 +605,9 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		} else {
 			if (occuredEvents.contains(PedestrianGreen_time_event_0)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
-				getTimerHandler().setTimer(PedestrianRed_time_event_0,
+				getTimerService().setTimer(PedestrianRed_time_event_0,
 						(5 * 1000), cycleStartTime);
 				interfacePedestrian.setVarRed(true);
 				interfacePedestrian.setVarGreen(false);
@@ -625,37 +625,37 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 			} else if (activeStates.contains(State.WaitOn)) {
 				activeStates.remove(State.WaitOn);
-				getTimerHandler().resetTimer(WaitOn_time_event_0);
+				getTimerService().resetTimer(WaitOn_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.WaitOff)) {
 				activeStates.remove(State.WaitOff);
-				getTimerHandler().resetTimer(WaitOff_time_event_0);
+				getTimerService().resetTimer(WaitOff_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.StreetAttention)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
 			} else if (activeStates.contains(State.StreetRed)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianGreen)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianRed)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
 			} else if (activeStates.contains(State.StreetPrepare)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 			}
 
@@ -665,7 +665,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			interfacePedestrian.setVarRed(false);
 			interfacePedestrian.setVarGreen(false);
 
-			getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+			getTimerService().setTimer(YellowOn_time_event_0, 500,
 					cycleStartTime);
 			interfaceTrafficLight.setVarYellow(true);
 
@@ -674,9 +674,9 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		} else {
 			if (occuredEvents.contains(PedestrianRed_time_event_0)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
-				getTimerHandler().setTimer(StreetPrepare_time_event_0,
+				getTimerService().setTimer(StreetPrepare_time_event_0,
 						(2 * 1000), cycleStartTime);
 				interfaceTrafficLight.setVarRed(true);
 				interfaceTrafficLight.setVarYellow(true);
@@ -695,37 +695,37 @@ public class TrafficLightWaitingCycleBasedStatemachine
 
 			} else if (activeStates.contains(State.WaitOn)) {
 				activeStates.remove(State.WaitOn);
-				getTimerHandler().resetTimer(WaitOn_time_event_0);
+				getTimerService().resetTimer(WaitOn_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.WaitOff)) {
 				activeStates.remove(State.WaitOff);
-				getTimerHandler().resetTimer(WaitOff_time_event_0);
+				getTimerService().resetTimer(WaitOff_time_event_0);
 
-				getTimerHandler().resetTimer(PedWaiting_time_event_0);
+				getTimerService().resetTimer(PedWaiting_time_event_0);
 				interfacePedestrian.setVarRequest(false);
 
 			} else if (activeStates.contains(State.StreetAttention)) {
 				activeStates.remove(State.StreetAttention);
-				getTimerHandler().resetTimer(StreetAttention_time_event_0);
+				getTimerService().resetTimer(StreetAttention_time_event_0);
 
 			} else if (activeStates.contains(State.StreetRed)) {
 				activeStates.remove(State.StreetRed);
-				getTimerHandler().resetTimer(StreetRed_time_event_0);
+				getTimerService().resetTimer(StreetRed_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianGreen)) {
 				activeStates.remove(State.PedestrianGreen);
-				getTimerHandler().resetTimer(PedestrianGreen_time_event_0);
+				getTimerService().resetTimer(PedestrianGreen_time_event_0);
 
 			} else if (activeStates.contains(State.PedestrianRed)) {
 				activeStates.remove(State.PedestrianRed);
-				getTimerHandler().resetTimer(PedestrianRed_time_event_0);
+				getTimerService().resetTimer(PedestrianRed_time_event_0);
 
 			} else if (activeStates.contains(State.StreetPrepare)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 			}
 
@@ -735,7 +735,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 			interfacePedestrian.setVarRed(false);
 			interfacePedestrian.setVarGreen(false);
 
-			getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+			getTimerService().setTimer(YellowOn_time_event_0, 500,
 					cycleStartTime);
 			interfaceTrafficLight.setVarYellow(true);
 
@@ -744,7 +744,7 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		} else {
 			if (occuredEvents.contains(StreetPrepare_time_event_0)) {
 				activeStates.remove(State.StreetPrepare);
-				getTimerHandler().resetTimer(StreetPrepare_time_event_0);
+				getTimerService().resetTimer(StreetPrepare_time_event_0);
 
 				interfaceTrafficLight.setVarRed(false);
 				interfaceTrafficLight.setVarYellow(false);
@@ -765,11 +765,11 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		if (occuredEvents.contains(defaultInterface.getEventKeypress2())) {
 			if (activeStates.contains(State.YellowOn)) {
 				activeStates.remove(State.YellowOn);
-				getTimerHandler().resetTimer(YellowOn_time_event_0);
+				getTimerService().resetTimer(YellowOn_time_event_0);
 
 			} else if (activeStates.contains(State.YellowOff)) {
 				activeStates.remove(State.YellowOff);
-				getTimerHandler().resetTimer(YellowOff_time_event_0);
+				getTimerService().resetTimer(YellowOff_time_event_0);
 
 			}
 
@@ -785,9 +785,9 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		} else {
 			if (occuredEvents.contains(YellowOn_time_event_0)) {
 				activeStates.remove(State.YellowOn);
-				getTimerHandler().resetTimer(YellowOn_time_event_0);
+				getTimerService().resetTimer(YellowOn_time_event_0);
 
-				getTimerHandler().setTimer(YellowOff_time_event_0, 500,
+				getTimerService().setTimer(YellowOff_time_event_0, 500,
 						cycleStartTime);
 				interfaceTrafficLight.setVarYellow(false);
 
@@ -801,11 +801,11 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		if (occuredEvents.contains(defaultInterface.getEventKeypress2())) {
 			if (activeStates.contains(State.YellowOn)) {
 				activeStates.remove(State.YellowOn);
-				getTimerHandler().resetTimer(YellowOn_time_event_0);
+				getTimerService().resetTimer(YellowOn_time_event_0);
 
 			} else if (activeStates.contains(State.YellowOff)) {
 				activeStates.remove(State.YellowOff);
-				getTimerHandler().resetTimer(YellowOff_time_event_0);
+				getTimerService().resetTimer(YellowOff_time_event_0);
 
 			}
 
@@ -821,9 +821,9 @@ public class TrafficLightWaitingCycleBasedStatemachine
 		} else {
 			if (occuredEvents.contains(YellowOff_time_event_0)) {
 				activeStates.remove(State.YellowOff);
-				getTimerHandler().resetTimer(YellowOff_time_event_0);
+				getTimerService().resetTimer(YellowOff_time_event_0);
 
-				getTimerHandler().setTimer(YellowOn_time_event_0, 500,
+				getTimerService().setTimer(YellowOn_time_event_0, 500,
 						cycleStartTime);
 				interfaceTrafficLight.setVarYellow(true);
 

+ 8 - 35
examples/org.yakindu.sct.generator.java.trafficlight/src-gen/org/yakindu/sct/runtime/java/trafficlightwaiting/TrafficLightWaitingEventBasedStatemachine.java

@@ -20,13 +20,8 @@ public class TrafficLightWaitingEventBasedStatemachine
 
 	private LinkedList<Event<? extends Enum<?>>> eventQueue;
 
-	private Thread runtimeThread;
-
-	private long cyclePeriod;
-
-	public TrafficLightWaitingEventBasedStatemachine(long cyclePeriod) {
+	public TrafficLightWaitingEventBasedStatemachine() {
 		eventQueue = new LinkedList<Event<? extends Enum<?>>>();
-		this.cyclePeriod = cyclePeriod;
 	}
 
 	@Override
@@ -39,34 +34,12 @@ public class TrafficLightWaitingEventBasedStatemachine
 		return !eventQueue.isEmpty();
 	}
 
-	public void start() {
-		runtimeThread = new Thread() {
-			@Override
-			public void run() {
-				long startTime;
-				while (!isInterrupted()) {
-					startTime = System.currentTimeMillis();
-					if (eventOccured()) {
-						Event<? extends Enum<?>> event = getOccuredEvents()
-								.poll();
-						TrafficLightWaitingEventBasedStatemachine.super
-								.getOccuredEvents().add(event);
-						runCycle();
-					}
-					try {
-						Thread.sleep(cyclePeriod - System.currentTimeMillis()
-								+ startTime);
-					} catch (InterruptedException e) {
-						interrupt();
-					}
-				}
-			}
-		};
-		runtimeThread.start();
-	}
-
-	public boolean stop() {
-		runtimeThread.interrupt();
-		return runtimeThread.isAlive();
+	@Override
+	public void runCycle() {
+		if (eventOccured()) {
+			Event<? extends Enum<?>> event = getOccuredEvents().poll();
+			super.getOccuredEvents().add(event);
+			super.runCycle();
+		}
 	}
 }

+ 4 - 10
examples/org.yakindu.sct.generator.java.trafficlight/src/org/yakindu/sct/examples/java/trafficlight/CrossingDemoCycleBased.java

@@ -30,7 +30,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
-import org.yakindu.sct.runtime.java.TimerHandler;
+import org.yakindu.sct.runtime.java.TimerService;
 import org.yakindu.sct.runtime.java.trafficlightwaiting.TrafficLightWaitingCycleBasedStatemachine;
 
 public class CrossingDemoCycleBased {
@@ -63,7 +63,7 @@ public class CrossingDemoCycleBased {
 		crossing.getLayoutManager().setConstraint(pl,
 				new Rectangle(50, 10, 70, 20));
 		
-		statemachine.setTimerHandler(new TimerHandler());
+		statemachine.setTimerService(new TimerService());
 
 		Thread thread = new Thread() {
 			@Override
@@ -73,23 +73,18 @@ public class CrossingDemoCycleBased {
 				// Generator is used in this case. You can add your own
 				// implementation of a TimerHandler. It has to implement the
 				// ITimerHandler interface.
-				statemachine.setTimerHandler(new TimerHandler());
+				statemachine.setTimerService(new TimerService());
 				statemachine.enter();
 				while (!isInterrupted()) {
 					statemachine.runCycle();
 					try {
 						Thread.sleep(100);
 					} catch (InterruptedException e) {
-						// if Thread is interrupted from outside while sleeping
-						// the interrupt flag resets. Thread.sleep() reacts on
-						// interrupt() calls too. Therefore interrupt has to be
-						// called again to set the flag again and end the top
-						// while loop.
 						interrupt();
 					}
 				}
 				// End TimerHandler and timing thread.
-				statemachine.getTimerHandler().cancel();
+				statemachine.getTimerService().cancel();
 			}
 		};
 		thread.start();
@@ -149,7 +144,6 @@ public class CrossingDemoCycleBased {
 				public void handleEvent(
 						final org.eclipse.swt.widgets.Event event) {
 
-					// Shorter call for code commented out below
 					try {
 						Class<?> interfaceClass = statemachine
 								.getDefaultInterface().getClass();

+ 11 - 9
examples/org.yakindu.sct.generator.java.trafficlight/src/org/yakindu/sct/examples/java/trafficlight/CrossingDemoEventBased.java

@@ -12,6 +12,8 @@ package org.yakindu.sct.examples.java.trafficlight;
 
 /**
  * Example to show how to integrate the generated statemachine code into existing projects.
+ * It uses the event based statemachine approach and the generated RuntimeService to execute it.
+ * To refresh the view the generated observer support of the statemachine's interfaces is used.
  * 
  * @author a.nyssen - initial API and implementation
  * @author m.muehlbrandt - adaptions to new statemachine code.
@@ -30,7 +32,8 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
-import org.yakindu.sct.runtime.java.TimerHandler;
+import org.yakindu.sct.runtime.java.RuntimeService;
+import org.yakindu.sct.runtime.java.TimerService;
 import org.yakindu.sct.runtime.java.trafficlightwaiting.TrafficLightWaitingCycleBasedStatemachine;
 import org.yakindu.sct.runtime.java.trafficlightwaiting.TrafficLightWaitingEventBasedStatemachine;
 
@@ -38,7 +41,7 @@ public class CrossingDemoEventBased {
 
 	public static void main(String[] args) {
 
-		final TrafficLightWaitingEventBasedStatemachine statemachine = new TrafficLightWaitingEventBasedStatemachine(100);
+		final TrafficLightWaitingEventBasedStatemachine statemachine = new TrafficLightWaitingEventBasedStatemachine();
 
 		// create display and shell
 		Display display = Display.getDefault();
@@ -63,10 +66,11 @@ public class CrossingDemoEventBased {
 		crossing.add(pl);
 		crossing.getLayoutManager().setConstraint(pl,
 				new Rectangle(50, 10, 70, 20));
-		
-		statemachine.setTimerHandler(new TimerHandler());
+
+		statemachine.setTimerService(new TimerService());
 		statemachine.enter();
-		statemachine.start();
+		RuntimeService runtimeService = new RuntimeService(100);
+		runtimeService.addStatemachine(statemachine);
 
 		shell.open();
 		while (!shell.isDisposed()) {
@@ -85,9 +89,8 @@ public class CrossingDemoEventBased {
 				display.sleep();
 			}
 		}
-		
-		statemachine.stop();
-		statemachine.getTimerHandler().cancel();
+		runtimeService.cancel();
+		statemachine.getTimerService().cancel();
 	}
 
 	private static LightweightSystem createLightweightsystem(Shell shell) {
@@ -126,7 +129,6 @@ public class CrossingDemoEventBased {
 				public void handleEvent(
 						final org.eclipse.swt.widgets.Event event) {
 
-					// Shorter call for code commented out below
 					try {
 						Class<?> interfaceClass = statemachine
 								.getDefaultInterface().getClass();

+ 4 - 1
plugins/org.yakindu.sct.generator.java/library/FeatureTypeLibrary.xmi

@@ -5,6 +5,9 @@
     <parameters name="implementationSuffix" optional="true"/>
   </types>
   <types name="GeneralFeatures" optional="true">
-    <parameters name="createEventBasedStatemachine" parameterType="BOOLEAN"/>
+    <parameters name="EventBasedStatemachine" optional="true" parameterType="BOOLEAN"/>
+    <parameters name="InterfaceObserverSupport" optional="true" parameterType="BOOLEAN"/>
+    <parameters name="RuntimeService" optional="true" parameterType="BOOLEAN"/>
+    <parameters name="TimerService" optional="true" parameterType="BOOLEAN"/>
   </types>
 </sgen:FeatureTypeLibrary>

+ 8 - 2
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/IJavaFeatureConstants.java

@@ -25,10 +25,16 @@ public interface IJavaFeatureConstants {
 
 	public static final String IMPLEMENTATION_SUFFIX = "implementationSuffix";
 	
-	public static final String CREATE_EVENTBASEDSTATEMACHINE = "createEventBasedStatemachine";
-	
 	public static final String GENERAL_FEATURES = "GeneralFeatures";
 	
+	public static final String CREATE_EVENTBASEDSTATEMACHINE = "EventBasedStatemachine";
+	
+	public static final String RUNTIME_SERVICE = "RuntimeService";
+	
+	public static final String TIMER_SERVICE = "TimerService";
+	
+	public static final String INTERFACE_OBSERVER_SUPPORT = "InterfaceObserverSupport";
+	
 	public static final String[] JAVA_KEYWORDS = { "abstract", "assert",
 		"boolean", "break", "byte", "case", "catch", "char", "class",
 		"const", "continue", "default", "do", "double", "else", "enum",

+ 13 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureConstants.java

@@ -46,10 +46,22 @@ public final class JavaFeatureConstants implements IJavaFeatureConstants {
 		return GENERAL_FEATURES;
 	}
 	
-	public static final String getCreateEventBasedStatemachine() {
+	public static final String getEventBasedStatemachine() {
 		return CREATE_EVENTBASEDSTATEMACHINE;
 	}
 	
+	public static final String getRuntimeService() {
+		return RUNTIME_SERVICE;
+	}
+	
+	public static final String getTimerService() {
+		return TIMER_SERVICE;
+	}
+	
+	public static final String getInterfaceObserverSupport() {
+		return INTERFACE_OBSERVER_SUPPORT;
+	}
+	
 	public static final String getValidStatemachineName(String name) {
 		//remove whitespaces;
 		String newName = name.replace(" ", "").toLowerCase();

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomCycleBasedStatemachine.xpt

@@ -10,12 +10,10 @@ Contributors:
 
 «IMPORT sexec»
 «IMPORT stext»
-«IMPORT sgraph»
-«IMPORT ecore»
-«IMPORT org::yakindu::sct::generator::java::templates»
 
 «EXTENSION org::yakindu::sct::generator::java::templates::ExecutionModelExtensions»
 «EXTENSION org::yakindu::sct::generator::java::templates::Expression»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 «EXTENSION org::yakindu::sct::generator::java::templates::Naming»
 
 «DEFINE ActionCode FOR Step-»

+ 1 - 4
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomEventBasedStatemachine.xpt

@@ -8,11 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
-«IMPORT ecore»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Expression»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 «EXTENSION org::yakindu::sct::generator::java::templates::Naming»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow»

+ 5 - 7
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomInterface.xpt

@@ -7,14 +7,12 @@ http://www.eclipse.org/legal/epl-v10.html
 Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
-
-«IMPORT sexec»
 «IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
-«EXTENSION org::yakindu::sct::generator::java::templates::Expression»
 «EXTENSION org::yakindu::sct::generator::java::templates::ExecutionModelExtensions»
+«EXTENSION org::yakindu::sct::generator::java::templates::Expression»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
+«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR InterfaceScope-»
 «FILE getImplementationPackagePath(entry)+"/"+getInterfaceName() + '.java'-»
@@ -24,7 +22,7 @@ package 
 «IF hasOutgoingVoidEvents()-»
 import «entry.getBasePackageName()».Event;
 «ENDIF-»
-«IF hasOutgoingEvents()-»
+«IF hasOutgoingEvents() && entry.createInterfaceObserverSupport()
 import «entry.getBasePackageName()».INotificationSender;
 «ENDIF-»
 «IF hasOutgoingValuedEvents()-»
@@ -32,7 +30,7 @@ import 
 «ENDIF-»
 
 
-public interface «getInterfaceName()»«getInterfaceExtension()» {
+public interface «getInterfaceName()»«getInterfaceExtension(entry)» {
 	
 	«IF declarations.typeSelect(EventDefinition).size > 0-»
 	public enum Events {

+ 10 - 7
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomInterfaceImpl.xpt

@@ -7,13 +7,12 @@ http://www.eclipse.org/legal/epl-v10.html
 Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
-«IMPORT sexec»
 «IMPORT stext»
-«IMPORT sgraph»
 
 «EXTENSION org::yakindu::sct::generator::java::templates::ExecutionModelExtensions»
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
 «EXTENSION org::yakindu::sct::generator::java::templates::Expression»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
+«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR InterfaceScope»
 «FILE getImplementationPackagePath(entry)+"/"+getInterfaceImplName() + '.java'-»
@@ -23,7 +22,7 @@ package 
 «IF hasEvents()-»
 import «entry.getBasePackageName()».Event;
 «ENDIF-»
-«IF hasOutgoingEvents()-»
+«IF hasOutgoingEvents() && entry.createInterfaceObserverSupport()
 import «entry.getBasePackageName()».EventNotification;
 import «entry.getBasePackageName()».NotificationSender;
 «ENDIF-»
@@ -31,7 +30,7 @@ import 
 import «entry.getBasePackageName()».ValuedEvent;
 «ENDIF-»
 
-public class «getInterfaceImplName()»«getInterfaceImplExtension()» implements «getInterfaceName()» {
+public class «getInterfaceImplName()»«getInterfaceImplExtension(entry)» implements «getInterfaceName()» {
 	
 	«FOREACH declarations.typeSelect(EventDefinition) AS event-»
 	private final «event.getEventType()» «event.getName()» = new «event.getEventType()»(«event.getCreationSignature()»); 
@@ -51,7 +50,9 @@ public class 
 		statemachine.getOccuredEvents().add(«event.getName()»);
 		«IF event.direction ==  Direction::OUT-»
 		statemachine.getOutEvents().add(«event.getName()»);
-		notifyListeners(new EventNotification(«event.getName()»));
+		«IF entry.createInterfaceObserverSupport()-»
+			notifyListeners(new EventNotification(«event.getName()»));
+		«ENDIF-»
 		«ENDIF-»
 	}
 	«ELSE»
@@ -59,7 +60,9 @@ public class 
 		statemachine.getOccuredEvents().add(«event.getName()»);
 		«IF event.direction ==  Direction::OUT-»
 		statemachine.getOutEvents().add(«event.getName()»);
-		notifyListeners(new EventNotification(«event.getName()»));
+		«IF entry.createInterfaceObserverSupport()-»
+			notifyListeners(new EventNotification(«event.getName()»));
+		«ENDIF-»
 		«ENDIF-»
 	}
 	«ENDIF-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Event.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/EventNotification.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»

+ 0 - 2
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Expression.ext

@@ -5,13 +5,11 @@
   which accompanies this distribution, and is available at
   http://www.eclipse.org/legal/epl-v10.html
   Contributors:
-  	committers of YAKINDU - initial API and implementation  
   	Joern Seger - Initial contribution and API
   	Markus Muehlbrandt - Java adaptions
  */
 import stext;
 import sexec;
-import ecore;
 import sgraph;
 
 extension org::yakindu::sct::generator::java::templates::Naming;

+ 108 - 0
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/GenmodelEntries.ext

@@ -0,0 +1,108 @@
+/*
+  Copyright (c) 2011 committers of YAKINDU and others.
+  All rights reserved. This program and the accompanying materials
+  are 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:  
+  	Markus Muehlbrandt - Initial contribution and API
+ */
+import sgen;
+import sexec;
+import stext;
+
+extension org::yakindu::sct::generator::java::templates::Naming;
+
+String getNamingFeature() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getNamingFeature();
+ 
+String getBasePackage() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getBasePackage();
+ 
+String getImplementationSuffix() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getImplementationSuffix();
+ 
+String getLicenseFeature() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getLicenseHeader();
+ 
+String getLicenseText() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getLicenseText();
+ 
+String getGeneralFeature() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getGeneralFeature();
+ 
+String getEventBasedStatemachine() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getEventBasedStatemachine();
+ 
+String getRuntimeService() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getRuntimeService();
+ 
+String getTimerService() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getTimerService();
+ 
+String getInterfaceObserverSupport() :
+ JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getInterfaceObserverSupport();
+		
+String getBasePackageName(GeneratorEntry entry):
+	if entry.getFeatureConfiguration(getNamingFeature())!=null 
+		&& entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getBasePackage())!=null then
+		entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getBasePackage()).getStringValue()
+	else
+		"org.yakindu.sct.runtime.java";
+
+String getBasePackagePath(GeneratorEntry entry):
+	entry.getBasePackageName().replaceAll("\\.","/");
+	
+String getImplementationSuffix(GeneratorEntry entry, ExecutionFlow flow):
+	if entry.getFeatureConfiguration(getNamingFeature())!=null
+		&& entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getImplementationSuffix()) != null then
+		flow.getStatemachineName()+entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getImplementationSuffix()).getStringValue()
+	else 
+		flow.getStatemachineName();
+
+String getImplementationPackagePath(ExecutionFlow this, GeneratorEntry entry):
+	entry.getBasePackagePath()+"/"+entry.getImplementationSuffix(this).toLowerCase();
+
+String getImplementationPackagePath(InterfaceScope this, GeneratorEntry entry):
+	((ExecutionFlow)eContainer).getImplementationPackagePath(entry);
+
+String getImplementationPackageName(ExecutionFlow this, GeneratorEntry entry):
+	entry.getBasePackageName()+"."+entry.getImplementationSuffix(this).toLowerCase();
+
+String getImplementationPackageName(InterfaceScope this, GeneratorEntry entry):
+	((ExecutionFlow)eContainer).getImplementationPackageName(entry);
+	
+String getLicenseHeader(GeneratorEntry entry) :
+	if entry.getFeatureConfiguration(getLicenseFeature())!=null
+		&& entry.getFeatureConfiguration(getLicenseFeature()).getParameterValue(getLicenseText()) != null then
+		entry.getFeatureConfiguration(getLicenseFeature()).getParameterValue(getLicenseText()).getStringValue()
+	else 
+		null;
+
+boolean createEventBasedStatemachine(GeneratorEntry entry) :
+	if entry.getFeatureConfiguration(getGeneralFeature())!=null
+		&& entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getEventBasedStatemachine()) != null then
+		entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getEventBasedStatemachine()).getBooleanValue()
+	else
+		false;
+		
+boolean createRuntimeService(GeneratorEntry entry) :
+	if entry.getFeatureConfiguration(getGeneralFeature())!=null
+		&& entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getRuntimeService()) != null then
+		entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getRuntimeService()).getBooleanValue()
+	else
+		false;
+		
+boolean createTimerService(GeneratorEntry entry) :
+	if entry.getFeatureConfiguration(getGeneralFeature())!=null
+		&& entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getTimerService()) != null then
+		entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getTimerService()).getBooleanValue()
+	else
+		false;
+		
+boolean createInterfaceObserverSupport(GeneratorEntry entry) :
+	if entry.getFeatureConfiguration(getGeneralFeature())!=null
+		&& entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getInterfaceObserverSupport()) != null then
+		entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getInterfaceObserverSupport()).getBooleanValue()
+	else
+		false;

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/INotificationListener.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/INotificationSender.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»

+ 2 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/IStatemachine.xpt

@@ -9,9 +9,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/IStatemachine.java'-»

+ 2 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ITimedStatemachine.xpt

@@ -8,9 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/ITimedStatemachine.java'-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ITimerService.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/ITimerService.java'-»

+ 7 - 5
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Main.xpt

@@ -10,11 +10,9 @@ Contributors:
 
 «IMPORT sexec»
 «IMPORT stext»
-«IMPORT sgraph»
 «IMPORT sgen»
 
-«IMPORT org::yakindu::sct::generator::java::templates»
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE main(sgen::GeneratorEntry entry) FOR ExecutionFlow»
 	
@@ -25,9 +23,13 @@ Contributors:
 	
 	«EXPAND ITimerService::file(entry) FOR this»
 	
-	«EXPAND TimerService::file(entry) FOR this»
+	«IF entry.createTimerService()»
+		«EXPAND TimerService::file(entry) FOR this»
+	«ENDIF»
 	
-	«EXPAND RuntimeService::file(entry) FOR this»
+	«IF entry.createRuntimeService()»
+		«EXPAND RuntimeService::file(entry) FOR this»
+	«ENDIF»
 	
 	«EXPAND Event::file(entry) FOR this»
 	

+ 5 - 69
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Naming.ext

@@ -10,12 +10,12 @@
  */
 import stext;
 import sexec;
-import ecore;
 import sgraph;
 import sgen;
 
 extension org::yakindu::sct::generator::java::templates::Expression;
 extension org::yakindu::sct::generator::java::templates::ExecutionModelExtensions;
+extension org::yakindu::sct::generator::java::templates::GenmodelEntries;
 
 String getStatemachineName(String name) :
 	JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getValidStatemachineName(java.lang.String);
@@ -129,81 +129,17 @@ String getContext(Event this) :
 	else 
 		"";
 	
-String getInterfaceExtension(Scope this):
-	if (hasOutgoingEvents()) then
+String getInterfaceExtension(Scope this, GeneratorEntry entry):
+	if (hasOutgoingEvents() && entry.createInterfaceObserverSupport()) then
 		" extends INotificationSender"
 	else
 		null;
 		
-String getInterfaceImplExtension(Scope this):
-	if (hasOutgoingEvents()) then
+String getInterfaceImplExtension(Scope this, GeneratorEntry entry):
+	if (hasOutgoingEvents() && entry.createInterfaceObserverSupport()) then
 		" extends NotificationSender"
 	else
 		null;
-
-String getNamingFeature() :
- JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getNamingFeature();
- 
-String getBasePackage() :
- JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getBasePackage();
- 
-String getImplementationSuffix() :
- JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getImplementationSuffix();
- 
-String getLicenseFeature() :
- JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getLicenseHeader();
- 
-String getLicenseText() :
- JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getLicenseText();
- 
-String getGeneralFeature() :
- JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getGeneralFeature();
- 
-String getCreateEventBasedStatemachine() :
- JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getCreateEventBasedStatemachine();
-		
-String getBasePackageName(GeneratorEntry entry):
-	if entry.getFeatureConfiguration(getNamingFeature())!=null 
-		&& entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getBasePackage())!=null then
-		entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getBasePackage()).getStringValue()
-	else
-		"org.yakindu.sct.runtime.java";
-
-String getBasePackagePath(GeneratorEntry entry):
-	entry.getBasePackageName().replaceAll("\\.","/");
-	
-String getImplementationSuffix(GeneratorEntry entry, ExecutionFlow flow):
-	if entry.getFeatureConfiguration(getNamingFeature())!=null
-		&& entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getImplementationSuffix()) != null then
-		flow.getStatemachineName()+entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getImplementationSuffix()).getStringValue()
-	else 
-		flow.getStatemachineName();
-
-String getImplementationPackagePath(ExecutionFlow this, GeneratorEntry entry):
-	entry.getBasePackagePath()+"/"+entry.getImplementationSuffix(this).toLowerCase();
-
-String getImplementationPackagePath(InterfaceScope this, GeneratorEntry entry):
-	((ExecutionFlow)eContainer).getImplementationPackagePath(entry);
-
-String getImplementationPackageName(ExecutionFlow this, GeneratorEntry entry):
-	entry.getBasePackageName()+"."+entry.getImplementationSuffix(this).toLowerCase();
-
-String getImplementationPackageName(InterfaceScope this, GeneratorEntry entry):
-	((ExecutionFlow)eContainer).getImplementationPackageName(entry);
-	
-String getLicenseHeader(GeneratorEntry entry) :
-	if entry.getFeatureConfiguration(getLicenseFeature())!=null
-		&& entry.getFeatureConfiguration(getLicenseFeature()).getParameterValue(getLicenseText()) != null then
-		entry.getFeatureConfiguration(getLicenseFeature()).getParameterValue(getLicenseText()).getStringValue()
-	else 
-		null;
-
-boolean createEventBasedStatemachine(GeneratorEntry entry) :
-	if entry.getFeatureConfiguration(getGeneralFeature())!=null
-		&& entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getCreateEventBasedStatemachine()) != null then
-		entry.getFeatureConfiguration(getGeneralFeature()).getParameterValue(getCreateEventBasedStatemachine()).getBooleanValue()
-	else
-		false;
 	
 String getComment(Step this) :
 	if comment!=null then

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Notification.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/NotificationSender.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/NotificationType.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/RuntimeService.xpt

@@ -9,10 +9,8 @@ Contributors:
 «ENDREM»
 
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/RuntimeService.java'-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/TimeEvent.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/TimerService.xpt

@@ -9,10 +9,8 @@ Contributors:
 «ENDREM»
 
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «FILE entry.getBasePackagePath()+'/TimerService.java'-»

+ 1 - 3
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/ValuedEvent.xpt

@@ -8,10 +8,8 @@ Contributors:
 	Markus Muehlbrandt - Initial contribution and API
 «ENDREM»
 «IMPORT sexec»
-«IMPORT stext»
-«IMPORT sgraph»
 
-«EXTENSION org::yakindu::sct::generator::java::templates::Naming»
+«EXTENSION org::yakindu::sct::generator::java::templates::GenmodelEntries»
 
 «DEFINE file(sgen::GeneratorEntry entry) FOR ExecutionFlow-»
 «IF name != null-»