d3scomp$jdeeco
SchedulerEvent event,long delay
void
void scheduleAfter(SchedulerEvent event,long delay)
SchedulerEvent event,long period
void
void scheduleNow(SchedulerEvent event,long period)
d3scomp$jdeeco
TimeTriggerImpl timeTrigger = new TimeTriggerImpl();
		return timeTrigger;
TimeTrigger
TimeTrigger createTimeTrigger()
PeriodicTriggerImpl periodicTrigger = new PeriodicTriggerImpl();
		return periodicTrigger;
PeriodicTrigger
PeriodicTrigger createPeriodicTrigger()
d3scomp$jdeeco
TimeTrigger
TimeTrigger getTimeTrigger()
PeriodicTrigger
PeriodicTrigger getPeriodicTrigger()
d3scomp$jdeeco
TimeTrigger
TimeTrigger getTimeTrigger()
PeriodicTrigger
PeriodicTrigger getPeriodicTrigger()
d3scomp$jdeeco
TimeTrigger
TimeTrigger getTimeTrigger()
PeriodicTrigger
PeriodicTrigger getPeriodicTrigger()
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fmodel%2FRuntimeModel.ecore
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fmodel%2FRuntimeModel.ecore?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/model/RuntimeModel.ecore
  <eClassifiers xsi:type="ecore:EClass" name="TimeTrigger" eSuperTypes="#//Trigger">
        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong" defaultValueLiteral="0"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="offset" lowerBound="1"
        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong" defaultValueLiteral="0"/>
  <eClassifiers xsi:type="ecore:EClass" name="PeriodicTrigger" eSuperTypes="#//Trigger">
        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
@@ -2,9 +2,11 @@
 <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="runtime" nsURI="http://cz.cuni.mff.d3s.deeco.model.runtime/1.0"
     nsPrefix="cz.cuni.mff.d3s.deeco.model.runtime">
-  <eClassifiers xsi:type="ecore:EClass" name="PeriodicTrigger" eSuperTypes="#//Trigger">
+  <eClassifiers xsi:type="ecore:EClass" name="TimeTrigger" eSuperTypes="#//Trigger">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="period" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong" defaultValueLiteral="0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="offset" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong" defaultValueLiteral="0"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Trigger" abstract="true"/>
   <eClassifiers xsi:type="ecore:EClass" name="KnowledgeChangeTrigger" eSuperTypes="#//Trigger">
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fmodel%2FRuntimeModel.ecore
7ebece4fc181ad995b2f427132da1193ebc0f0c6
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fmodel%2FRuntimeModel.ecorediag
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fmodel%2FRuntimeModel.ecorediag?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/model/RuntimeModel.ecorediag
        <element xmi:type="ecore:EAttribute" href="RuntimeModel.ecore#//TimeTrigger/period"/>
      <children xmi:type="notation:Node" xmi:id="_1r-MEI8rEeOwu4UaHkjubw" type="2001">
        <element xmi:type="ecore:EAttribute" href="RuntimeModel.ecore#//TimeTrigger/offset"/>
        <layoutConstraint xmi:type="notation:Location" xmi:id="_1r-MEY8rEeOwu4UaHkjubw"/>
      </children>
    <element xmi:type="ecore:EClass" href="RuntimeModel.ecore#//TimeTrigger"/>
        <element xmi:type="ecore:EAttribute" href="RuntimeModel.ecore#//PeriodicTrigger/period"/>
    <element xmi:type="ecore:EClass" href="RuntimeModel.ecore#//PeriodicTrigger"/>
@@ -4,9 +4,13 @@
     <children xmi:type="notation:Node" xmi:id="_n6RFYzyaEeOBILfoZuXX_w" type="4001"/>
     <children xmi:type="notation:Node" xmi:id="_n6RFZDyaEeOBILfoZuXX_w" type="5001">
       <children xmi:type="notation:Node" xmi:id="_n6RscDyaEeOBILfoZuXX_w" type="2001">
-        <element xmi:type="ecore:EAttribute" href="RuntimeModel.ecore#//PeriodicTrigger/period"/>
+        <element xmi:type="ecore:EAttribute" href="RuntimeModel.ecore#//TimeTrigger/period"/>
         <layoutConstraint xmi:type="notation:Location" xmi:id="_n6RscTyaEeOBILfoZuXX_w"/>
       </children>
+      <children xmi:type="notation:Node" xmi:id="_1r-MEI8rEeOwu4UaHkjubw" type="2001">
+        <element xmi:type="ecore:EAttribute" href="RuntimeModel.ecore#//TimeTrigger/offset"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_1r-MEY8rEeOwu4UaHkjubw"/>
+      </children>
       <styles xmi:type="notation:DrawerStyle" xmi:id="_n6RFZTyaEeOBILfoZuXX_w"/>
       <styles xmi:type="notation:SortingStyle" xmi:id="_n6RFZjyaEeOBILfoZuXX_w"/>
       <styles xmi:type="notation:FilteringStyle" xmi:id="_n6RFZzyaEeOBILfoZuXX_w"/>
@@ -17,7 +21,7 @@
       <styles xmi:type="notation:FilteringStyle" xmi:id="_n6RFazyaEeOBILfoZuXX_w"/>
     </children>
     <styles xmi:type="notation:ShapeStyle" xmi:id="_n6RFYTyaEeOBILfoZuXX_w" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="RuntimeModel.ecore#//PeriodicTrigger"/>
+    <element xmi:type="ecore:EClass" href="RuntimeModel.ecore#//TimeTrigger"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n6RFYjyaEeOBILfoZuXX_w" x="48" y="384"/>
   </children>
   <children xmi:type="notation:Node" xmi:id="_n6XzGTyaEeOBILfoZuXX_w" type="1001">
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fmodel%2FRuntimeModel.ecorediag
3c13cb6852dc48545b1c4b0adbbc9cb8eec6bce9
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2FAnnotationProcessor.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2FAnnotationProcessor.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/annotations/processor/AnnotationProcessor.java
			TimeTrigger periodicEnsembleTrigger = createPeriodicTrigger(clazz);
			TimeTrigger periodicTrigger = createPeriodicTrigger(m);
	TimeTrigger createPeriodicTrigger(Object o)
				TimeTrigger periodicTrigger = factory.createTimeTrigger();
				periodicTrigger.setOffset(0);
			PeriodicTrigger periodicEnsembleTrigger = createPeriodicTrigger(clazz);
			PeriodicTrigger periodicTrigger = createPeriodicTrigger(m);
	PeriodicTrigger createPeriodicTrigger(Object o)
				PeriodicTrigger periodicTrigger = factory.createPeriodicTrigger();
@@ -289,7 +289,7 @@ EnsembleDefinition createEnsembleDefinition(Class<?> clazz) throws AnnotationPro
 			CommunicationBoundaryPredicate cBoundary = createCommunicationBoundary(clazz);			
 			ensembleDefinition.setCommunicationBoundary(cBoundary);
 			
