|
@@ -49,6 +49,44 @@ Boolean function is_nominal_subtype(metamodel : Element, subclass : String, supe
|
|
|
|
|
|
return False
|
|
|
|
|
|
+Element function precompute_cardinalities(model : Element):
|
|
|
+ Integer slc
|
|
|
+ Integer suc
|
|
|
+ Integer tlc
|
|
|
+ Integer tuc
|
|
|
+ String key
|
|
|
+ Element tmp_dict
|
|
|
+ Element cardinalities
|
|
|
+ Element keys
|
|
|
+ Element metamodel
|
|
|
+
|
|
|
+ metamodel = model["metamodel"]
|
|
|
+ keys = allInstances(metamodel, "Association")
|
|
|
+
|
|
|
+ cardinalities = create_node()
|
|
|
+ while (0 < list_len(keys)):
|
|
|
+ key = set_pop(keys)
|
|
|
+ if (is_edge(model["model"][key])):
|
|
|
+ tmp_dict = create_node()
|
|
|
+ slc = read_attribute(metamodel, key, "source_lower_cardinality")
|
|
|
+ suc = read_attribute(metamodel, key, "source_upper_cardinality")
|
|
|
+ tlc = read_attribute(metamodel, key, "target_lower_cardinality")
|
|
|
+ tuc = read_attribute(metamodel, key, "target_upper_cardinality")
|
|
|
+
|
|
|
+ if (element_neq(slc, read_root())):
|
|
|
+ dict_add(tmp_dict, "slc", slc)
|
|
|
+ if (element_neq(suc, read_root())):
|
|
|
+ dict_add(tmp_dict, "suc", suc)
|
|
|
+ if (element_neq(tlc, read_root())):
|
|
|
+ dict_add(tmp_dict, "tlc", tlc)
|
|
|
+ if (element_neq(tuc, read_root())):
|
|
|
+ dict_add(tmp_dict, "tuc", tuc)
|
|
|
+
|
|
|
+ if (list_len(tmp_dict) > 0):
|
|
|
+ dict_add(cardinalities, key, tmp_dict)
|
|
|
+
|
|
|
+ return cardinalities
|
|
|
+
|
|
|
String function conformance_scd(model : Element):
|
|
|
// Initialization
|
|
|
Element keys
|
|
@@ -65,7 +103,7 @@ String function conformance_scd(model : Element):
|
|
|
Element cardinalities
|
|
|
Element scd
|
|
|
Integer instances
|
|
|
-
|
|
|
+ String type_name
|
|
|
Element spo_cache
|
|
|
Element spi_cache
|
|
|
|
|
@@ -76,39 +114,11 @@ String function conformance_scd(model : Element):
|
|
|
scd = import_node("models/SimpleClassDiagrams")
|
|
|
metamodel = model["metamodel"]
|
|
|
typing = model["type_mapping"]
|
|
|
- cardinalities = create_node()
|
|
|
+
|
|
|
|
|
|
// Create dictionary with all associations and allowed cardinalities
|
|
|
if (list_len(model["model"]) > 0):
|
|
|
- Integer slc
|
|
|
- Integer suc
|
|
|
- Integer tlc
|
|
|
- Integer tuc
|
|
|
- String key
|
|
|
- Element tmp_dict
|
|
|
- String type_name
|
|
|
-
|
|
|
- keys = allInstances(metamodel, "Association")
|
|
|
- while (0 < list_len(keys)):
|
|
|
- key = set_pop(keys)
|
|
|
- tmp_dict = create_node()
|
|
|
- if (is_edge(model["model"][key])):
|
|
|
- slc = read_attribute(metamodel, key, "source_lower_cardinality")
|
|
|
- suc = read_attribute(metamodel, key, "source_upper_cardinality")
|
|
|
- tlc = read_attribute(metamodel, key, "target_lower_cardinality")
|
|
|
- tuc = read_attribute(metamodel, key, "target_upper_cardinality")
|
|
|
-
|
|
|
- if (element_neq(slc, read_root())):
|
|
|
- dict_add(tmp_dict, "slc", slc)
|
|
|
- if (element_neq(suc, read_root())):
|
|
|
- dict_add(tmp_dict, "suc", suc)
|
|
|
- if (element_neq(tlc, read_root())):
|
|
|
- dict_add(tmp_dict, "tlc", tlc)
|
|
|
- if (element_neq(tuc, read_root())):
|
|
|
- dict_add(tmp_dict, "tuc", tuc)
|
|
|
-
|
|
|
- if (list_len(tmp_dict) > 0):
|
|
|
- dict_add(cardinalities, key, tmp_dict)
|
|
|
+ cardinalities = precompute_cardinalities(model)
|
|
|
|
|
|
// Iterate over each element of the model, finding out whether everything is fine
|
|
|
keys = dict_keys(model["model"])
|