|
@@ -602,5 +602,28 @@ Element function model_copy(src_model : Element):
|
|
|
return dst_model!
|
|
|
|
|
|
Element function model_retype_on_name(model : Element, new_MM : Element, operation : String, name : String):
|
|
|
- // TODO
|
|
|
+ String key
|
|
|
+ String type
|
|
|
+ Element keys
|
|
|
+ Integer length
|
|
|
+
|
|
|
+ keys = dict_keys(model["model"])
|
|
|
+ length = string_len(name)
|
|
|
+
|
|
|
+ while (read_nr_out(keys) > 0):
|
|
|
+ key = set_pop(keys)
|
|
|
+ type = reverseKeyLookup(model["metamodel"]["model"], dict_read_node(model["type_mapping"], model["model"][key]))
|
|
|
+
|
|
|
+ if (operation == "+"):
|
|
|
+ // Keep all, but augment typename
|
|
|
+ dict_delete_node(model["type_mapping"], model["model"][key])
|
|
|
+ dict_add(model["type_mapping"], model["model"][key], model["metamodel"]["model"][name + type])
|
|
|
+ elif (operation == "-"):
|
|
|
+ // Keep only if typename beginning matches and remove from typename
|
|
|
+ if (string_startswith(type, name)):
|
|
|
+ dict_delete_node(model["type_mapping"], model["model"][key])
|
|
|
+ dict_add(model["type_mapping"], model["model"][key], model["metamodel"]["model"][string_substr(type, length, string_len(type))])
|
|
|
+ else:
|
|
|
+ model_delete_element(model, key)
|
|
|
+
|
|
|
return model!
|