Parcourir la source

model_join and model_split retain ID as much as possible

Yentl Van Tendeloo il y a 8 ans
Parent
commit
e2a65b16f3
3 fichiers modifiés avec 46 ajouts et 14 suppressions
  1. 14 6
      bootstrap/model_management.alc
  2. 20 5
      interface/graphical/main.py
  3. 12 3
      models/CBD_mapper.mvc

+ 14 - 6
bootstrap/model_management.alc

@@ -176,18 +176,20 @@ Element function model_join(models : Element, metamodel : Element, tracability_m
 			key = set_pop(keys)
 			type = read_type(model, key)
 
+			new_name = retyping_key + key
+
 			if (is_edge(model["model"][key])):
 				src = cast_id2s(read_edge_src(model["model"][key]))
 				dst = cast_id2s(read_edge_dst(model["model"][key]))
 				if (bool_and(dict_in(elem_map, src), dict_in(elem_map, dst))):
-					new_name = instantiate_link(new_model, retyping_key + type, "", elem_map[src], elem_map[dst])
+					new_name = instantiate_link(new_model, retyping_key + type, new_name, elem_map[src], elem_map[dst])
 				else:
 					set_add(second_keys, key)
 					new_name = ""
 			elif (has_value(model["model"][key])):
-				new_name = instantiate_value(new_model, retyping_key + type, "", model["model"][key])
+				new_name = instantiate_value(new_model, retyping_key + type, new_name, model["model"][key])
 			else:
-				new_name = instantiate_node(new_model, retyping_key + type, "")
+				new_name = instantiate_node(new_model, retyping_key + type, new_name)
 
 			if (new_name != ""):
 				// Add the new name to a map which registers the mapping to the new name
@@ -253,6 +255,7 @@ Element function model_split(merged_model : Element, models : Element, tracabili
 	String link
 	String src_name
 	String dst_name
+	String new_name
 
 	result = create_node()
 	tracability_model = instantiate_model(import_node("models/Tracability"))
@@ -306,6 +309,11 @@ Element function model_split(merged_model : Element, models : Element, tracabili
 						set_add(second_keys, key)
 		else:
 			retyping_key = splitted[0]
+			if (read_nr_out(string_split(key, "/")) > 1):
+				new_name = list_read(string_split(key, "/"), 1)
+			else:
+				new_name = key
+			log("Create element " + new_name)
 
 			if (dict_in(result, retyping_key)):
 				original_type = splitted[1]
@@ -320,7 +328,7 @@ Element function model_split(merged_model : Element, models : Element, tracabili
 						// Though we first check the model to which it was mapped, as this should be the same as we have now
 						if (bool_and(dict_in(result[retyping_key]["model"], mapping[src]), dict_in(result[retyping_key]["model"], mapping[dst]))):
 							// The matching worked fine
-							dict_add_fast(mapping, key, instantiate_link(result[retyping_key], original_type, key, mapping[src], mapping[dst]))
+							dict_add_fast(mapping, key, instantiate_link(result[retyping_key], original_type, new_name, mapping[src], mapping[dst]))
 						else:
 							log("ERROR mapping: source/target mapped to model, but not found in expected model; ignoring")
 					else:
@@ -329,11 +337,11 @@ Element function model_split(merged_model : Element, models : Element, tracabili
 
 				elif (has_value(elem)):
 					// Has a value, so copy that as well
-					dict_add_fast(mapping, key, instantiate_value(result[retyping_key], original_type, key, elem))
+					dict_add_fast(mapping, key, instantiate_value(result[retyping_key], original_type, new_name, elem))
 
 				else:
 					// Is a node
-					dict_add_fast(mapping, key, instantiate_node(result[retyping_key], original_type, key))
+					dict_add_fast(mapping, key, instantiate_node(result[retyping_key], original_type, new_name))
 
 		if (read_nr_out(keys) == 0):
 			keys = second_keys

+ 20 - 5
interface/graphical/main.py

@@ -261,16 +261,31 @@ class Window(object):
 
     def create_element(self, t):
         def create_elem():
-            instantiate(self.selected_model.get(), t)
+            element_id = instantiate(self.selected_model.get(), t)
+            print("Created new element " + str(element_id))
+            elements = self.render_model()
+            for f in elements:
+                print("ELEM " + str(f))
+                if "__asid" in f:
+                    print("Check element " + str(f["__asid"]))
+                    if f["__asid"] == element_id:
+                        print("Found element!")
+                        attr_assign(rendered_formula(self.selected_model.get(), self.selected_mapper.get()), f["id"], "x", 100)
+                        attr_assign(rendered_formula(self.selected_model.get(), self.selected_mapper.get()), f["id"], "y", 100)
+
+
+            print("Rerender")
             self.render_model()
+            print("DONE")
+
         return create_elem
 
     def render_model(self):
-        rendered = model_render(self.selected_model.get(), self.selected_mapper.get())
-
-        #TODO visualize rendered model
         import json
-        self.visualize(json.loads(rendered))
+        rendered = json.loads(model_render(self.selected_model.get(), self.selected_mapper.get()))
+        self.visualize(rendered)
+
+        return rendered
 
     def open_model(self):
         available_mappers = self.read_available_mappers(self.selected_model.get())

+ 12 - 3
models/CBD_mapper.mvc

@@ -27,7 +27,10 @@ Composite schedule {
                 value___asid = $
                     String function value(model : Element, name : String, mapping : Element):
                         // Update the mapping!
-                        return mapping["0"]!
+                        if (read_nr_out(string_split(mapping["0"], "/")) > 1):
+                            return list_read(string_split(mapping["0"], "/"), 1)!
+                        else:
+                            return mapping["0"]!
                     $
                 value_x = $
                     Integer function value(model : Element, name : String, mapping : Element):
@@ -69,7 +72,10 @@ Composite schedule {
                 label = "1"
                 value___asid = $
                     String function value(model : Element, name : String, mapping : Element):
-                        return mapping["0"]!
+                        if (read_nr_out(string_split(mapping["0"], "/")) > 1):
+                            return list_read(string_split(mapping["0"], "/"), 1)!
+                        else:
+                            return mapping["0"]!
                     $
                 value_x = $
                     Integer function value(model : Element, name : String, mapping : Element):
@@ -239,7 +245,10 @@ Composite schedule {
                 label = "7"
                 value___asid = $
                     String function value(model : Element, name : String, mapping : Element):
-                        return mapping["2"]!
+                        if (read_nr_out(string_split(mapping["2"], "/")) > 1):
+                            return list_read(string_split(mapping["2"], "/"), 1)!
+                        else:
+                            return mapping["2"]!
                     $
                 value_x = $
                     Integer function value(model : Element, name : String, mapping : Element):