|
@@ -171,33 +171,33 @@ Void function rewrite(host_model : Element, RHS_model : Element, mapping : Eleme
|
|
|
String dst
|
|
|
Element new_mapping
|
|
|
String new_name
|
|
|
+ Element RHS_map
|
|
|
+ String tmp
|
|
|
|
|
|
LHS_labels = dict_keys(mapping)
|
|
|
RHS_labels = create_node()
|
|
|
+ RHS_map = create_node()
|
|
|
|
|
|
RHS_elements = allInstances(RHS_model, "Post_Element")
|
|
|
while (read_nr_out(RHS_elements) > 0):
|
|
|
- set_add(RHS_labels, read_attribute(RHS_model, set_pop(RHS_elements), "label"))
|
|
|
+ tmp = set_pop(RHS_elements)
|
|
|
+ label = read_attribute(RHS_model, tmp, "label")
|
|
|
+ set_add(RHS_labels, label)
|
|
|
+ dict_add(RHS_map, label, tmp)
|
|
|
|
|
|
remaining = set_overlap(LHS_labels, RHS_labels)
|
|
|
while (read_nr_out(remaining) > 0):
|
|
|
elem = set_pop(remaining)
|
|
|
set_remove(LHS_labels, elem)
|
|
|
set_remove(RHS_labels, elem)
|
|
|
- log("LHS labels: " + set_to_string(LHS_labels))
|
|
|
- log("RHS labels: " + set_to_string(RHS_labels))
|
|
|
|
|
|
labels_to_remove = LHS_labels
|
|
|
labels_to_add = set_to_list(RHS_labels)
|
|
|
- log("Labels to add: " + dict_to_string(labels_to_add))
|
|
|
- log("Labels to remove: " + set_to_string(labels_to_remove))
|
|
|
|
|
|
new_mapping = dict_copy(mapping)
|
|
|
while (read_nr_out(labels_to_remove) > 0):
|
|
|
// Remove the elements linked to these labels
|
|
|
label = set_pop(labels_to_remove)
|
|
|
- log("Remove element linked to label " + label)
|
|
|
- log(" --> " + cast_v2s(mapping[label]))
|
|
|
model_delete_element(host_model, mapping[label])
|
|
|
dict_delete(new_mapping, label)
|
|
|
|
|
@@ -207,8 +207,8 @@ Void function rewrite(host_model : Element, RHS_model : Element, mapping : Eleme
|
|
|
log("Add element linked to label " + label)
|
|
|
if (is_edge(RHS_model["model"][mapping[label]])):
|
|
|
// Edge
|
|
|
- src = read_attribute(RHS_model, reverseKeyLookup(RHS_model["model"], read_edge_src(RHS_model["model"][mapping[label]])), "label")
|
|
|
- dst = read_attribute(RHS_model, reverseKeyLookup(RHS_model["model"], read_edge_dst(RHS_model["model"][mapping[label]])), "label")
|
|
|
+ src = read_attribute(RHS_model, reverseKeyLookup(RHS_model["model"], read_edge_src(RHS_model["model"][RHS_map[label]])), "label")
|
|
|
+ dst = read_attribute(RHS_model, reverseKeyLookup(RHS_model["model"], read_edge_dst(RHS_model["model"][RHS_map[label]])), "label")
|
|
|
// First check whether both source and destination are already created
|
|
|
if (bool_and(dict_in(new_mapping, src), dict_in(new_mapping, dst))):
|
|
|
// Both are present, so we can make the link
|
|
@@ -222,8 +222,9 @@ Void function rewrite(host_model : Element, RHS_model : Element, mapping : Eleme
|
|
|
else:
|
|
|
// Node
|
|
|
// Create the node and add it
|
|
|
- typename = reverseKeyLookup(RHS_model["metamodel"]["model"], dict_read_node(RHS_model["type_mapping"], RHS_model["model"][mapping[label]]))
|
|
|
+ typename = reverseKeyLookup(RHS_model["metamodel"]["model"], dict_read_node(RHS_model["type_mapping"], RHS_model["model"][RHS_map[label]]))
|
|
|
original_typename = string_substr(typename, 5, string_len(typename))
|
|
|
+ log("Instantiate type " + original_typename)
|
|
|
new_name = instantiate_node(host_model, original_typename, "")
|
|
|
dict_add(new_mapping, label, new_name)
|
|
|
|