|
@@ -5,6 +5,7 @@ def get_superclasses(a, b, **remainder):
|
|
|
b['value'], = yield [("RV", [b['id']])]
|
|
b['value'], = yield [("RV", [b['id']])]
|
|
|
model_dict, tm_dict = yield [("RD", [a['id'], "model"]),
|
|
model_dict, tm_dict = yield [("RD", [a['id'], "model"]),
|
|
|
("RD", [a['id'], "type_mapping"])]
|
|
("RD", [a['id'], "type_mapping"])]
|
|
|
|
|
+ tm_dict, = yield [("RD", [tm_dict, "root"])]
|
|
|
|
|
|
|
|
worklist = set([b['value']])
|
|
worklist = set([b['value']])
|
|
|
found = set([])
|
|
found = set([])
|
|
@@ -96,16 +97,16 @@ def reverseKeyLookup(a, b, **remainder):
|
|
|
yield [("RETURN", [{'value': ""}])]
|
|
yield [("RETURN", [{'value': ""}])]
|
|
|
|
|
|
|
|
options = set(edges_out) & set(edges_in)
|
|
options = set(edges_out) & set(edges_in)
|
|
|
- if options:
|
|
|
|
|
- # Select one option randomly
|
|
|
|
|
|
|
+ # Select one option randomly
|
|
|
|
|
+ while options:
|
|
|
edge = options.pop()
|
|
edge = options.pop()
|
|
|
out_edges, = yield [("RO", [edge])]
|
|
out_edges, = yield [("RO", [edge])]
|
|
|
# Select one option randomly
|
|
# Select one option randomly
|
|
|
- out_edge = out_edges.pop()
|
|
|
|
|
- e, = yield [("RE", [out_edge])]
|
|
|
|
|
- yield [("RETURN", [{'id': e[1]}])]
|
|
|
|
|
- else:
|
|
|
|
|
- yield [("RETURN", [{'value': ""}])]
|
|
|
|
|
|
|
+ if out_edges:
|
|
|
|
|
+ out_edge = out_edges.pop()
|
|
|
|
|
+ e, = yield [("RE", [out_edge])]
|
|
|
|
|
+ yield [("RETURN", [{'id': e[1]}])]
|
|
|
|
|
+ yield [("RETURN", [{'value': ""}])]
|
|
|
|
|
|
|
|
def instantiated_name(a, b, **remainder):
|
|
def instantiated_name(a, b, **remainder):
|
|
|
if "id" not in a:
|
|
if "id" not in a:
|
|
@@ -311,12 +312,13 @@ def list_pop_final(a, **remainder):
|
|
|
yield [("RETURN", [{'id': result}])]
|
|
yield [("RETURN", [{'id': result}])]
|
|
|
|
|
|
|
|
def instantiate_node(a, b, c, **remainder):
|
|
def instantiate_node(a, b, c, **remainder):
|
|
|
|
|
+ if "value" not in b:
|
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
|
+
|
|
|
if "value" not in c:
|
|
if "value" not in c:
|
|
|
c['value'], = yield [("RV", [c['id']])]
|
|
c['value'], = yield [("RV", [c['id']])]
|
|
|
- if "id" not in b:
|
|
|
|
|
- b['id'], = yield [("CNV", [b['value']])]
|
|
|
|
|
-
|
|
|
|
|
- node, dict_entry, typing = \
|
|
|
|
|
|
|
+
|
|
|
|
|
+ node, dict_entry, tm = \
|
|
|
yield [("CN", []),
|
|
yield [("CN", []),
|
|
|
("RD", [a['id'], "model"]),
|
|
("RD", [a['id'], "model"]),
|
|
|
("RD", [a['id'], "type_mapping"]),
|
|
("RD", [a['id'], "type_mapping"]),
|
|
@@ -329,8 +331,19 @@ def instantiate_node(a, b, c, **remainder):
|
|
|
name = c['value']
|
|
name = c['value']
|
|
|
name_node = c
|
|
name_node = c
|
|
|
|
|
|
|
|
- yield [("CD", [dict_entry, name, node])]
|
|
|
|
|
- yield [("CD", [typing, name, b['id']])]
|
|
|
|
|
|
|
+ _, root = yield [("CD", [dict_entry, name, node]),
|
|
|
|
|
+ ("RD", [tm, "root"])]
|
|
|
|
|
+
|
|
|
|
|
+ # Create new type links
|
|
|
|
|
+ type_elem, instance_elem = yield [("CNV", [b['value']]), ("CNV", [name])]
|
|
|
|
|
+ type_link, = yield [("CE", [root, type_elem])]
|
|
|
|
|
+ instance_link, = yield [("CE", [type_link, instance_elem])]
|
|
|
|
|
+
|
|
|
|
|
+ # Add them to the model
|
|
|
|
|
+ yield [("CD", [tm, str(type_elem), type_elem]),
|
|
|
|
|
+ ("CD", [tm, str(instance_elem), instance_elem]),
|
|
|
|
|
+ ("CD", [tm, str(type_link), type_link]),
|
|
|
|
|
+ ("CD", [tm, str(instance_link), instance_link])]
|
|
|
|
|
|
|
|
yield [("RETURN", [name_node])]
|
|
yield [("RETURN", [name_node])]
|
|
|
|
|
|
|
@@ -392,6 +405,7 @@ def read_type(a, b, **remainder):
|
|
|
b['value'], = yield [("RV", [b['id']])]
|
|
b['value'], = yield [("RV", [b['id']])]
|
|
|
|
|
|
|
|
model, type_mapping, metamodel = yield [("RD", [a['id'], 'model']), ("RD", [a['id'], 'type_mapping']), ("RD", [a['id'], 'metamodel'])]
|
|
model, type_mapping, metamodel = yield [("RD", [a['id'], 'model']), ("RD", [a['id'], 'type_mapping']), ("RD", [a['id'], 'metamodel'])]
|
|
|
|
|
+ type_mapping, = yield [("RD", [type_mapping, "root"])]
|
|
|
metamodel, in_model, type_value = yield [("RD", [metamodel, 'model']), ("RD", [model, b['value']]), ("RD", [type_mapping, b['value']])]
|
|
metamodel, in_model, type_value = yield [("RD", [metamodel, 'model']), ("RD", [model, b['value']]), ("RD", [type_mapping, b['value']])]
|
|
|
|
|
|
|
|
if in_model is None:
|
|
if in_model is None:
|
|
@@ -405,3 +419,31 @@ def read_type(a, b, **remainder):
|
|
|
yield [("RETURN", [{'value': ""}])]
|
|
yield [("RETURN", [{'value': ""}])]
|
|
|
else:
|
|
else:
|
|
|
yield [("RETURN", [{'value': type_value}])]
|
|
yield [("RETURN", [{'value': type_value}])]
|
|
|
|
|
+
|
|
|
|
|
+def retype(a, b, c, **remainder):
|
|
|
|
|
+ if "value" not in b:
|
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
|
+ if "value" not in c:
|
|
|
|
|
+ c['value'], = yield [("RV", [c['id']])]
|
|
|
|
|
+
|
|
|
|
|
+ tm, = yield [("RD", [a["id"], "type_mapping"])]
|
|
|
|
|
+ root, = yield [("RD", [tm, "root"])]
|
|
|
|
|
+
|
|
|
|
|
+ # remove_type
|
|
|
|
|
+ val, = yield [("RD", [root, b["value"]])]
|
|
|
|
|
+ if val is not None:
|
|
|
|
|
+ # Key exists, so remove
|
|
|
|
|
+ yield [("DN", [val])]
|
|
|
|
|
+
|
|
|
|
|
+ # Create new type links
|
|
|
|
|
+ type_elem, instance_elem = yield [("CNV", [c['value']]), ("CNV", [b['value']])]
|
|
|
|
|
+ type_link, = yield [("CE", [root, type_elem])]
|
|
|
|
|
+ instance_link, = yield [("CE", [type_link, instance_elem])]
|
|
|
|
|
+
|
|
|
|
|
+ # Add them to the model
|
|
|
|
|
+ yield [("CD", [tm, str(type_elem), type_elem]),
|
|
|
|
|
+ ("CD", [tm, str(instance_elem), instance_elem]),
|
|
|
|
|
+ ("CD", [tm, str(type_link), type_link]),
|
|
|
|
|
+ ("CD", [tm, str(instance_link), instance_link])]
|
|
|
|
|
+
|
|
|
|
|
+ yield [("RETURN", [None])]
|