浏览代码

Refactoring of TimerHandler.

markus.muehlbrandt@itemis.de 13 年之前
父节点
当前提交
c1264a38e5

+ 18 - 11
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/CustomBaseStatemachine.xpt

@@ -28,7 +28,7 @@ Contributors:
 «ENDDEFINE»
 
 «DEFINE ActionCode FOR ScheduleTimeEvent-»
-getTimerHandler().setTimer(«timeEvent.getName()», «timeValue.toCode()», «timeEvent.periodic»);
+getTimerHandler().setTimer(«timeEvent.getName()», «timeValue.toCode()»);
 «ENDDEFINE»
 
 «DEFINE ActionCode FOR UnscheduleTimeEvent-»
@@ -89,7 +89,7 @@ else {
 «DEFINE ConditionMethodsImplement FOR ExecutionState-»
 	«FOREACH reactions AS r-»
 		«IF r.check != null -»
-	private bool «r.check.functionName()»(Collection<?> events) {
+	private boolean «r.check.functionName()»(Collection<?> events) {
 		«IF r.check.condition != null-»
 		return «r.check.condition.toCode()»;
 		«ELSE-»
@@ -147,7 +147,7 @@ else {
 «DEFINE file FOR ExecutionFlow-»
 «FILE getBaseStatemachineName()+'.java'-»
 «getLicenseHeader()»
-package org.yakindu.sct.runtime.java.«getStatemachineName()»;
+package org.yakindu.sct.runtime.java.«getStatemachineName().toLowerCase()»;
 
 import java.util.Collection;
 import java.util.EnumSet;
@@ -155,18 +155,25 @@ import java.util.HashSet;
 import java.util.Set;
 
 import org.yakindu.sct.runtime.java.base.Event;
+«IF getTimeEvents().size > 0 -»
+import org.yakindu.sct.runtime.java.base.TimeEvent;
+«ENDIF-»
 import org.yakindu.sct.runtime.java.base.ITimedStatemachine;
 import org.yakindu.sct.runtime.java.base.ITimerHandler;
 import org.yakindu.sct.runtime.java.base.TimerHandler;
 import org.yakindu.sct.runtime.java.base.notification.EventNotification;
 import org.yakindu.sct.runtime.java.base.notification.Notification;
 
-public abstract class «getBaseStatemachineName()» implements ITimedStatemachine<Event> {
+public abstract class «getBaseStatemachineName()» implements ITimedStatemachine {
 	
 	«FOREACH getInternalScopeEvents() AS event-»
 	private static final Event<«event.type.getJavaClassType()»> «event.getName()» = new Event<«event.type.getJavaClassType()»>("«event.name»", «event.getInitialValue()»); 
 	«ENDFOREACH-»
 	
+	«FOREACH getTimeEvents() AS timeEvent-»
+		private static final TimeEvent «timeEvent.getName()» = new TimeEvent("«timeEvent.getName()»", «timeEvent.periodic»); 
+	«ENDFOREACH»
+	
 	public enum State {
 		«FOREACH states AS state-»
 	      «state.getName()»,
@@ -174,7 +181,7 @@ public abstract class 
 	};
 	
 	«FOREACH scopes.typeSelect(InterfaceScope) AS interface-»
-	private «interface.getInterfaceImplName()» «interface.getInterfaceName().toFirstLower()»
+	private «interface.getInterfaceImplName()» «interface.getInterfaceName().toFirstLower()»;
 	«ENDFOREACH-»
 	«REM»internal scope valued events
 	«FOREACH getInternalScopeValuedEvents() AS event-»
@@ -202,11 +209,11 @@ public abstract class 
 		«ENDFOREACH-»
 	}
 	
-	protected Collection<Event> getOccuredEvents() {
+	protected Collection<Event<?>> getOccuredEvents() {
 		return occuredEvents;
 	}
 	
-	protected Collection<Event> getOutEvents(){
+	protected Collection<Event<?>> getOutEvents(){
 		return outEvents;
 	}
 		
@@ -229,7 +236,7 @@ public abstract class 
 	@Override
 	public ITimerHandler getTimerHandler() {
 		if (timerHandler == null) {
-			timerHandler = new TimerHandler<Event>(this);
+			timerHandler = new TimerHandler(this);
 		}
 		return timerHandler;
 	}
@@ -243,20 +250,20 @@ public abstract class 
 	}
 	
 	«FOREACH scopes.typeSelect(InterfaceScope) AS interface-»
-	public «interface.getInterfaceName()» get«interface.getInterfaceName()» {
+	public «interface.getInterfaceName()» get«interface.getInterfaceName()»() {
 		return «interface.getInterfaceName().toFirstLower()»;
 	}
 	
 	«ENDFOREACH-»
 	«FOREACH getInternalScopeEvents() AS event-»
 	private void raise«event.name.toFirstUpper()»() {
-		statemachine.getOccuredEvents().add(«event.getName()»);
+		getOccuredEvents().add(«event.getName()»);
 	}
 	
 	«IF event.type != Type::void-»
 	private void raise«event.name.toFirstUpper()»(«event.type.getJavaType()» value) {
 		«event.getName()».setValue(value);
-		statemachine.getOccuredEvents().add(«event.getName()»);
+		getOccuredEvents().add(«event.getName()»);
 	}
 	
 	private «event.type.getJavaType()» get«event.getValueName().toFirstUpper()»() {

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

@@ -20,7 +20,7 @@ Contributors:
 «DEFINE file FOR ExecutionFlow»
 «FILE getCycleBasedStatemachineName() + '.java'»
 «getLicenseHeader()»
-package org.yakindu.sct.runtime.java.«getStatemachineName()»;
+package org.yakindu.sct.runtime.java.«getStatemachineName().toLowerCase()»;
 
 import java.util.HashSet;
 
@@ -28,7 +28,7 @@ import org.yakindu.sct.runtime.java.base.Event;
 
 public class «getCycleBasedStatemachineName()» extends «getBaseStatemachineName()» {
 
-	public CustomCycleBasedStatemachine() {
+	public «getCycleBasedStatemachineName()»() {
 		super(new HashSet<Event<?>>());
 	}
 

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

@@ -20,7 +20,7 @@ Contributors:
 «DEFINE file FOR ExecutionFlow»
 «FILE getEventBasedStatemachineName()+'.java'-»
 «getLicenseHeader()»
-package org.yakindu.sct.runtime.java.«getStatemachineName()»;
+package org.yakindu.sct.runtime.java.«getStatemachineName().toLowerCase()»;
 
 import java.util.Collections;
 import java.util.LinkedList;
@@ -30,7 +30,7 @@ import org.yakindu.sct.runtime.java.base.Event;
 
 public class «getEventBasedStatemachineName()» extends «getBaseStatemachineName()» {
 
-	public CustomEventBasedStatemachine() {
+	public «getEventBasedStatemachineName()»() {
 		super(new LinkedList<Event<?>>());
 	}
 	

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

@@ -18,7 +18,7 @@ Contributors:
 «DEFINE file FOR InterfaceScope-»
 «FILE getInterfaceName() + '.java'-»
 «getLicenseHeader()»
-package org.yakindu.sct.runtime.java.«getStatemachineName((ExecutionFlow)eContainer)»;
+package org.yakindu.sct.runtime.java.«getStatemachineName((ExecutionFlow)eContainer).toLowerCase()»;
 
 import org.yakindu.sct.runtime.java.base.Event;
 «IF hasOutgoingEvents()-»

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

@@ -19,14 +19,14 @@ Contributors:
 «DEFINE file FOR InterfaceScope»
 «FILE getInterfaceImplName() + '.java'-»
 «getLicenseHeader()»
-package org.yakindu.sct.runtime.java.«getStatemachineName((ExecutionFlow)eContainer)»;
+package org.yakindu.sct.runtime.java.«getStatemachineName((ExecutionFlow)eContainer).toLowerCase()»;
 
 import org.yakindu.sct.runtime.java.base.notification.EventNotification;
 «IF hasOutgoingEvents()-»
 import org.yakindu.sct.runtime.java.base.notification.NotificationSender;
 «ENDIF-»
 
-public abstract class «getInterfaceImplName()»«getInterfaceImplExtension()» implements «getInterfaceName()» {
+public class «getInterfaceImplName()»«getInterfaceImplExtension()» implements «getInterfaceName()» {
 	
 	private «getBaseStatemachineName()» statemachine; 
 	

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

@@ -86,11 +86,11 @@ String toCode(NumericalMultiplyDivideExpression expression) :
 
 String toCode(ElementReferenceExpression exp) :
     if (EventDefinition.isInstance(exp.value)) then
-    	"getOccuredEvents.contains("+((EventDefinition)exp.value).getContext()+((EventDefinition)exp.value).getName()+")"
+    	"getOccuredEvents().contains("+((EventDefinition)exp.value).getContext()+((EventDefinition)exp.value).getName()+")"
     else if (VariableDefinition.isInstance(exp.value)) then
     	getContext((VariableDefinition)exp.value)+"getVar"+exp.value.name.toFirstUpper()+"()"
     else if (TimeEvent.isInstance(exp.value)) then
-    	"getOccuredEvents.contains(Event."+getName((TimeEvent)exp.value)+")";
+    	"getOccuredEvents().contains("+getName((TimeEvent)exp.value)+")";
 
 String getOperator(AdditiveOperator operator) : 
     switch(operator) {
@@ -120,6 +120,6 @@ String getOperator(RelationalOperator operator) :
 	
 String toCode(EventRaising this) :
 	if this.value != null then
-		event.getContext().toFirstLower()+".raise"+event.name.toFirstUpper()+"("+value.toCode()+");"
+		event.getContext().toFirstLower()+"raise"+event.name.toFirstUpper()+"("+value.toCode()+");"
 	else
-		event.getContext().toFirstLower()+".raise"+event.name.toFirstUpper()+"();";
+		event.getContext().toFirstLower()+"raise"+event.name.toFirstUpper()+"();";

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

@@ -22,7 +22,7 @@ package org.yakindu.sct.runtime.java.base;
 
 public interface ITimerHandler {
 	
-	public void setTimer(TimeEvent event);
+	public void setTimer(TimeEvent event, long time);
 	
 	public void resetTimer(TimeEvent event);
 }

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

@@ -21,17 +21,20 @@ Contributors:
 «getLicenseHeader()»
 package org.yakindu.sct.runtime.java.base;
 
-public class TimeEvent extends Event<Long> {
+public class TimeEvent extends Event<Boolean> {
 	
-	private boolean periodic;
+	private long time = -1;
 	
-	public TimeEvent(String name, Long timeValue, boolean periodic) {
-		super(name, timeValue);
-		this.periodic = periodic;
+	public TimeEvent(String name, boolean periodic) {
+		super(name, periodic);
 	}
 	
-	public boolean isPeriodic(){
-		return periodic;
+	public void setTime(long time){
+		this.time = time;
+	}
+	
+	public long getTime(){
+		return time;
 	}
 }
 

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

@@ -40,7 +40,7 @@ public class TimerHandler implements ITimerHandler {
 	}
 
 	@Override
-	public void setTimer(final TimeEvent event) {
+	public void setTimer(final TimeEvent event, long time) {
 		// Reset existing TimerTask for event. This step isn't necessary if
 		// timer tasks are properly reset by sexec model.
 		if (timerTaskMap.containsKey(event)) {
@@ -55,14 +55,16 @@ public class TimerHandler implements ITimerHandler {
 			}
 		});
 		
+		//set time field of event
+		event.setTime(time);
+		
 		//start scheduling the timer.
-		if (event.isPeriodic()) {
-			timer.scheduleAtFixedRate(timerTaskMap.get(event),event.getValue(), event.getValue());
+		if (event.getValue()) {
+			timer.scheduleAtFixedRate(timerTaskMap.get(event), time, time);
 		}
 		else {
-			timer.schedule(timerTaskMap.get(event), event.getValue());
+			timer.schedule(timerTaskMap.get(event), time);
 		}
-
 	}
 
 	@Override