-			PeriodicTrigger periodicEnsembleTrigger = createPeriodicTrigger(clazz);
+			TimeTrigger periodicEnsembleTrigger = createPeriodicTrigger(clazz);
 			List<KnowledgeChangeTrigger> exchangeKChangeTriggers = createKnowledgeChangeTriggers(exchange.getMethod(), false);
 			List<KnowledgeChangeTrigger> conditionKChangeTriggers = createKnowledgeChangeTriggers(condition.getMethod(), false);
 			if (periodicEnsembleTrigger == null) {
@@ -390,7 +390,7 @@ ComponentProcess createComponentProcess(ComponentInstance componentInstance, Met
 			componentProcess.setMethod(m);
 			componentProcess.setName(m.getName());
 			componentProcess.getParameters().addAll(createParameters(m, true));
-			PeriodicTrigger periodicTrigger = createPeriodicTrigger(m);
+			TimeTrigger periodicTrigger = createPeriodicTrigger(m);
 			List<KnowledgeChangeTrigger> knowledgeChangeTriggers = createKnowledgeChangeTriggers(m, true);
 			if (periodicTrigger == null) {
 				if (knowledgeChangeTriggers.isEmpty()) {
@@ -413,7 +413,7 @@ ComponentProcess createComponentProcess(ComponentInstance componentInstance, Met
 	 * If no @{@link PeriodicScheduling} annotation is found, returns <code>null</code>.
 	 * </p>
 	 */
-	PeriodicTrigger createPeriodicTrigger(Object o)
+	TimeTrigger createPeriodicTrigger(Object o)
 			throws AnnotationProcessorException {
 		Annotation[] annotations = null;
 		if (o instanceof Method) {
@@ -426,8 +426,9 @@ else if (o instanceof Class<?>) {
 		}
 		for (Annotation a : annotations) {
 			if (a instanceof PeriodicScheduling) {
-				PeriodicTrigger periodicTrigger = factory.createPeriodicTrigger();
+				TimeTrigger periodicTrigger = factory.createTimeTrigger();
 				periodicTrigger.setPeriod(((PeriodicScheduling) a).value());
+				periodicTrigger.setOffset(0);
 				return periodicTrigger;
 			}
 		}
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2FAnnotationProcessor.java
7ea3427d6c85532c5fd7f9ab95adb03f67fdf0cf
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fcustom%2FRuntimeMetadataFactoryExt.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fcustom%2FRuntimeMetadataFactoryExt.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/custom/RuntimeMetadataFactoryExt.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
	public TimeTrigger createTimeTrigger() {
		return new TimeTriggerExt();
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
	public PeriodicTrigger createPeriodicTrigger() {
		return new PeriodicTriggerExt();
@@ -10,7 +10,7 @@
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeField;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeMapKey;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeMember;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataFactoryImpl;
 
 /**
@@ -35,8 +35,8 @@ public RuntimeMetadataFactoryExt() {
 	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataFactoryImpl#createPeriodicTrigger()
 	 */
 	@Override
-	public PeriodicTrigger createPeriodicTrigger() {
-		return new PeriodicTriggerExt();
+	public TimeTrigger createTimeTrigger() {
+		return new TimeTriggerExt();
 	}
 
 	/* (non-Javadoc)
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fcustom%2FRuntimeMetadataFactoryExt.java
e9bec639f9cb2d8ea82b6bca12b452c5dffcce4f
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fimpl%2FRuntimeMetadataFactoryImpl.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fimpl%2FRuntimeMetadataFactoryImpl.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataFactoryImpl.java
			case RuntimeMetadataPackage.TIME_TRIGGER: return createTimeTrigger();
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public TimeTrigger createTimeTrigger() {
		TimeTriggerImpl timeTrigger = new TimeTriggerImpl();
		return timeTrigger;
	}

jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataFactoryImpl.java
TimeTriggerImpl timeTrigger = new TimeTriggerImpl();
		return timeTrigger;
TimeTrigger createTimeTrigger()
			case RuntimeMetadataPackage.PERIODIC_TRIGGER: return createPeriodicTrigger();
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PeriodicTrigger createPeriodicTrigger() {
		PeriodicTriggerImpl periodicTrigger = new PeriodicTriggerImpl();
		return periodicTrigger;
	}

jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataFactoryImpl.java
PeriodicTriggerImpl periodicTrigger = new PeriodicTriggerImpl();
		return periodicTrigger;
PeriodicTrigger createPeriodicTrigger()
@@ -67,7 +67,7 @@ public RuntimeMetadataFactoryImpl() {
 	@Override
 	public EObject create(EClass eClass) {
 		switch (eClass.getClassifierID()) {
-			case RuntimeMetadataPackage.PERIODIC_TRIGGER: return createPeriodicTrigger();
+			case RuntimeMetadataPackage.TIME_TRIGGER: return createTimeTrigger();
 			case RuntimeMetadataPackage.KNOWLEDGE_CHANGE_TRIGGER: return createKnowledgeChangeTrigger();
 			case RuntimeMetadataPackage.KNOWLEDGE_PATH: return createKnowledgePath();
 			case RuntimeMetadataPackage.PATH_NODE_FIELD: return createPathNodeField();
@@ -136,16 +136,6 @@ public String convertToString(EDataType eDataType, Object instanceValue) {
 		}
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public PeriodicTrigger createPeriodicTrigger() {
-		PeriodicTriggerImpl periodicTrigger = new PeriodicTriggerImpl();
-		return periodicTrigger;
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -316,6 +306,16 @@ public Map.Entry<String, Object> createStringToObjectMap() {
 		return stringToObjectMap;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TimeTrigger createTimeTrigger() {
+		TimeTriggerImpl timeTrigger = new TimeTriggerImpl();
+		return timeTrigger;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fimpl%2FRuntimeMetadataFactoryImpl.java
3e9880b52b304762aaf5348e74d2b585872cac34
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fimpl%2FRuntimeMetadataPackageImpl.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fimpl%2FRuntimeMetadataPackageImpl.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataPackageImpl.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass timeTriggerEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTimeTrigger() {
		return timeTriggerEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTimeTrigger_Period() {
		return (EAttribute)timeTriggerEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTimeTrigger_Offset() {
		return (EAttribute)timeTriggerEClass.getEStructuralFeatures().get(1);
	}

		timeTriggerEClass = createEClass(TIME_TRIGGER);
		createEAttribute(timeTriggerEClass, TIME_TRIGGER__PERIOD);
		createEAttribute(timeTriggerEClass, TIME_TRIGGER__OFFSET);
		timeTriggerEClass.getESuperTypes().add(this.getTrigger());
		initEClass(timeTriggerEClass, TimeTrigger.class, "TimeTrigger", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTimeTrigger_Period(), ecorePackage.getELong(), "period", "0", 1, 1, TimeTrigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getTimeTrigger_Offset(), ecorePackage.getELong(), "offset", "0", 1, 1, TimeTrigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataPackageImpl.java
return timeTriggerEClass;
EClass getTimeTrigger()
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataPackageImpl.java
return (EAttribute)timeTriggerEClass.getEStructuralFeatures().get(0);
EAttribute getTimeTrigger_Period()
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataPackageImpl.java
return (EAttribute)timeTriggerEClass.getEStructuralFeatures().get(1);
EAttribute getTimeTrigger_Offset()
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass periodicTriggerEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getPeriodicTrigger() {
		return periodicTriggerEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getPeriodicTrigger_Period() {
		return (EAttribute)periodicTriggerEClass.getEStructuralFeatures().get(0);
	}

		periodicTriggerEClass = createEClass(PERIODIC_TRIGGER);
		createEAttribute(periodicTriggerEClass, PERIODIC_TRIGGER__PERIOD);
		periodicTriggerEClass.getESuperTypes().add(this.getTrigger());
		initEClass(periodicTriggerEClass, PeriodicTrigger.class, "PeriodicTrigger", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getPeriodicTrigger_Period(), ecorePackage.getELong(), "period", null, 1, 1, PeriodicTrigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataPackageImpl.java
return periodicTriggerEClass;
EClass getPeriodicTrigger()
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/impl/RuntimeMetadataPackageImpl.java
return (EAttribute)periodicTriggerEClass.getEStructuralFeatures().get(0);
EAttribute getPeriodicTrigger_Period()
@@ -22,8 +22,8 @@
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeField;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeMapKey;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeMember;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.RuntimeMetadata;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger;
 
 import cz.cuni.mff.d3s.deeco.model.runtime.meta.RuntimeMetadataFactory;
@@ -49,13 +49,6 @@
  * @generated
  */
 public class RuntimeMetadataPackageImpl extends EPackageImpl implements RuntimeMetadataPackage {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass periodicTriggerEClass = null;
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -189,6 +182,13 @@ public class RuntimeMetadataPackageImpl extends EPackageImpl implements RuntimeM
 	 */
 	private EClass stringToObjectMapEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass timeTriggerEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -285,24 +285,6 @@ public static RuntimeMetadataPackage init() {
 		return theRuntimeMetadataPackage;
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EClass getPeriodicTrigger() {
-		return periodicTriggerEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EAttribute getPeriodicTrigger_Period() {
-		return (EAttribute)periodicTriggerEClass.getEStructuralFeatures().get(0);
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -744,6 +726,33 @@ public EAttribute getStringToObjectMap_Value() {
 		return (EAttribute)stringToObjectMapEClass.getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTimeTrigger() {
+		return timeTriggerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTimeTrigger_Period() {
+		return (EAttribute)timeTriggerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTimeTrigger_Offset() {
+		return (EAttribute)timeTriggerEClass.getEStructuralFeatures().get(1);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -817,8 +826,9 @@ public void createPackageContents() {
 		isCreated = true;
 
 		// Create classes and their features
-		periodicTriggerEClass = createEClass(PERIODIC_TRIGGER);
-		createEAttribute(periodicTriggerEClass, PERIODIC_TRIGGER__PERIOD);
+		timeTriggerEClass = createEClass(TIME_TRIGGER);
+		createEAttribute(timeTriggerEClass, TIME_TRIGGER__PERIOD);
+		createEAttribute(timeTriggerEClass, TIME_TRIGGER__OFFSET);
 
 		triggerEClass = createEClass(TRIGGER);
 
@@ -926,7 +936,7 @@ public void initializePackageContents() {
 		// Set bounds for type parameters
 
 		// Add supertypes to classes
-		periodicTriggerEClass.getESuperTypes().add(this.getTrigger());
+		timeTriggerEClass.getESuperTypes().add(this.getTrigger());
 		knowledgeChangeTriggerEClass.getESuperTypes().add(this.getTrigger());
 		pathNodeFieldEClass.getESuperTypes().add(this.getPathNode());
 		pathNodeMapKeyEClass.getESuperTypes().add(this.getPathNode());
@@ -938,8 +948,9 @@ public void initializePackageContents() {
 		pathNodeComponentIdEClass.getESuperTypes().add(this.getPathNode());
 
 		// Initialize classes, features, and operations; add parameters
-		initEClass(periodicTriggerEClass, PeriodicTrigger.class, "PeriodicTrigger", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getPeriodicTrigger_Period(), ecorePackage.getELong(), "period", null, 1, 1, PeriodicTrigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEClass(timeTriggerEClass, TimeTrigger.class, "TimeTrigger", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getTimeTrigger_Period(), ecorePackage.getELong(), "period", "0", 1, 1, TimeTrigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getTimeTrigger_Offset(), ecorePackage.getELong(), "offset", "0", 1, 1, TimeTrigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(triggerEClass, Trigger.class, "Trigger", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fimpl%2FRuntimeMetadataPackageImpl.java
85c03201fa27bdeaad1245ac16ea069e9608d4e4
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fmeta%2FRuntimeMetadataFactory.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fmeta%2FRuntimeMetadataFactory.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/meta/RuntimeMetadataFactory.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
	/**
	 * Returns a new object of class '<em>Time Trigger</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Time Trigger</em>'.
	 * @generated
	 */
	TimeTrigger createTimeTrigger();

import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
	/**
	 * Returns a new object of class '<em>Periodic Trigger</em>'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return a new object of class '<em>Periodic Trigger</em>'.
	 * @generated
	 */
	PeriodicTrigger createPeriodicTrigger();

@@ -17,9 +17,9 @@
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeField;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeMapKey;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeMember;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.RuntimeMetadata;
 
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import org.eclipse.emf.ecore.EFactory;
 
 /**
@@ -39,15 +39,6 @@ public interface RuntimeMetadataFactory extends EFactory {
 	 */
 	RuntimeMetadataFactory eINSTANCE = cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataFactoryImpl.init();
 
-	/**
-	 * Returns a new object of class '<em>Periodic Trigger</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Periodic Trigger</em>'.
-	 * @generated
-	 */
-	PeriodicTrigger createPeriodicTrigger();
-
 	/**
 	 * Returns a new object of class '<em>Knowledge Change Trigger</em>'.
 	 * <!-- begin-user-doc -->
@@ -192,6 +183,15 @@ public interface RuntimeMetadataFactory extends EFactory {
 	 */
 	PathNodeComponentId createPathNodeComponentId();
 
+	/**
+	 * Returns a new object of class '<em>Time Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Time Trigger</em>'.
+	 * @generated
+	 */
+	TimeTrigger createTimeTrigger();
+
 	/**
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fmeta%2FRuntimeMetadataFactory.java
44c8fa127ac8c306d7d04cd2c507a2be986aa125
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fmeta%2FRuntimeMetadataPackage.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fmeta%2FRuntimeMetadataPackage.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/model/runtime/meta/RuntimeMetadataPackage.java
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgeChangeTriggerImpl <em>Knowledge Change Trigger</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgeChangeTriggerImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getKnowledgeChangeTrigger()
	 * @generated
	 */
	int KNOWLEDGE_CHANGE_TRIGGER = 2;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgePathImpl <em>Knowledge Path</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgePathImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getKnowledgePath()
	 * @generated
	 */
	int KNOWLEDGE_PATH = 3;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeImpl <em>Path Node</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNode()
	 * @generated
	 */
	int PATH_NODE = 4;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeFieldImpl <em>Path Node Field</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeFieldImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeField()
	 * @generated
	 */
	int PATH_NODE_FIELD = 5;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMapKeyImpl <em>Path Node Map Key</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMapKeyImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeMapKey()
	 * @generated
	 */
	int PATH_NODE_MAP_KEY = 6;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataImpl <em>Runtime Metadata</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getRuntimeMetadata()
	 * @generated
	 */
	int RUNTIME_METADATA = 7;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentInstanceImpl <em>Component Instance</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentInstanceImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getComponentInstance()
	 * @generated
	 */
	int COMPONENT_INSTANCE = 8;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleDefinitionImpl <em>Ensemble Definition</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleDefinitionImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getEnsembleDefinition()
	 * @generated
	 */
	int ENSEMBLE_DEFINITION = 9;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.InvocableImpl <em>Invocable</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.InvocableImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getInvocable()
	 * @generated
	 */
	int INVOCABLE = 14;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ConditionImpl <em>Condition</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ConditionImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getCondition()
	 * @generated
	 */
	int CONDITION = 10;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ExchangeImpl <em>Exchange</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ExchangeImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getExchange()
	 * @generated
	 */
	int EXCHANGE = 11;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentProcessImpl <em>Component Process</em>}' class.
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentProcessImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getComponentProcess()
	int COMPONENT_PROCESS = 12;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ParameterImpl <em>Parameter</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ParameterImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getParameter()
	 * @generated
	 */
	int PARAMETER = 13;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleControllerImpl <em>Ensemble Controller</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleControllerImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getEnsembleController()
	 * @generated
	 */
	int ENSEMBLE_CONTROLLER = 15;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeCoordinatorImpl <em>Path Node Coordinator</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeCoordinatorImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeCoordinator()
	 * @generated
	 */
	int PATH_NODE_COORDINATOR = 16;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMemberImpl <em>Path Node Member</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMemberImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeMember()
	 * @generated
	 */
	int PATH_NODE_MEMBER = 17;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeComponentIdImpl <em>Path Node Component Id</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeComponentIdImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeComponentId()
	 * @generated
	 */
	int PATH_NODE_COMPONENT_ID = 18;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.StringToObjectMapImpl <em>String To Object Map</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.StringToObjectMapImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getStringToObjectMap()
	 * @generated
	 */
	int STRING_TO_OBJECT_MAP = 19;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.TimeTriggerImpl <em>Time Trigger</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.TimeTriggerImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getTimeTrigger()
	 * @generated
	 */
	int TIME_TRIGGER = 0;
	int TIME_TRIGGER__PERIOD = TRIGGER_FEATURE_COUNT + 0;
	 * The feature id for the '<em><b>Offset</b></em>' attribute.
	int TIME_TRIGGER__OFFSET = TRIGGER_FEATURE_COUNT + 1;
	 * The number of structural features of the '<em>Time Trigger</em>' class.
	int TIME_TRIGGER_FEATURE_COUNT = TRIGGER_FEATURE_COUNT + 2;
	 * The number of operations of the '<em>Time Trigger</em>' class.
	 * @ordered
	int TIME_TRIGGER_OPERATION_COUNT = TRIGGER_OPERATION_COUNT + 0;
	/**
	 * Returns the meta object for class '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger <em>Time Trigger</em>}'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the meta object for class '<em>Time Trigger</em>'.
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger
	 * @generated
	 */
	EClass getTimeTrigger();

	/**
	 * Returns the meta object for the attribute '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger#getPeriod <em>Period</em>}'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the meta object for the attribute '<em>Period</em>'.
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger#getPeriod()
	 * @see #getTimeTrigger()
	 * @generated
	 */
	EAttribute getTimeTrigger_Period();

	/**
	 * Returns the meta object for the attribute '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger#getOffset <em>Offset</em>}'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the meta object for the attribute '<em>Offset</em>'.
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger#getOffset()
	 * @see #getTimeTrigger()
	 * @generated
	 */
	EAttribute getTimeTrigger_Offset();

		/**
		 * The meta object literal for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.TimeTriggerImpl <em>Time Trigger</em>}' class.
		 * <!-- begin-user-doc -->
		 * <!-- end-user-doc -->
		 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.TimeTriggerImpl
		 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getTimeTrigger()
		 * @generated
		 */
		EClass TIME_TRIGGER = eINSTANCE.getTimeTrigger();

		/**
		 * The meta object literal for the '<em><b>Period</b></em>' attribute feature.
		 * <!-- begin-user-doc -->
		 * <!-- end-user-doc -->
		 * @generated
		 */
		EAttribute TIME_TRIGGER__PERIOD = eINSTANCE.getTimeTrigger_Period();

		/**
		 * The meta object literal for the '<em><b>Offset</b></em>' attribute feature.
		 * <!-- begin-user-doc -->
		 * <!-- end-user-doc -->
		 * @generated
		 */
		EAttribute TIME_TRIGGER__OFFSET = eINSTANCE.getTimeTrigger_Offset();

	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PeriodicTriggerImpl <em>Periodic Trigger</em>}' class.
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PeriodicTriggerImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPeriodicTrigger()
	int PERIODIC_TRIGGER = 0;
	int PERIODIC_TRIGGER__PERIOD = TRIGGER_FEATURE_COUNT + 0;
	 * The number of structural features of the '<em>Periodic Trigger</em>' class.
	int PERIODIC_TRIGGER_FEATURE_COUNT = TRIGGER_FEATURE_COUNT + 1;
	 * The number of operations of the '<em>Periodic Trigger</em>' class.
	int PERIODIC_TRIGGER_OPERATION_COUNT = TRIGGER_OPERATION_COUNT + 0;
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgeChangeTriggerImpl <em>Knowledge Change Trigger</em>}' class.
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgeChangeTriggerImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getKnowledgeChangeTrigger()
	int KNOWLEDGE_CHANGE_TRIGGER = 2;
	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgePathImpl <em>Knowledge Path</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgePathImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getKnowledgePath()
	 * @generated
	 */
	int KNOWLEDGE_PATH = 3;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeImpl <em>Path Node</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNode()
	 * @generated
	 */
	int PATH_NODE = 4;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeFieldImpl <em>Path Node Field</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeFieldImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeField()
	 * @generated
	 */
	int PATH_NODE_FIELD = 5;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMapKeyImpl <em>Path Node Map Key</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMapKeyImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeMapKey()
	 * @generated
	 */
	int PATH_NODE_MAP_KEY = 6;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataImpl <em>Runtime Metadata</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getRuntimeMetadata()
	 * @generated
	 */
	int RUNTIME_METADATA = 7;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentInstanceImpl <em>Component Instance</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentInstanceImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getComponentInstance()
	 * @generated
	 */
	int COMPONENT_INSTANCE = 8;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleDefinitionImpl <em>Ensemble Definition</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleDefinitionImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getEnsembleDefinition()
	 * @generated
	 */
	int ENSEMBLE_DEFINITION = 9;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.InvocableImpl <em>Invocable</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.InvocableImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getInvocable()
	 * @generated
	 */
	int INVOCABLE = 14;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ConditionImpl <em>Condition</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ConditionImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getCondition()
	 * @generated
	 */
	int CONDITION = 10;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ExchangeImpl <em>Exchange</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ExchangeImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getExchange()
	 * @generated
	 */
	int EXCHANGE = 11;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentProcessImpl <em>Component Process</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentProcessImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getComponentProcess()
	 * @generated
	 */
	int COMPONENT_PROCESS = 12;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ParameterImpl <em>Parameter</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ParameterImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getParameter()
	 * @generated
	 */
	int PARAMETER = 13;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleControllerImpl <em>Ensemble Controller</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleControllerImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getEnsembleController()
	 * @generated
	 */
	int ENSEMBLE_CONTROLLER = 15;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeCoordinatorImpl <em>Path Node Coordinator</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeCoordinatorImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeCoordinator()
	 * @generated
	 */
	int PATH_NODE_COORDINATOR = 16;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMemberImpl <em>Path Node Member</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMemberImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeMember()
	 * @generated
	 */
	int PATH_NODE_MEMBER = 17;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeComponentIdImpl <em>Path Node Component Id</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeComponentIdImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeComponentId()
	 * @generated
	 */
	int PATH_NODE_COMPONENT_ID = 18;

	/**
	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.StringToObjectMapImpl <em>String To Object Map</em>}' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.StringToObjectMapImpl
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getStringToObjectMap()
	 * @generated
	 */
	int STRING_TO_OBJECT_MAP = 19;

	/**
	 * Returns the meta object for class '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger <em>Periodic Trigger</em>}'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the meta object for class '<em>Periodic Trigger</em>'.
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger
	 * @generated
	 */
	EClass getPeriodicTrigger();

	/**
	 * Returns the meta object for the attribute '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger#getPeriod <em>Period</em>}'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the meta object for the attribute '<em>Period</em>'.
	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger#getPeriod()
	 * @see #getPeriodicTrigger()
	 * @generated
	 */
	EAttribute getPeriodicTrigger_Period();

		/**
		 * The meta object literal for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PeriodicTriggerImpl <em>Periodic Trigger</em>}' class.
		 * <!-- begin-user-doc -->
		 * <!-- end-user-doc -->
		 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PeriodicTriggerImpl
		 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPeriodicTrigger()
		 * @generated
		 */
		EClass PERIODIC_TRIGGER = eINSTANCE.getPeriodicTrigger();

		/**
		 * The meta object literal for the '<em><b>Period</b></em>' attribute feature.
		 * <!-- begin-user-doc -->
		 * <!-- end-user-doc -->
		 * @generated
		 */
		EAttribute PERIODIC_TRIGGER__PERIOD = eINSTANCE.getPeriodicTrigger_Period();

@@ -87,14 +87,194 @@ public interface RuntimeMetadataPackage extends EPackage {
 	int TRIGGER_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PeriodicTriggerImpl <em>Periodic Trigger</em>}' class.
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgeChangeTriggerImpl <em>Knowledge Change Trigger</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgeChangeTriggerImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getKnowledgeChangeTrigger()
+	 * @generated
+	 */
+	int KNOWLEDGE_CHANGE_TRIGGER = 2;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgePathImpl <em>Knowledge Path</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgePathImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getKnowledgePath()
+	 * @generated
+	 */
+	int KNOWLEDGE_PATH = 3;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeImpl <em>Path Node</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNode()
+	 * @generated
+	 */
+	int PATH_NODE = 4;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeFieldImpl <em>Path Node Field</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeFieldImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeField()
+	 * @generated
+	 */
+	int PATH_NODE_FIELD = 5;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMapKeyImpl <em>Path Node Map Key</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMapKeyImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeMapKey()
+	 * @generated
+	 */
+	int PATH_NODE_MAP_KEY = 6;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataImpl <em>Runtime Metadata</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getRuntimeMetadata()
+	 * @generated
+	 */
+	int RUNTIME_METADATA = 7;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentInstanceImpl <em>Component Instance</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentInstanceImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getComponentInstance()
+	 * @generated
+	 */
+	int COMPONENT_INSTANCE = 8;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleDefinitionImpl <em>Ensemble Definition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleDefinitionImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getEnsembleDefinition()
+	 * @generated
+	 */
+	int ENSEMBLE_DEFINITION = 9;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.InvocableImpl <em>Invocable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.InvocableImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getInvocable()
+	 * @generated
+	 */
+	int INVOCABLE = 14;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ConditionImpl <em>Condition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ConditionImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getCondition()
+	 * @generated
+	 */
+	int CONDITION = 10;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ExchangeImpl <em>Exchange</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ExchangeImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getExchange()
+	 * @generated
+	 */
+	int EXCHANGE = 11;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentProcessImpl <em>Component Process</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PeriodicTriggerImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPeriodicTrigger()
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentProcessImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getComponentProcess()
 	 * @generated
 	 */
-	int PERIODIC_TRIGGER = 0;
+	int COMPONENT_PROCESS = 12;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ParameterImpl <em>Parameter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ParameterImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getParameter()
+	 * @generated
+	 */
+	int PARAMETER = 13;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleControllerImpl <em>Ensemble Controller</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleControllerImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getEnsembleController()
+	 * @generated
+	 */
+	int ENSEMBLE_CONTROLLER = 15;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeCoordinatorImpl <em>Path Node Coordinator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeCoordinatorImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeCoordinator()
+	 * @generated
+	 */
+	int PATH_NODE_COORDINATOR = 16;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMemberImpl <em>Path Node Member</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMemberImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeMember()
+	 * @generated
+	 */
+	int PATH_NODE_MEMBER = 17;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeComponentIdImpl <em>Path Node Component Id</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeComponentIdImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeComponentId()
+	 * @generated
+	 */
+	int PATH_NODE_COMPONENT_ID = 18;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.StringToObjectMapImpl <em>String To Object Map</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.StringToObjectMapImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getStringToObjectMap()
+	 * @generated
+	 */
+	int STRING_TO_OBJECT_MAP = 19;
+
+	/**
+	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.TimeTriggerImpl <em>Time Trigger</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.TimeTriggerImpl
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getTimeTrigger()
+	 * @generated
+	 */
+	int TIME_TRIGGER = 0;
 
 	/**
 	 * The feature id for the '<em><b>Period</b></em>' attribute.
@@ -103,35 +283,34 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int PERIODIC_TRIGGER__PERIOD = TRIGGER_FEATURE_COUNT + 0;
+	int TIME_TRIGGER__PERIOD = TRIGGER_FEATURE_COUNT + 0;
 
 	/**
-	 * The number of structural features of the '<em>Periodic Trigger</em>' class.
+	 * The feature id for the '<em><b>Offset</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PERIODIC_TRIGGER_FEATURE_COUNT = TRIGGER_FEATURE_COUNT + 1;
+	int TIME_TRIGGER__OFFSET = TRIGGER_FEATURE_COUNT + 1;
 
 	/**
-	 * The number of operations of the '<em>Periodic Trigger</em>' class.
+	 * The number of structural features of the '<em>Time Trigger</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PERIODIC_TRIGGER_OPERATION_COUNT = TRIGGER_OPERATION_COUNT + 0;
+	int TIME_TRIGGER_FEATURE_COUNT = TRIGGER_FEATURE_COUNT + 2;
 
 	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgeChangeTriggerImpl <em>Knowledge Change Trigger</em>}' class.
+	 * The number of operations of the '<em>Time Trigger</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgeChangeTriggerImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getKnowledgeChangeTrigger()
 	 * @generated
+	 * @ordered
 	 */
-	int KNOWLEDGE_CHANGE_TRIGGER = 2;
+	int TIME_TRIGGER_OPERATION_COUNT = TRIGGER_OPERATION_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Knowledge Path</b></em>' containment reference.
@@ -160,16 +339,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int KNOWLEDGE_CHANGE_TRIGGER_OPERATION_COUNT = TRIGGER_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgePathImpl <em>Knowledge Path</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.KnowledgePathImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getKnowledgePath()
-	 * @generated
-	 */
-	int KNOWLEDGE_PATH = 3;
-
 	/**
 	 * The feature id for the '<em><b>Nodes</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -197,16 +366,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int KNOWLEDGE_PATH_OPERATION_COUNT = 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeImpl <em>Path Node</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNode()
-	 * @generated
-	 */
-	int PATH_NODE = 4;
-
 	/**
 	 * The number of structural features of the '<em>Path Node</em>' class.
 	 * <!-- begin-user-doc -->
@@ -225,16 +384,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int PATH_NODE_OPERATION_COUNT = 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeFieldImpl <em>Path Node Field</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeFieldImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeField()
-	 * @generated
-	 */
-	int PATH_NODE_FIELD = 5;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -262,16 +411,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int PATH_NODE_FIELD_OPERATION_COUNT = PATH_NODE_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMapKeyImpl <em>Path Node Map Key</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMapKeyImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeMapKey()
-	 * @generated
-	 */
-	int PATH_NODE_MAP_KEY = 6;
-
 	/**
 	 * The feature id for the '<em><b>Key Path</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
@@ -299,16 +438,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int PATH_NODE_MAP_KEY_OPERATION_COUNT = PATH_NODE_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataImpl <em>Runtime Metadata</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getRuntimeMetadata()
-	 * @generated
-	 */
-	int RUNTIME_METADATA = 7;
-
 	/**
 	 * The feature id for the '<em><b>Ensemble Definitions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -345,16 +474,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int RUNTIME_METADATA_OPERATION_COUNT = 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentInstanceImpl <em>Component Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentInstanceImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getComponentInstance()
-	 * @generated
-	 */
-	int COMPONENT_INSTANCE = 8;
-
 	/**
 	 * The feature id for the '<em><b>Component Processes</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -427,16 +546,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int COMPONENT_INSTANCE_OPERATION_COUNT = 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleDefinitionImpl <em>Ensemble Definition</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleDefinitionImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getEnsembleDefinition()
-	 * @generated
-	 */
-	int ENSEMBLE_DEFINITION = 9;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -500,16 +609,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int ENSEMBLE_DEFINITION_OPERATION_COUNT = 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.InvocableImpl <em>Invocable</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.InvocableImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getInvocable()
-	 * @generated
-	 */
-	int INVOCABLE = 14;
-
 	/**
 	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -546,16 +645,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int INVOCABLE_OPERATION_COUNT = 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ConditionImpl <em>Condition</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ConditionImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getCondition()
-	 * @generated
-	 */
-	int CONDITION = 10;
-
 	/**
 	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -592,16 +681,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int CONDITION_OPERATION_COUNT = INVOCABLE_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ExchangeImpl <em>Exchange</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ExchangeImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getExchange()
-	 * @generated
-	 */
-	int EXCHANGE = 11;
-
 	/**
 	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -638,16 +717,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int EXCHANGE_OPERATION_COUNT = INVOCABLE_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentProcessImpl <em>Component Process</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ComponentProcessImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getComponentProcess()
-	 * @generated
-	 */
-	int COMPONENT_PROCESS = 12;
-
 	/**
 	 * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -720,16 +789,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int COMPONENT_PROCESS_OPERATION_COUNT = INVOCABLE_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.ParameterImpl <em>Parameter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.ParameterImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getParameter()
-	 * @generated
-	 */
-	int PARAMETER = 13;
-
 	/**
 	 * The feature id for the '<em><b>Direction</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -775,16 +834,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int PARAMETER_OPERATION_COUNT = 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleControllerImpl <em>Ensemble Controller</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.EnsembleControllerImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getEnsembleController()
-	 * @generated
-	 */
-	int ENSEMBLE_CONTROLLER = 15;
-
 	/**
 	 * The feature id for the '<em><b>Component Instance</b></em>' container reference.
 	 * <!-- begin-user-doc -->
@@ -821,16 +870,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int ENSEMBLE_CONTROLLER_OPERATION_COUNT = 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeCoordinatorImpl <em>Path Node Coordinator</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeCoordinatorImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeCoordinator()
-	 * @generated
-	 */
-	int PATH_NODE_COORDINATOR = 16;
-
 	/**
 	 * The number of structural features of the '<em>Path Node Coordinator</em>' class.
 	 * <!-- begin-user-doc -->
@@ -849,16 +888,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int PATH_NODE_COORDINATOR_OPERATION_COUNT = PATH_NODE_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMemberImpl <em>Path Node Member</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeMemberImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeMember()
-	 * @generated
-	 */
-	int PATH_NODE_MEMBER = 17;
-
 	/**
 	 * The number of structural features of the '<em>Path Node Member</em>' class.
 	 * <!-- begin-user-doc -->
@@ -877,16 +906,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int PATH_NODE_MEMBER_OPERATION_COUNT = PATH_NODE_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeComponentIdImpl <em>Path Node Component Id</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PathNodeComponentIdImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPathNodeComponentId()
-	 * @generated
-	 */
-	int PATH_NODE_COMPONENT_ID = 18;
-
 	/**
 	 * The number of structural features of the '<em>Path Node Component Id</em>' class.
 	 * <!-- begin-user-doc -->
@@ -905,16 +924,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int PATH_NODE_COMPONENT_ID_OPERATION_COUNT = PATH_NODE_OPERATION_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.StringToObjectMapImpl <em>String To Object Map</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.StringToObjectMapImpl
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getStringToObjectMap()
-	 * @generated
-	 */
-	int STRING_TO_OBJECT_MAP = 19;
-
 	/**
 	 * The feature id for the '<em><b>Key</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -1001,27 +1010,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	int COMMUNICATION_BOUNDARY = 24;
 
-	/**
-	 * Returns the meta object for class '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger <em>Periodic Trigger</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Periodic Trigger</em>'.
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger
-	 * @generated
-	 */
-	EClass getPeriodicTrigger();
-
-	/**
-	 * Returns the meta object for the attribute '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger#getPeriod <em>Period</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Period</em>'.
-	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger#getPeriod()
-	 * @see #getPeriodicTrigger()
-	 * @generated
-	 */
-	EAttribute getPeriodicTrigger_Period();
-
 	/**
 	 * Returns the meta object for class '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger <em>Trigger</em>}'.
 	 * <!-- begin-user-doc -->
@@ -1544,6 +1532,38 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 */
 	EAttribute getStringToObjectMap_Value();
 
+	/**
+	 * Returns the meta object for class '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger <em>Time Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Time Trigger</em>'.
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger
+	 * @generated
+	 */
+	EClass getTimeTrigger();
+
+	/**
+	 * Returns the meta object for the attribute '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger#getPeriod <em>Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Period</em>'.
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger#getPeriod()
+	 * @see #getTimeTrigger()
+	 * @generated
+	 */
+	EAttribute getTimeTrigger_Period();
+
+	/**
+	 * Returns the meta object for the attribute '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger#getOffset <em>Offset</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Offset</em>'.
+	 * @see cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger#getOffset()
+	 * @see #getTimeTrigger()
+	 * @generated
+	 */
+	EAttribute getTimeTrigger_Offset();
+
 	/**
 	 * Returns the meta object for enum '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.ParameterDirection <em>Parameter Direction</em>}'.
 	 * <!-- begin-user-doc -->
@@ -1621,24 +1641,6 @@ public interface RuntimeMetadataPackage extends EPackage {
 	 * @generated
 	 */
 	interface Literals {
-		/**
-		 * The meta object literal for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.PeriodicTriggerImpl <em>Periodic Trigger</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.PeriodicTriggerImpl
-		 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getPeriodicTrigger()
-		 * @generated
-		 */
-		EClass PERIODIC_TRIGGER = eINSTANCE.getPeriodicTrigger();
-
-		/**
-		 * The meta object literal for the '<em><b>Period</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute PERIODIC_TRIGGER__PERIOD = eINSTANCE.getPeriodicTrigger_Period();
-
 		/**
 		 * The meta object literal for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.TriggerImpl <em>Trigger</em>}' class.
 		 * <!-- begin-user-doc -->
@@ -2069,6 +2071,32 @@ interface Literals {
 		 */
 		EAttribute STRING_TO_OBJECT_MAP__VALUE = eINSTANCE.getStringToObjectMap_Value();
 
+		/**
+		 * The meta object literal for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.impl.TimeTriggerImpl <em>Time Trigger</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.TimeTriggerImpl
+		 * @see cz.cuni.mff.d3s.deeco.model.runtime.impl.RuntimeMetadataPackageImpl#getTimeTrigger()
+		 * @generated
+		 */
+		EClass TIME_TRIGGER = eINSTANCE.getTimeTrigger();
+
+		/**
+		 * The meta object literal for the '<em><b>Period</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TIME_TRIGGER__PERIOD = eINSTANCE.getTimeTrigger_Period();
+
+		/**
+		 * The meta object literal for the '<em><b>Offset</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TIME_TRIGGER__OFFSET = eINSTANCE.getTimeTrigger_Offset();
+
 		/**
 		 * The meta object literal for the '{@link cz.cuni.mff.d3s.deeco.model.runtime.api.ParameterDirection <em>Parameter Direction</em>}' enum.
 		 * <!-- begin-user-doc -->
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2Fmeta%2FRuntimeMetadataPackage.java
bf9336d3aae996ec26d2b8cee5d84835b99e136f
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FKnowledgeDataManager.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FKnowledgeDataManager.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/network/KnowledgeDataManager.java
import cz.cuni.mff.d3s.deeco.DeecoProperties;
	// this rssi corresponds to roughly 50m distance
	public static final double RSSI_50m = 5.59e-9;
	
	private final boolean useIndividualPublishing;
	private final boolean checkGossipCondition;
	private final boolean checkBoundaryCondition;
	private final double rssiLimit;

		
		useIndividualPublishing = Boolean.getBoolean(DeecoProperties.USE_INDIVIDUAL_KNOWLEDGE_PUBLISHING);
		Log.d(String.format("KnowledgeDataManager at %s uses %s publishing", host, useIndividualPublishing ? "individual" : "list"));
		
		checkGossipCondition = !Boolean.getBoolean(DeecoProperties.DISABLE_GOSSIP_CONDITION);
		Log.d(String.format("KnowledgeDataManager at %s uses checkGossipCondition = %b", host, checkGossipCondition));
		
		checkBoundaryCondition = !Boolean.getBoolean(DeecoProperties.DISABLE_BOUNDARY_CONDITIONS);
		Log.d(String.format("KnowledgeDataManager at %s uses checkBoundaryCondition = %b", host, checkBoundaryCondition));

		double rssi = 0;
		try {
			rssi = Double.parseDouble(System.getProperty(DeecoProperties.GOSSIP_CONDITION_RSSI));
		} catch (Exception e) {
			rssi = RSSI_50m;
		}
		rssiLimit = rssi;
		Log.d(String.format("KnowledgeDataManager at %s uses rssiLimit = %g", host, rssiLimit));
			if (useIndividualPublishing) {
				// broadcast each kd individually to minimize the message size and
				// thus reduce network collisions.
				for (KnowledgeData kd: data) {
					knowledgeDataSender.broadcastKnowledgeData(Arrays.asList(kd));
				}
			} else {
				knowledgeDataSender.broadcastKnowledgeData(data);
			}
				if (checkGossipCondition && !satisfiesGossipCondition(kmd)) { 
				if (checkBoundaryCondition && !isInSomeBoundary(kd, nodeKm)) {
		return kmd.rssi < 0 || kmd.rssi <= rssiLimit;		
//			// broadcast each kd individually to minimize the message size and
//			// thus reduce network collisions.
//			for (KnowledgeData kd: data)
//				knowledgeDataSender.broadcastKnowledgeData(Arrays.asList(kd));
			knowledgeDataSender.broadcastKnowledgeData(data);
				if (!satisfiesGossipCondition(kmd)) { 
				if (!isInSomeBoundary(kd, nodeKm)) {
		// the signal came from more than 20m
		return kmd.rssi < 0 || kmd.rssi <= RSSI_20m;		
@@ -6,6 +6,7 @@
 import java.util.List;
 import java.util.Map;
 
+import cz.cuni.mff.d3s.deeco.DeecoProperties;
 import cz.cuni.mff.d3s.deeco.knowledge.ChangeSet;
 import cz.cuni.mff.d3s.deeco.knowledge.KnowledgeManager;
 import cz.cuni.mff.d3s.deeco.knowledge.KnowledgeManagerContainer;
@@ -52,6 +53,8 @@ public class KnowledgeDataManager implements KnowledgeDataReceiver,
 	public static final double RSSI_20m = 5.52e-8; 
 	// this rssi corresponds to roughly 10m distance
 	public static final double RSSI_10m = 3.12e-7;
+	// this rssi corresponds to roughly 50m distance
+	public static final double RSSI_50m = 5.59e-9;
 	
 	/** Global version counter for all outgoing local knowledge. */
 	protected long localVersion;	
@@ -69,6 +72,12 @@ public class KnowledgeDataManager implements KnowledgeDataReceiver,
 	private final List<KnowledgePath> emptyPath;
 	/** List of ensemble definitions whose boundary conditions should be considered. */
 	private final List<EnsembleDefinition> ensembleDefinitions;
+	
+	private final boolean useIndividualPublishing;
+	private final boolean checkGossipCondition;
+	private final boolean checkBoundaryCondition;
+	private final double rssiLimit;
+
 
 	
 	/**
@@ -97,6 +106,24 @@ public KnowledgeDataManager(
 		KnowledgePath empty = factory.createKnowledgePath();
 		emptyPath = new LinkedList<>();
 		emptyPath.add(empty);
+		
+		useIndividualPublishing = Boolean.getBoolean(DeecoProperties.USE_INDIVIDUAL_KNOWLEDGE_PUBLISHING);
+		Log.d(String.format("KnowledgeDataManager at %s uses %s publishing", host, useIndividualPublishing ? "individual" : "list"));
+		
+		checkGossipCondition = !Boolean.getBoolean(DeecoProperties.DISABLE_GOSSIP_CONDITION);
+		Log.d(String.format("KnowledgeDataManager at %s uses checkGossipCondition = %b", host, checkGossipCondition));
+		
+		checkBoundaryCondition = !Boolean.getBoolean(DeecoProperties.DISABLE_BOUNDARY_CONDITIONS);
+		Log.d(String.format("KnowledgeDataManager at %s uses checkBoundaryCondition = %b", host, checkBoundaryCondition));
+
+		double rssi = 0;
+		try {
+			rssi = Double.parseDouble(System.getProperty(DeecoProperties.GOSSIP_CONDITION_RSSI));
+		} catch (Exception e) {
+			rssi = RSSI_50m;
+		}
+		rssiLimit = rssi;
+		Log.d(String.format("KnowledgeDataManager at %s uses rssiLimit = %g", host, rssiLimit));
 	}
 	
 	@Override
@@ -108,11 +135,15 @@ public void publish() {
 		//TODO
 		if (!data.isEmpty()) {
 			
-//			// broadcast each kd individually to minimize the message size and
-//			// thus reduce network collisions.
-//			for (KnowledgeData kd: data)
-//				knowledgeDataSender.broadcastKnowledgeData(Arrays.asList(kd));
-			knowledgeDataSender.broadcastKnowledgeData(data);
+			if (useIndividualPublishing) {
+				// broadcast each kd individually to minimize the message size and
+				// thus reduce network collisions.
+				for (KnowledgeData kd: data) {
+					knowledgeDataSender.broadcastKnowledgeData(Arrays.asList(kd));
+				}
+			} else {
+				knowledgeDataSender.broadcastKnowledgeData(data);
+			}
 			localVersion++;
 		}
 	}
@@ -178,7 +209,7 @@ List<? extends KnowledgeData> prepareKnowledgeData() {
 				KnowledgeMetaData kmd = replicaMetadata.get(km);
 				KnowledgeManager nodeKm = getNodeKnowledge();
 								
-				if (!satisfiesGossipCondition(kmd)) { 
+				if (checkGossipCondition && !satisfiesGossipCondition(kmd)) { 
 					Log.d(String.format("Gossip condition failed (%d) at %s for %sv%d from %s with rssi %g\n", 
 							timeProvider.getCurrentTime(), host, kmd.componentId, kmd.versionId, kmd.sender, kmd.rssi));
 					continue;
@@ -191,7 +222,7 @@ List<? extends KnowledgeData> prepareKnowledgeData() {
 				kmdCopy.sender = host;
 				KnowledgeData kd = new KnowledgeData(km.get(emptyPath), kmdCopy);
 
-				if (!isInSomeBoundary(kd, nodeKm)) {
+				if (checkBoundaryCondition && !isInSomeBoundary(kd, nodeKm)) {
 					Log.d(String.format("Boundary failed (%d) at %s for %sv%d\n", 
 							timeProvider.getCurrentTime(), host, kmd.componentId, kmd.versionId));
 					continue;
@@ -210,8 +241,7 @@ List<? extends KnowledgeData> prepareKnowledgeData() {
 
 	private boolean satisfiesGossipCondition(KnowledgeMetaData kmd) {
 		// rssi < 0 means received from IP
-		// the signal came from more than 20m
-		return kmd.rssi < 0 || kmd.rssi <= RSSI_20m;		
+		return kmd.rssi < 0 || kmd.rssi <= rssiLimit;		
 	}
 
 	private boolean isInSomeBoundary(KnowledgeData data, KnowledgeManager sender) {
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FKnowledgeDataManager.java
85a82d0b608f842def248906c9572fb0a4aa37e7
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPacketReceiver.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPacketReceiver.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/network/PacketReceiver.java
import cz.cuni.mff.d3s.deeco.DeecoProperties;
	private final static int DEFAULT_MESSAGE_WIPE_PERIOD = 500;
	
	private final static int DEFAULT_MAX_MESSAGE_TIME = 2000;

	
	private final int maxMessageTime;
	private final int messageWipePeriod;
		
		maxMessageTime = Integer.getInteger(DeecoProperties.MESSAGE_CACHE_DEADLINE, DEFAULT_MAX_MESSAGE_TIME);
		messageWipePeriod = Integer.getInteger(DeecoProperties.MESSAGE_CACHE_WIPE_PERIOD, DEFAULT_MESSAGE_WIPE_PERIOD);
		
		Log.d(String.format("PacketReceiver at %s uses packetSize=%d, maxMessageTime=%d, messageWipePeriod=%d", 
				host, packetSize, maxMessageTime, messageWipePeriod));
		
	}
	
	public PacketReceiver(String host) {
		this(host, Integer.getInteger(DeecoProperties.PACKET_SIZE, PacketSender.DEFAULT_PACKET_SIZE));
		if (timeProvider.getCurrentTime() - lastMessagesWipe >= messageWipePeriod) {
			return timeProvider.getCurrentTime() - creationTime > maxMessageTime;
	private final static int MESSAGE_WIPE_PERIOD = 500;
		if (timeProvider.getCurrentTime() - lastMessagesWipe >= MESSAGE_WIPE_PERIOD) {
		private final static int MAX_MESSAGE_TIME = 1000;
			return timeProvider.getCurrentTime() - creationTime > MAX_MESSAGE_TIME;
@@ -12,6 +12,7 @@
 import java.util.Map.Entry;
 import java.util.Set;
 
+import cz.cuni.mff.d3s.deeco.DeecoProperties;
 import cz.cuni.mff.d3s.deeco.logging.Log;
 import cz.cuni.mff.d3s.deeco.scheduler.CurrentTimeProvider;
 
@@ -27,7 +28,10 @@
  */
 public class PacketReceiver {
 
-	private final static int MESSAGE_WIPE_PERIOD = 500;
+	private final static int DEFAULT_MESSAGE_WIPE_PERIOD = 500;
+	
+	private final static int DEFAULT_MAX_MESSAGE_TIME = 2000;
+
 
 	private final String host;
 	
@@ -37,11 +41,25 @@ public class PacketReceiver {
 	private KnowledgeDataReceiver knowledgeDataReceiver;
 	private CurrentTimeProvider timeProvider;
 	private long lastMessagesWipe = 0;
+	
+	private final int maxMessageTime;
+	private final int messageWipePeriod;
 
 	public PacketReceiver(String host, int packetSize) {
 		this.packetSize = packetSize;
 		this.messages = new HashMap<Integer, Message>();
 		this.host = host;
+		
+		maxMessageTime = Integer.getInteger(DeecoProperties.MESSAGE_CACHE_DEADLINE, DEFAULT_MAX_MESSAGE_TIME);
+		messageWipePeriod = Integer.getInteger(DeecoProperties.MESSAGE_CACHE_WIPE_PERIOD, DEFAULT_MESSAGE_WIPE_PERIOD);
+		
+		Log.d(String.format("PacketReceiver at %s uses packetSize=%d, maxMessageTime=%d, messageWipePeriod=%d", 
+				host, packetSize, maxMessageTime, messageWipePeriod));
+		
+	}
+	
+	public PacketReceiver(String host) {
+		this(host, Integer.getInteger(DeecoProperties.PACKET_SIZE, PacketSender.DEFAULT_PACKET_SIZE));
 	}
 
 	public void setKnowledgeDataReceiver(
@@ -86,7 +104,7 @@ public void packetReceived(byte[] packet, double rssi) {
 
 	//TODO Possibly this should be scheduled as a task in the Scheduler.
 	private void clearCachedMessagesIfNecessary() {
-		if (timeProvider.getCurrentTime() - lastMessagesWipe >= MESSAGE_WIPE_PERIOD) {
+		if (timeProvider.getCurrentTime() - lastMessagesWipe >= messageWipePeriod) {
 			int origCnt = messages.size();
 
 			Set<Integer> droppedIds = new HashSet<>();
@@ -138,7 +156,6 @@ private byte[] getPacketData(byte[] packet) {
 
 	private class Message {
 
-		private final static int MAX_MESSAGE_TIME = 1000;
 
 		private Map<Integer, Object> cache = new HashMap<>();
 
@@ -156,7 +173,7 @@ public Message(int messageId) {
 		}
 
 		public boolean isStale() {
-			return timeProvider.getCurrentTime() - creationTime > MAX_MESSAGE_TIME;
+			return timeProvider.getCurrentTime() - creationTime > maxMessageTime;
 		}
 		
 		public void setLastRSSI(double rssi) {
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPacketReceiver.java
5e38e8e2ab29547b1df24b9eca11bbdf4873bed8
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPacketSender.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPacketSender.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/network/PacketSender.java
import cz.cuni.mff.d3s.deeco.DeecoProperties;
	static int DEFAULT_PACKET_SIZE = 1000;

	private final int packetSize;

	//FIXME: this would not work if distributed on multiple JVMs
		
		Log.d(String.format("PacketSender at %s uses packetSize = %d", host, packetSize));
	}
	
	public PacketSender(String host) {
		this(host, Integer.getInteger(DeecoProperties.PACKET_SIZE, DEFAULT_PACKET_SIZE));
	private final int packetSize;
@@ -5,6 +5,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import cz.cuni.mff.d3s.deeco.DeecoProperties;
 import cz.cuni.mff.d3s.deeco.logging.Log;
 
 /**
@@ -19,17 +20,21 @@
  */
 public abstract class PacketSender implements KnowledgeDataSender {
 
+	static int DEFAULT_PACKET_SIZE = 1000;
+
 	// We reserver Integer.MIN_VALUE for distinguishing initial packets.
 	private static int CURRENT_MESSAGE_ID = Integer.MIN_VALUE;
 
 	private final String host;
 	
+	private final int packetSize;
+
+	//FIXME: this would not work if distributed on multiple JVMs
 	public synchronized static int getNextMessageId() {
 		CURRENT_MESSAGE_ID++;
 		return CURRENT_MESSAGE_ID;
 	}
 
-	private final int packetSize;
 
 	/**
 	 * Minimum fragment size is at least 12 bytes.
@@ -41,6 +46,12 @@ public PacketSender(String host, int packetSize) {
 		assert packetSize >= 12;
 		this.packetSize = packetSize;
 		this.host = host;
+		
+		Log.d(String.format("PacketSender at %s uses packetSize = %d", host, packetSize));
+	}
+	
+	public PacketSender(String host) {
+		this(host, Integer.getInteger(DeecoProperties.PACKET_SIZE, DEFAULT_PACKET_SIZE));
 	}
 	
 	@Override
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPacketSender.java
f1d61b73ec2e0334d9be0d8f7fb7bdfa4e0ff1ad
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPublisherTask.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPublisherTask.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/network/PublisherTask.java
import cz.cuni.mff.d3s.deeco.DeecoProperties;
import cz.cuni.mff.d3s.deeco.logging.Log;
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
import cz.cuni.mff.d3s.deeco.model.runtime.custom.TimeTriggerExt;
	public static final int DEFAULT_PUBLISHING_PERIOD = 1000;

	private final PublisherTrigger trigger;
	private static class PublisherTrigger extends TimeTriggerExt {

		public PublisherTrigger(long period, long seed) {
			setOffset(0);
			random = new Random(seed);
		}		
	public PublisherTask(Scheduler scheduler, KnowledgeDataPublisher publisher, String host) {
		this(scheduler, publisher, Integer.getInteger(DeecoProperties.PUBLISHING_PERIOD, DEFAULT_PUBLISHING_PERIOD), host);
	}
		this.trigger = new PublisherTrigger(period, seed);
		
		Log.i(String.format("PublisherTask at %s uses publishing period %d", host, period));
	public TimeTrigger getTimeTrigger() {
long period  long seed
jdeeco-core/src/cz/cuni/mff/d3s/deeco/network/PublisherTask.java
setOffset(0);
			random = new Random(seed);
public PublisherTrigger(long period, long seed)
Scheduler scheduler  KnowledgeDataPublisher publisher  String host
jdeeco-core/src/cz/cuni/mff/d3s/deeco/network/PublisherTask.java
this(scheduler, publisher, Integer.getInteger(DeecoProperties.PUBLISHING_PERIOD, DEFAULT_PUBLISHING_PERIOD), host);
public PublisherTask(Scheduler scheduler, KnowledgeDataPublisher publisher, String host)
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
import cz.cuni.mff.d3s.deeco.model.runtime.custom.PeriodicTriggerExt;
	
	private final PeriodicTrigger trigger;
	private static class PublisherPeriod extends PeriodicTriggerExt {
		public PublisherPeriod(long period, long seed) {
			random = new Random(period);
		}
		this.trigger = new PublisherPeriod(period, seed);
	public PeriodicTrigger getPeriodicTrigger() {
long period  long seed
jdeeco-core/src/cz/cuni/mff/d3s/deeco/network/PublisherTask.java
random = new Random(period);
public PublisherPeriod(long period, long seed)
@@ -5,9 +5,11 @@
 
 import java.util.Random;
 
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.DeecoProperties;
+import cz.cuni.mff.d3s.deeco.logging.Log;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger;
-import cz.cuni.mff.d3s.deeco.model.runtime.custom.PeriodicTriggerExt;
+import cz.cuni.mff.d3s.deeco.model.runtime.custom.TimeTriggerExt;
 import cz.cuni.mff.d3s.deeco.scheduler.Scheduler;
 import cz.cuni.mff.d3s.deeco.task.Task;
 import cz.cuni.mff.d3s.deeco.task.TaskInvocationException;
@@ -21,9 +23,10 @@
  * 
  */
 public class PublisherTask extends Task {
-	
+	public static final int DEFAULT_PUBLISHING_PERIOD = 1000;
+
 	private final KnowledgeDataPublisher publisher;
-	private final PeriodicTrigger trigger;
+	private final PublisherTrigger trigger;
 	
 	/**
 	 * Randomized periodic trigger for avoiding recurring collisions of
@@ -32,31 +35,38 @@ public class PublisherTask extends Task {
 	 * @author Jaroslav Keznikl <keznikl@d3s.mff.cuni.cz>
 	 * 
 	 */
-	private static class PublisherPeriod extends PeriodicTriggerExt {
+	private static class PublisherTrigger extends TimeTriggerExt {
 		public static final double PERIOD_VARIABILITY = 0.2;
+
 		Random random;
 
-		public PublisherPeriod(long period, long seed) {
+		public PublisherTrigger(long period, long seed) {
 			super();
 			setPeriod(period);
-			random = new Random(period);
+			setOffset(0);
+			random = new Random(seed);
 		}
 		
 		@Override
 		public long getPeriod() {			
 			// variability is randomized by at most +- PERIOD_VARIABILITY * getPeriod()
 			int variability = (int) (PERIOD_VARIABILITY*super.getPeriod());
 			return super.getPeriod() + random.nextInt(2*variability) - variability;
-		}
+		}		
 	}
 	
+	public PublisherTask(Scheduler scheduler, KnowledgeDataPublisher publisher, String host) {
+		this(scheduler, publisher, Integer.getInteger(DeecoProperties.PUBLISHING_PERIOD, DEFAULT_PUBLISHING_PERIOD), host);
+	}
 	public PublisherTask(Scheduler scheduler, KnowledgeDataPublisher publisher, long period, String host) {
 		super(scheduler);		
 		long seed = 0;
 		for (char c: host.toCharArray())
 			seed += c;
-		this.trigger = new PublisherPeriod(period, seed);
+		this.trigger = new PublisherTrigger(period, seed);
 		this.publisher = publisher;
+		
+		Log.i(String.format("PublisherTask at %s uses publishing period %d", host, period));
 	}
 
 	/* (non-Javadoc)
@@ -91,7 +101,7 @@ protected void unregisterTriggers() {
 	 * @see cz.cuni.mff.d3s.deeco.task.Task#getPeriodicTrigger()
 	 */
 	@Override
-	public PeriodicTrigger getPeriodicTrigger() {
+	public TimeTrigger getTimeTrigger() {
 		return trigger;
 	}
 
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fnetwork%2FPublisherTask.java
15fb714727f6b72c6651aa6d61e1e9c0ba94cd2d
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSchedulerEvent.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSchedulerEvent.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/SchedulerEvent.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 * Wrapper class for all scheduler events
     * Indicator, whether the event is periodic (i.e., fixed-rate execution). 
     * It is set to true only if the trigger is a TimeTrigger with period > 0.
    public final boolean periodic;
    public final Task executable;
    public final Trigger trigger;
    	this.trigger = trigger;    	
    	if ((trigger != null) && (trigger instanceof TimeTrigger) && (((TimeTrigger) trigger).getPeriod() > 0)) {
    		periodic = true;
    	} else {
    		periodic = false;
    	}
 * Wrapper class for all periodic events
     * Period in milliseconds for repeating tasks.  A positive value indicates
     * fixed-rate execution.  A value of 0 indicates a non-repeating task.
    public long period = 0;
    public Task executable;
    public Trigger trigger;
    	this.trigger = trigger;
@@ -1,10 +1,11 @@
 package cz.cuni.mff.d3s.deeco.scheduler;
 
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger;
 import cz.cuni.mff.d3s.deeco.task.Task;
 
 /**
- * Wrapper class for all periodic events
+ * Wrapper class for all scheduler events
  * <p>
  * 
  * @author 	Andranik Muradyan 	<muradian@d3s.mff.cuni.cz>
@@ -32,28 +33,33 @@ public class SchedulerEvent implements Comparable<SchedulerEvent> {
     public long nextExecutionTime;
 
     /**
-     * Period in milliseconds for repeating tasks.  A positive value indicates
-     * fixed-rate execution.  A value of 0 indicates a non-repeating task.
+     * Indicator, whether the event is periodic (i.e., fixed-rate execution). 
+     * It is set to true only if the trigger is a TimeTrigger with period > 0.
      */
-    public long period = 0;
+    public final boolean periodic;
     
     /**
      * The actual task to be executed.
      */
-    public Task executable;
+    public final Task executable;
     
     /** 
      * The trigger associated with this event.
      */
-    public Trigger trigger;
+    public final Trigger trigger;
     
 
     /**
      * Creates a new scheduler task.
      */
     public SchedulerEvent(Task task, Trigger trigger) {
     	this.executable = task;
-    	this.trigger = trigger;
+    	this.trigger = trigger;    	
+    	if ((trigger != null) && (trigger instanceof TimeTrigger) && (((TimeTrigger) trigger).getPeriod() > 0)) {
+    		periodic = true;
+    	} else {
+    		periodic = false;
+    	}
     }
 
 
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSchedulerEvent.java
49814c07f01631be781bffba6c48be55dd57c239
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSingleThreadedScheduler.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSingleThreadedScheduler.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/SingleThreadedScheduler.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
import cz.cuni.mff.d3s.deeco.model.runtime.custom.TimeTriggerExt;
			// if the periodic task execution took more than it remained till the next period 
			if (event.nextExecutionTime < System.currentTimeMillis()) {				
				queue.rescheduleTask(event, System.currentTimeMillis() + event.executable.getTimeTrigger().getPeriod());
			}
				if (task.getTimeTrigger() != null) {
					SchedulerEvent event = new SchedulerEvent(task, task.getTimeTrigger());
					
					// schedule periodic tasks immediately
					if (event.periodic) {
						periodicEvents.put(task, event);
					}
					
					scheduleAfter(event, task.getTimeTrigger().getOffset());					
							scheduleAfter(new SchedulerEvent(task, trigger), 0);
	void scheduleAfter(SchedulerEvent event, long delay) {			
			event.nextExecutionTime = System.currentTimeMillis() + delay;			
//	
//	/**
//	 * Note that this method has to be explicitly protected by queue's monitor!
//	 */
//	void scheduleNow(SchedulerEvent event, long period) {			
//			event.nextExecutionTime = System.currentTimeMillis(); // start immediately
//			event.period = period;
//			event.state = SchedulerEvent.SCHEDULED;
//
//			queue.add(event);
//			if (queue.getMin() == event)
//				queue.notify();		
//	}

                    if (event.periodic) { // Repeating task, reschedule
                    	queue.rescheduleMin(event.nextExecutionTime + event.executable.getTimeTrigger().getPeriod());                       
                    } else { // Non-repeating, remove
                    	queue.removeMin();
	TimeTrigger trigger;
	
	public InvokeAndWaitTask() {
		super(null);
		trigger = new TimeTriggerExt();
		trigger.setPeriod(0);
		trigger.setOffset(0);
	}
	public TimeTrigger getTimeTrigger() {		
		return trigger;
event.periodic
jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/SingleThreadedScheduler.java
periodicEvents.put(task, event);
immediately
					if (event.periodic)
SchedulerEvent event  long delay
jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/SingleThreadedScheduler.java
event.nextExecutionTime = System.currentTimeMillis() + delay;			
//	
//	/**
//	 * Note that this method has to be explicitly protected by queue's monitor!
//	 */
//	void scheduleNow(SchedulerEvent event, long period) {			
//			event.nextExecutionTime = System.currentTimeMillis(); // start immediately
//			event.period = period;
//			event.state = SchedulerEvent.SCHEDULED;
//
//			queue.add(event);
//			if (queue.getMin() == event)
//				queue.notify();		
//
void scheduleAfter(SchedulerEvent event, long delay)
jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/SingleThreadedScheduler.java
super(null);
		trigger = new TimeTriggerExt();
		trigger.setPeriod(0);
		trigger.setOffset(0);
public InvokeAndWaitTask()
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
				// if the periodic task execution took more than it remained till the next period 
				if (event.nextExecutionTime < System.currentTimeMillis()) {				
					queue.rescheduleTask(event, System.currentTimeMillis() + event.period);
				}
				if (task.getPeriodicTrigger() != null) {
					SchedulerEvent event = new SchedulerEvent(task, task.getPeriodicTrigger());
					scheduleNow(event, task.getPeriodicTrigger().getPeriod());
					periodicEvents.put(task, event);
							scheduleNow(new SchedulerEvent(task, trigger), 0);
	void scheduleNow(SchedulerEvent event, long period) {			
			event.nextExecutionTime = System.currentTimeMillis(); // start immediately
			event.period = period;
                    if (event.period == 0) { // Non-repeating, remove
                        queue.removeMin();
                    } else { // Repeating task, reschedule
                        queue.rescheduleMin(event.nextExecutionTime + event.period);
	public PeriodicTrigger getPeriodicTrigger() {		
		return null;
SchedulerEvent event  long period
jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/SingleThreadedScheduler.java
event.nextExecutionTime = System.currentTimeMillis(); // start immediately
			event.period = period;
                    if (event.period == 0) { // Non-repeating, remove
                        queue.removeMin();
void scheduleNow(SchedulerEvent event, long period)
@@ -35,8 +35,9 @@
 
 import cz.cuni.mff.d3s.deeco.executor.Executor;
 import cz.cuni.mff.d3s.deeco.logging.Log;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.custom.TimeTriggerExt;
 import cz.cuni.mff.d3s.deeco.task.Task;
 import cz.cuni.mff.d3s.deeco.task.TaskInvocationException;
 import cz.cuni.mff.d3s.deeco.task.TaskTriggerListener;
@@ -125,10 +126,10 @@ public void executionCompleted(Task task) {
 			if (event == null)
 				return;
 			
-				// if the periodic task execution took more than it remained till the next period 
-				if (event.nextExecutionTime < System.currentTimeMillis()) {				
-					queue.rescheduleTask(event, System.currentTimeMillis() + event.period);
-				}
+			// if the periodic task execution took more than it remained till the next period 
+			if (event.nextExecutionTime < System.currentTimeMillis()) {				
+				queue.rescheduleTask(event, System.currentTimeMillis() + event.executable.getTimeTrigger().getPeriod());
+			}
 			
 		}		
 	}
@@ -187,10 +188,15 @@ public void addTask(Task task) {
 					throw new IllegalStateException(
 							"Scheduler already terminated.");
 				
-				if (task.getPeriodicTrigger() != null) {
-					SchedulerEvent event = new SchedulerEvent(task, task.getPeriodicTrigger());
-					scheduleNow(event, task.getPeriodicTrigger().getPeriod());
-					periodicEvents.put(task, event);
+				if (task.getTimeTrigger() != null) {
+					SchedulerEvent event = new SchedulerEvent(task, task.getTimeTrigger());
+					
+					// schedule periodic tasks immediately
+					if (event.periodic) {
+						periodicEvents.put(task, event);
+					}
+					
+					scheduleAfter(event, task.getTimeTrigger().getOffset());					
 				}
 			}
 			task.setTriggerListener(new TaskTriggerListener() {	
@@ -205,7 +211,7 @@ public void triggered(Task task, Trigger trigger) {
 							isScheduled = allTasks.contains(task);
 						}
 						if (isScheduled) {
-							scheduleNow(new SchedulerEvent(task, trigger), 0);
+							scheduleAfter(new SchedulerEvent(task, trigger), 0);
 						}
 					}
 				}
@@ -218,16 +224,29 @@ public void triggered(Task task, Trigger trigger) {
 	/**
 	 * Note that this method has to be explicitly protected by queue's monitor!
 	 */
-	void scheduleNow(SchedulerEvent event, long period) {			
-			event.nextExecutionTime = System.currentTimeMillis(); // start immediately
-			event.period = period;
+	void scheduleAfter(SchedulerEvent event, long delay) {			
+			event.nextExecutionTime = System.currentTimeMillis() + delay;			
 			event.state = SchedulerEvent.SCHEDULED;
 
 			queue.add(event);
 			if (queue.getMin() == event)
 				queue.notify();		
 	}
 
+//	
+//	/**
+//	 * Note that this method has to be explicitly protected by queue's monitor!
+//	 */
+//	void scheduleNow(SchedulerEvent event, long period) {			
+//			event.nextExecutionTime = System.currentTimeMillis(); // start immediately
+//			event.period = period;
+//			event.state = SchedulerEvent.SCHEDULED;
+//
+//			queue.add(event);
+//			if (queue.getMin() == event)
+//				queue.notify();		
+//	}
+
 
 	@Override
 	public void removeTask(Task task) {
@@ -412,11 +431,11 @@ private void mainLoop() {
                     if( event.state == SchedulerEvent.RUNNING )
                     	continue;
                     
-                    if (event.period == 0) { // Non-repeating, remove
-                        queue.removeMin();
+                    if (event.periodic) { // Repeating task, reschedule
+                    	queue.rescheduleMin(event.nextExecutionTime + event.executable.getTimeTrigger().getPeriod());                       
+                    } else { // Non-repeating, remove
+                    	queue.removeMin();
                         event.state = SchedulerEvent.EXECUTED;
-                    } else { // Repeating task, reschedule
-                        queue.rescheduleMin(event.nextExecutionTime + event.period);
                     }              
                     
                     task = event.executable;
@@ -676,6 +695,14 @@ void heapify() {
 class InvokeAndWaitTask extends Task {
 
 	Runnable runnable;
+	TimeTrigger trigger;
+	
+	public InvokeAndWaitTask() {
+		super(null);
+		trigger = new TimeTriggerExt();
+		trigger.setPeriod(0);
+		trigger.setOffset(0);
+	}
 	
 	public InvokeAndWaitTask(Scheduler scheduler, Runnable runnable) {
 		super(scheduler);
@@ -698,8 +725,8 @@ protected void unregisterTriggers() {
 	}
 
 	@Override
-	public PeriodicTrigger getPeriodicTrigger() {		
-		return null;
+	public TimeTrigger getTimeTrigger() {		
+		return trigger;
 	}
 	
 }
\ No newline at end of file
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSingleThreadedScheduler.java
fb9c507bfc19133b6e06f266d3582b6d79cadde9
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FEnsembleTask.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FEnsembleTask.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/EnsembleTask.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
	 * Returns the period associated with the ensemble in the in the meta-model as the {@link TimeTrigger}. Note that the {@link EnsembleTask} assumes that there is at most
	 * one instance of {@link TimeTrigger} associated with the ensemble in the meta-model.
	public TimeTrigger getTimeTrigger() {
			if (trigger instanceof TimeTrigger) {
				return ((TimeTrigger) trigger);
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
	 * Returns the period associated with the ensemble in the in the meta-model as the {@link PeriodicTrigger}. Note that the {@link EnsembleTask} assumes that there is at most
	 * one instance of {@link PeriodicTrigger} associated with the ensemble in the meta-model.
	public PeriodicTrigger getPeriodicTrigger() {
			if (trigger instanceof PeriodicTrigger) {
				return ((PeriodicTrigger) trigger);
@@ -23,7 +23,7 @@
 import cz.cuni.mff.d3s.deeco.model.runtime.api.KnowledgePath;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Parameter;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.ParameterDirection;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.impl.TriggerImpl;
 import cz.cuni.mff.d3s.deeco.model.runtime.meta.RuntimeMetadataFactory;
@@ -503,16 +503,16 @@ public void invoke(Trigger trigger) throws TaskInvocationException {
 	}
 
 	/**
-	 * Returns the period associated with the ensemble in the in the meta-model as the {@link PeriodicTrigger}. Note that the {@link EnsembleTask} assumes that there is at most
-	 * one instance of {@link PeriodicTrigger} associated with the ensemble in the meta-model.
+	 * Returns the period associated with the ensemble in the in the meta-model as the {@link TimeTrigger}. Note that the {@link EnsembleTask} assumes that there is at most
+	 * one instance of {@link TimeTrigger} associated with the ensemble in the meta-model.
 	 * 
 	 * @return Periodic trigger or null no period is associated with the task.
 	 */
 	@Override
-	public PeriodicTrigger getPeriodicTrigger() {
+	public TimeTrigger getTimeTrigger() {
 		for (Trigger trigger : ensembleController.getEnsembleDefinition().getTriggers()) {
-			if (trigger instanceof PeriodicTrigger) {
-				return ((PeriodicTrigger) trigger);
+			if (trigger instanceof TimeTrigger) {
+				return ((TimeTrigger) trigger);
 			}
 		}
 		
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FEnsembleTask.java
3ed2c0641508d1edcf28e273ba79074c0bfe1012
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FProcessTask.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FProcessTask.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/ProcessTask.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
	 * Returns the period associated with the process in the in the meta-model as the {@link TimeTrigger}. Note that the {@link ProcessTask} assumes that there is at most
	 * one instance of {@link TimeTrigger} associated with the process in the meta-model.
	public TimeTrigger getTimeTrigger() {
			if (trigger instanceof TimeTrigger) {
				return ((TimeTrigger) trigger);
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
	 * Returns the period associated with the process in the in the meta-model as the {@link PeriodicTrigger}. Note that the {@link ProcessTask} assumes that there is at most
	 * one instance of {@link PeriodicTrigger} associated with the process in the meta-model.
	public PeriodicTrigger getPeriodicTrigger() {
			if (trigger instanceof PeriodicTrigger) {
				return ((PeriodicTrigger) trigger);
@@ -16,7 +16,7 @@
 import cz.cuni.mff.d3s.deeco.model.runtime.api.KnowledgePath;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Parameter;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.ParameterDirection;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger;
 import cz.cuni.mff.d3s.deeco.scheduler.Scheduler;
 
@@ -204,16 +204,16 @@ protected void unregisterTriggers() {
 	}
 
 	/**
-	 * Returns the period associated with the process in the in the meta-model as the {@link PeriodicTrigger}. Note that the {@link ProcessTask} assumes that there is at most
-	 * one instance of {@link PeriodicTrigger} associated with the process in the meta-model.
+	 * Returns the period associated with the process in the in the meta-model as the {@link TimeTrigger}. Note that the {@link ProcessTask} assumes that there is at most
+	 * one instance of {@link TimeTrigger} associated with the process in the meta-model.
 	 * 
 	 * @return Periodic trigger or null no period is associated with the task.
 	 */
 	@Override
-	public PeriodicTrigger getPeriodicTrigger() {
+	public TimeTrigger getTimeTrigger() {
 		for (Trigger trigger : componentProcess.getTriggers()) {
-			if (trigger instanceof PeriodicTrigger) {
-				return ((PeriodicTrigger) trigger);
+			if (trigger instanceof TimeTrigger) {
+				return ((TimeTrigger) trigger);
 			}
 		}
 		
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FProcessTask.java
766558973cad2badb781aebb6f322ac495eb183f
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FTask.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FTask.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/Task.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
	 * Returns the time trigger associated with the task. 
	abstract public TimeTrigger getTimeTrigger();
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
	 * Returns the period associated with the task. 
	 * @return Period in miliseconds or -1 when there is no period associated with the task.
	abstract public PeriodicTrigger getPeriodicTrigger();
@@ -1,6 +1,6 @@
 package cz.cuni.mff.d3s.deeco.task;
 
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger;
 import cz.cuni.mff.d3s.deeco.scheduler.Scheduler;
 
@@ -67,8 +67,7 @@ public void unsetTriggerListener() {
 	}
 
 	/**
-	 * Returns the period associated with the task. 
-	 * @return Period in miliseconds or -1 when there is no period associated with the task.
+	 * Returns the time trigger associated with the task. 
 	 */
-	abstract public PeriodicTrigger getPeriodicTrigger();
+	abstract public TimeTrigger getTimeTrigger();
 }
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Fsrc%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FTask.java
e2ca2ec98f40772bf82b0c396af5a7bd4adea541
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FC1C2C3E1E2E3.xmi
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FC1C2C3E1E2E3.xmi?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/annotations/processor/output/C1C2C3E1E2E3.xmi
    <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="3000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="1000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="2000"/>
    <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="3000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="1000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="2000"/>
@@ -30,7 +30,7 @@
         </knowledgePath>
       </parameters>
     </knowledgeExchange>
-    <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="3000"/>
+    <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="3000"/>
     <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:KnowledgeChangeTrigger">
       <knowledgePath>
         <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeCoordinator"/>
@@ -161,7 +161,7 @@
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="level1"/>
         </knowledgePath>
       </parameters>
-      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="1000"/>
+      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="1000"/>
       <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:KnowledgeChangeTrigger">
         <knowledgePath>
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="level1"/>
@@ -215,7 +215,7 @@
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="level3"/>
         </knowledgePath>
       </parameters>
-      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="2000"/>
+      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="2000"/>
     </componentProcesses>
     <ensembleControllers ensembleDefinition="//@ensembleDefinitions.0"/>
     <ensembleControllers ensembleDefinition="//@ensembleDefinitions.1"/>
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FC1C2C3E1E2E3.xmi
4f16f24ceb26f1254a8b9976c766bcd4f21572b1
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FChildOfCorrectC1.xmi
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FChildOfCorrectC1.xmi?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/annotations/processor/output/ChildOfCorrectC1.xmi
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="2000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="1000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="2000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="1000"/>
@@ -7,7 +7,7 @@
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="x"/>
         </knowledgePath>
       </parameters>
-      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="2000"/>
+      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="2000"/>
     </componentProcesses>
     <componentProcesses method="public static void cz.cuni.mff.d3s.deeco.annotations.processor.input.samples.CorrectC1.process1(java.lang.Integer,java.lang.String,java.lang.Boolean)" name="process1">
       <parameters direction="IN" type="java.lang.Integer">
@@ -27,7 +27,7 @@
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="level1"/>
         </knowledgePath>
       </parameters>
-      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="1000"/>
+      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="1000"/>
       <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:KnowledgeChangeTrigger">
         <knowledgePath>
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="level1"/>
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FChildOfCorrectC1.xmi
274058e5e305a0f2e1ae60aa9399bdd4ff16c70e
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectC1.xmi
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectC1.xmi?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/annotations/processor/output/CorrectC1.xmi
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="1000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="1000"/>
@@ -19,7 +19,7 @@
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="level1"/>
         </knowledgePath>
       </parameters>
-      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="1000"/>
+      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="1000"/>
       <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:KnowledgeChangeTrigger">
         <knowledgePath>
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="level1"/>
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectC1.xmi
def2873c966e6dafd6a62974fdfe69b1f7c92fa2
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectC3.xmi
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectC3.xmi?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/annotations/processor/output/CorrectC3.xmi
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="2000"/>
      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="2000"/>
@@ -14,7 +14,7 @@
           <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeField" name="level3"/>
         </knowledgePath>
       </parameters>
-      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="2000"/>
+      <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="2000"/>
     </componentProcesses>
   </componentInstances>
 </cz.cuni.mff.d3s.deeco.model.runtime:RuntimeMetadata>
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectC3.xmi
8584906cef28844583c922f0e645980acdeee498
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectE1.xmi
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectE1.xmi?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/annotations/processor/output/CorrectE1.xmi
    <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="3000"/>
    <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="3000"/>
@@ -30,7 +30,7 @@
         </knowledgePath>
       </parameters>
     </knowledgeExchange>
-    <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PeriodicTrigger" period="3000"/>
+    <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:TimeTrigger" period="3000"/>
     <triggers xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:KnowledgeChangeTrigger">
       <knowledgePath>
         <nodes xsi:type="cz.cuni.mff.d3s.deeco.model.runtime:PathNodeCoordinator"/>
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fannotations%2Fprocessor%2Foutput%2FCorrectE1.xmi
16c65aa069d5edca3e666aa1752aa73d0bf715ef
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2FRuntimeModelHelper.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2FRuntimeModelHelper.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/model/runtime/RuntimeModelHelper.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
	public static TimeTrigger createPeriodicTrigger(long period) {
		TimeTrigger trigger = factory.createTimeTrigger();
		trigger.setOffset(0);
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
	public static PeriodicTrigger createPeriodicTrigger(long period) {
		PeriodicTrigger trigger = factory.createPeriodicTrigger();
@@ -6,7 +6,7 @@
 import cz.cuni.mff.d3s.deeco.model.runtime.api.ParameterDirection;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNode;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeField;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.meta.RuntimeMetadataFactory;
 
 /**
@@ -60,11 +60,12 @@ public static Parameter createParameter(ParameterDirection direction,
 		return param;
 	}
 
-	public static PeriodicTrigger createPeriodicTrigger(long period) {
+	public static TimeTrigger createPeriodicTrigger(long period) {
 		RuntimeMetadataFactory factory = RuntimeMetadataFactory.eINSTANCE;
-		PeriodicTrigger trigger = factory.createPeriodicTrigger();
+		TimeTrigger trigger = factory.createTimeTrigger();
 
 		trigger.setPeriod(period);
+		trigger.setOffset(0);
 
 		return trigger;
 	}
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2FRuntimeModelHelper.java
35070f4b6489cc04b1d73dc3719a8c8f70fa8dda
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2FSampleRuntimeModel.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2FSampleRuntimeModel.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/model/runtime/SampleRuntimeModel.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
	public TimeTrigger processPeriodicTrigger;
	public TimeTrigger ensemblePeriodicTrigger;
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
	public PeriodicTrigger processPeriodicTrigger;
	public PeriodicTrigger ensemblePeriodicTrigger;
@@ -16,8 +16,8 @@
 import cz.cuni.mff.d3s.deeco.model.runtime.api.ParameterDirection;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNode;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.PathNodeField;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.RuntimeMetadata;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.meta.RuntimeMetadataFactory;
 import cz.cuni.mff.d3s.deeco.task.ParamHolder;
 
@@ -36,14 +36,14 @@ public class SampleRuntimeModel {
 	public ComponentInstance componentInstance;
 	public EnsembleController ensembleController;
 	public ComponentProcess process;
-	public PeriodicTrigger processPeriodicTrigger;
+	public TimeTrigger processPeriodicTrigger;
 	public KnowledgeChangeTrigger processKnowledgeChangeTrigger;
 	public Parameter processParamIn, processParamOut, processParamInOut;
 	
 	public EnsembleDefinition ensembleDefinition;
 	public Condition membershipCondition;
 	public Exchange knowledgeExchange;
-	public PeriodicTrigger ensemblePeriodicTrigger;
+	public TimeTrigger ensemblePeriodicTrigger;
 	public KnowledgeChangeTrigger ensembleKnowledgeChangeTrigger;
 	
 	// It is assumed that xxxParamCoord and xxxParamMember are equal and that membershipParamXXX and exchangeParamXXXIn are equal
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fmodel%2Fruntime%2FSampleRuntimeModel.java
ad6bed06371b383458ad91c5901c2cbffc162fae
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSchedulerTest.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSchedulerTest.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/scheduler/SchedulerTest.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
		TimeTrigger p = mock(TimeTrigger.class);
		when(p.getOffset()).thenReturn(0L);
		when(t.getTimeTrigger()).thenReturn(p);
		TimeTrigger p = mock(TimeTrigger.class);
		when(p.getOffset()).thenReturn(0L);
		when(t.getTimeTrigger()).thenReturn(p);
		TimeTrigger p = mock(TimeTrigger.class);
		when(p.getOffset()).thenReturn(0L);
		when(t.getTimeTrigger()).thenReturn(p);
	
		TimeTrigger p = mock(TimeTrigger.class);
		when(p.getOffset()).thenReturn(0L);
		when(t.getTimeTrigger()).thenReturn(p);
			public TimeTrigger getTimeTrigger() {
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
		PeriodicTrigger p = mock(PeriodicTrigger.class);
		when(t.getPeriodicTrigger()).thenReturn(p);
		PeriodicTrigger p = mock(PeriodicTrigger.class);
		when(t.getPeriodicTrigger()).thenReturn(p);
		PeriodicTrigger p = mock(PeriodicTrigger.class);
		when(t.getPeriodicTrigger()).thenReturn(p);
		PeriodicTrigger p = mock(PeriodicTrigger.class);
		when(t.getPeriodicTrigger()).thenReturn(p);
			public PeriodicTrigger getPeriodicTrigger() {
@@ -7,7 +7,7 @@
 import org.mockito.stubbing.Answer;
 
 import cz.cuni.mff.d3s.deeco.executor.Executor;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger;
 import cz.cuni.mff.d3s.deeco.task.Task;
 import cz.cuni.mff.d3s.deeco.task.TaskTriggerListener;
@@ -44,13 +44,14 @@ public void tearDown() throws Exception{
 	@Test
 	public void testRepeatedExecution() throws InterruptedException{
 		final Task t = mock(Task.class);
-		PeriodicTrigger p = mock(PeriodicTrigger.class);
+		TimeTrigger p = mock(TimeTrigger.class);
 		// Stubbing mocks.
 		// The period is chosen to be 300 millis because the SingleThreadedScheduler 
 		// may not able to spawn a thread and execute it properly in a shorter 
 		// period of time causing a test failure 
 		when(p.getPeriod()).thenReturn(300L);
-		when(t.getPeriodicTrigger()).thenReturn(p);
+		when(p.getOffset()).thenReturn(0L);
+		when(t.getTimeTrigger()).thenReturn(p);
 		doAnswer(new Answer<Object>() {
 			    public Object answer(InvocationOnMock invocation) {
 			        Object[] args = invocation.getArguments();
@@ -85,9 +86,10 @@ public Object answer(InvocationOnMock invocation) {
 	@Test
 	public void testPeriodicTaskScheduledWhenSchedulerStarted() throws InterruptedException {
 		Task t = mock(Task.class);
-		PeriodicTrigger p = mock(PeriodicTrigger.class);
+		TimeTrigger p = mock(TimeTrigger.class);
 		when(p.getPeriod()).thenReturn(11L);
-		when(t.getPeriodicTrigger()).thenReturn(p);
+		when(p.getOffset()).thenReturn(0L);
+		when(t.getTimeTrigger()).thenReturn(p);
 		
 		// WHEN a periodic task is added to a new (stopped) scheduler
 		tested.addTask(t);		
@@ -113,9 +115,11 @@ public void testPeriodicTaskScheduledWhenSchedulerStarted() throws InterruptedEx
 	@Test
 	public void testPeriodicTaskAutomaticallyScheduledWhenAddedToRunningScheduler() throws InterruptedException {
 		Task t = mock(Task.class);
-		PeriodicTrigger p = mock(PeriodicTrigger.class);
+		TimeTrigger p = mock(TimeTrigger.class);
 		when(p.getPeriod()).thenReturn(11L);
-		when(t.getPeriodicTrigger()).thenReturn(p);
+		when(p.getOffset()).thenReturn(0L);
+		when(t.getTimeTrigger()).thenReturn(p);
+	
 		tested.start();
 
 		// WHEN a task is added to a running scheduler
@@ -127,9 +131,10 @@ public void testPeriodicTaskAutomaticallyScheduledWhenAddedToRunningScheduler()
 	@Test
 	public void testPeriodicTaskNotScheduledWhenRemovedRunningScheduler() throws InterruptedException {
 		Task t = mock(Task.class);
-		PeriodicTrigger p = mock(PeriodicTrigger.class);
+		TimeTrigger p = mock(TimeTrigger.class);
 		when(p.getPeriod()).thenReturn(11L);
-		when(t.getPeriodicTrigger()).thenReturn(p);
+		when(p.getOffset()).thenReturn(0L);
+		when(t.getTimeTrigger()).thenReturn(p);
 		
 		tested.addTask(t);
 		tested.start();
@@ -241,7 +246,7 @@ private Task createTriggeredTask() {
 		
 		Task t = new Task(tested) {	
 			@Override
-			public PeriodicTrigger getPeriodicTrigger() {
+			public TimeTrigger getTimeTrigger() {
 				return null;
 			}
 			
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSchedulerTest.java
8b2285aeed394bf52e56b9a17e4fde095de39579
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSingleThreadedSchedulerTest.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSingleThreadedSchedulerTest.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/scheduler/SingleThreadedSchedulerTest.java
import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
		TimeTrigger trigger = mock(TimeTrigger.class);
		when(trigger.getOffset()).thenReturn(0L);
		when(t.getTimeTrigger()).thenReturn(trigger);
import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
		PeriodicTrigger trigger = mock(PeriodicTrigger.class);
		when(t.getPeriodicTrigger()).thenReturn(trigger);
@@ -9,7 +9,7 @@
 import org.junit.Test;
 
 import cz.cuni.mff.d3s.deeco.executor.Executor;
-import cz.cuni.mff.d3s.deeco.model.runtime.api.PeriodicTrigger;
+import cz.cuni.mff.d3s.deeco.model.runtime.api.TimeTrigger;
 import cz.cuni.mff.d3s.deeco.task.Task;
 
 /**
@@ -75,13 +75,14 @@ public void testDieOnEmptyQueueWhenNotNewTasksMayBeScheduled() throws Interrupte
 	public void testRemovesCancelledEvents() throws InterruptedException {
 		// Creating mocks of the task and the trigger 
 		Task t= mock(Task.class);
-		PeriodicTrigger trigger = mock(PeriodicTrigger.class);
+		TimeTrigger trigger = mock(TimeTrigger.class);
 
 		// And stubbing their behavior
 		// Task period has to be big. We don't need to run
 		// the task too often since we don't need it
 		when(trigger.getPeriod()).thenReturn(20000L);  
-		when(t.getPeriodicTrigger()).thenReturn(trigger);
+		when(trigger.getOffset()).thenReturn(0L);
+		when(t.getTimeTrigger()).thenReturn(trigger);
 		
 		tested.addTask(t);
 		tested.start();
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Fscheduler%2FSingleThreadedSchedulerTest.java
e4a59c117465ca13882564a37a77162b2fe0726d
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FEnsembleTaskTest.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FEnsembleTaskTest.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/task/EnsembleTaskTest.java
		long period = task.getTimeTrigger().getPeriod();
		long period = task.getPeriodicTrigger().getPeriod();
@@ -169,7 +169,7 @@ public ValueSet answer(InvocationOnMock invocation) {
 	public void testSchedulingPeriod() {
 		// GIVEN an EnsembleTask initialized with an InstanceEnsemblingController
 		// WHEN getSchedulingPeriod is called
-		long period = task.getPeriodicTrigger().getPeriod();
+		long period = task.getTimeTrigger().getPeriod();
 		// THEN it returns the period specified in the model
 		// THEN it returns the period specified in the model
 		assertEquals(model.ensemblePeriodicTrigger.getPeriod(), period);
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FEnsembleTaskTest.java
5fcf2da266f652b17e105808fecc2f29d7b49b5e
modified
https://github.com/d3scomp/JDEECo/blob/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FProcessTaskTest.java
https://api.github.com/repos/d3scomp/JDEECo/contents/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FProcessTaskTest.java?ref=cddfa1a013f7c6f02e6e496b211ac6da552641e7
jdeeco-core/test/cz/cuni/mff/d3s/deeco/task/ProcessTaskTest.java
		long period = task.getTimeTrigger().getPeriod();
		long period = task.getPeriodicTrigger().getPeriod();
@@ -97,7 +97,7 @@ public ValueSet answer(InvocationOnMock invocation) {
 	public void testSchedulingPeriod() {
 		// GIVEN a ProcessTask initialized with an ComponentProcess
 		// WHEN getSchedulingPeriod is called
-		long period = task.getPeriodicTrigger().getPeriod();
+		long period = task.getTimeTrigger().getPeriod();
 		// THEN it returns the period specified in the model
 		assertEquals(model.processPeriodicTrigger.getPeriod(), period);
 	}
https://github.com/d3scomp/JDEECo/raw/cddfa1a013f7c6f02e6e496b211ac6da552641e7/jdeeco-core%2Ftest%2Fcz%2Fcuni%2Fmff%2Fd3s%2Fdeeco%2Ftask%2FProcessTaskTest.java
5124fad8e4219dfaa31a0479ef6ee744579b684c
modified
d3scomp$jdeeco
TimeTriggerImpl timeTrigger = new TimeTriggerImpl();
		return timeTrigger;
TimeTrigger
TimeTrigger createTimeTrigger()
PeriodicTriggerImpl periodicTrigger = new PeriodicTriggerImpl();
		return periodicTrigger;
PeriodicTrigger
PeriodicTrigger createPeriodicTrigger()