Просмотр исходного кода

Added simple test SCCD model which invokes transformation and operation

Yentl Van Tendeloo 8 лет назад
Родитель
Сommit
50ccfd3346
2 измененных файлов с 106 добавлено и 0 удалено
  1. 7 0
      interface/HUTN/includes/core_algorithm.alh
  2. 99 0
      models/test_operations_in_SCCD.mvc

+ 7 - 0
interface/HUTN/includes/core_algorithm.alh

@@ -1,4 +1,11 @@
 Void function initialize_core()
 Void function new_task()
 String function get_service_id(name : String)
+
+Element function merge_models(models_dict : Element, operation_id : String)
+Element function split_model(model : Element, metamodels_dict : Element)
+Element function get_model(model_name : String, metamodel_name : String)
+Void function store_model(model_name : String, metamodel_name : String, model : Element)
+
+// This should be removed, as it allows everyone to alter the core...
 Element core

+ 99 - 0
models/test_operations_in_SCCD.mvc

@@ -0,0 +1,99 @@
+include "primitives.alh"
+include "core_algorithm.alh"
+
+Diagram dynamic_trafficlight {
+    name = "Dynamic Traffic Light"
+    author = "Yentl Van Tendeloo"
+}
+
+Class manager {
+    name = "Manager"
+    default = True
+    constructor_body = $
+            Void function constructor(attributes : Element, parameters : Element):
+                return !
+        $
+
+    {behaviour} CompositeState manager_main {
+        name = "main"
+        isInitial = True
+        {composite_children} BasicState manager_main_init {
+            name = "init"
+            isInitial = True
+        }
+        {composite_children} BasicState manager_main_did_transform {
+            name = "MT OK"
+            isInitial = False
+        }
+        {composite_children} BasicState manager_main_did_actionlanguage {
+            name = "AL OK"
+            isInitial = False
+        }
+    }
+}
+
+transition (manager_main_init, manager_main_did_transform) {
+    name = "model transformation"
+
+    script = $
+            Void function script(attributes : Element, parameters : Element):
+                Element m
+                Element models
+
+                // Merge models
+                models = dict_create()
+                dict_add(models, "A", "ModelA")
+                dict_add(models, "B", "ModelB")
+                m = merge_models(models)
+
+                // Do transformation
+                transform(m, get_model("TransformY"))
+
+                // Split up the result
+                Element metamodels
+                Element split
+                metamodels = dict_create()
+                dict_add(models, "C", "MetamodelC")
+                dict_add(models, "B", "MetamodelB")
+                split = split_models(m, metamodels)
+
+                // Store the results
+                store_model("ModelC", "MetamodelC", split["C"])
+                store_model("ModelB", "MetamodelB", split["B"])
+                return!
+        $
+}
+
+transition (manager_main_did_transform, manager_main_did_actionlanguage) {
+    name = "action language"
+
+    script = $
+            Void function script(attributes : Element, parameters : Element):
+                Element m
+                Element models
+
+                // Merge models
+                models = dict_create()
+                dict_add(models, "C", "ModelC")
+                dict_add(models, "B", "ModelB")
+                m = merge_models(models)
+
+                // Do transformation
+                Element func
+                func = get_func_AL_model(get_model("OperationZ"))
+                func(m)
+
+                // Split up the result
+                Element metamodels
+                Element split
+                metamodels = dict_create()
+                dict_add(models, "A", "MetamodelA")
+                dict_add(models, "B", "MetamodelB")
+                split = split_models(m, metamodels)
+
+                // Store the results
+                store_model("ModelA", "MetamodelA", split["A"])
+                store_model("ModelB", "MetamodelB", split["B"])
+                return!
+        $
+}