Browse Source

Reimplement reverseNameLookup and fixed bug in cardinality checking of Associations

Yentl Van Tendeloo 9 years ago
parent
commit
d15e2182fe

+ 6 - 6
bootstrap/conformance_scd.alc

@@ -129,10 +129,10 @@ String function conformance_scd(model : Element):
 			check_type = set_pop(check_list)
 			log("Lookup!")
 			log(cast_e2s(check_type))
-			log(cast_e2s(reverseNameLookup(model, check_type)))
-			log(cast_e2s(reverseNameLookup(metamodel, check_type)))
-			lower_val = read_attribute(metamodel, reverseNameLookup(metamodel, check_type), "target_lower_cardinality")
-			upper_val = read_attribute(metamodel, reverseNameLookup(metamodel, check_type), "target_upper_cardinality")
+			log(cast_e2s(reverseKeyLookup(model["model"], check_type)))
+			log(cast_e2s(reverseKeyLookup(metamodel["model"], check_type)))
+			lower_val = read_attribute(metamodel, reverseKeyLookup(metamodel["model"], check_type), "target_lower_cardinality")
+			upper_val = read_attribute(metamodel, reverseKeyLookup(metamodel["model"], check_type), "target_upper_cardinality")
 			log("Look up " + cast_e2s(element))
 			log("   " + cast_e2s(check_type))
 			instances = list_len(allIncomingAssociationInstances(model, element, check_type))
@@ -152,8 +152,8 @@ String function conformance_scd(model : Element):
 			Integer lower_val
 			Integer upper_val
 			check_type = set_pop(check_list)
-			lower_val = read_attribute(metamodel, reverseNameLookup(metamodel, check_type), "source_lower_cardinality")
-			upper_val = read_attribute(metamodel, reverseNameLookup(metamodel, check_type), "source_upper_cardinality")
+			lower_val = read_attribute(metamodel, reverseKeyLookup(metamodel["model"], check_type), "source_lower_cardinality")
+			upper_val = read_attribute(metamodel, reverseKeyLookup(metamodel["model"], check_type), "source_upper_cardinality")
 			instances = list_len(allOutgoingAssociationInstances(model, element, check_type))
 			if (element_neq(lower_val, read_root())):
 				// A lower multiplicity was defined at the source

+ 0 - 2
bootstrap/modelling.alc

@@ -116,10 +116,8 @@ Element function get_superclasses(model : Element, elem : Element):
 
 	// Read out all outgoing edges
 	num_edges = read_nr_out(elem)
-	log(cast_i2s(num_edges))
 	while (i < num_edges):
 		edge = read_out(elem, i)
-		log(cast_e2s(edge))
 		if (element_eq(dict_read_node(model["type_mapping"], edge), model["inheritance"])):
 			create_edge(result, read_edge_dst(edge))
 		i = i + 1

+ 13 - 9
bootstrap/object_operations.alc

@@ -37,6 +37,7 @@ Element function allPossibleIncoming(model : Element, target : String):
 	result = create_node()
 	metamodel = model["metamodel"]
 	all_elems = dict_keys(metamodel["model"])
+	log("Read all possible incoming edges for " + target)
 	
 	while (0 < list_len(all_elems)):
 		type = set_pop(all_elems)
@@ -44,6 +45,8 @@ Element function allPossibleIncoming(model : Element, target : String):
 		if (is_edge(elem)):
 			if (is_nominal_instance(model, model["model"][target], read_edge_src(elem))):
 				set_add(result, elem)
+				log("Found " + reverseKeyLookup(metamodel["model"], elem))
+				log("      " + type)
 	
 	return result
 
@@ -162,16 +165,17 @@ String function getName(m : Element, e : Element):
 
 	return string_join(string_join("(unknown: ", cast_e2s(e)), " )")
 
-String function reverseNameLookup(s : Element, e : Element):
-	Element element_keys
-	element_keys = dict_keys(s)
+String function reverseKeyLookup(dict : Element, element : Element):
+	Element elements
+	String name
 
-	Element key
-	while (0 < read_nr_out(element_keys)):
-		key = set_pop(element_keys)
-		if (element_eq(dict_read_node(s, key), e)):
-			return key
-	return string_join(string_join("(unknown: ", cast_e2s(e)), " )")
+	elements = dict_keys(dict)
+	while (0 < list_len(elements)):
+		name = set_pop(elements)
+		if (element_eq(dict[name], element)):
+			return name
+
+	return string_join(string_join("(unknown: ", cast_e2s(element)), " )")
 
 String function print_dict(dict : Element):
 	Element keys

+ 1 - 1
integration/code/pn_interface.alc

@@ -405,7 +405,7 @@ Element function initial_prompt():
 			output("Found models:")
 			while (read_nr_out(keys) > 0):
 				m_menu_list = set_pop(keys)
-				output((("  " + m_menu_list) + " : ") + reverseNameLookup(root, root[m_menu_list]["metamodel"]))
+				output((("  " + m_menu_list) + " : ") + reverseKeyLookup(root, root[m_menu_list]["metamodel"]))
 		elif (command == "delete"):
 			output("Model to delete?")
 			name = input()

+ 1 - 1
interface/HUTN/includes/object_operations.alh

@@ -5,7 +5,7 @@ Element function readElementByName(a: Element, b: String)
 Element function getAttributeList(a: Element, b: Element)
 Element function getInstantiatableAttributes(a: Element, b: Element)
 String function getName(a: Element, b: Element)
-String function reverseNameLookup(a: Element, b: Element)
+String function reverseKeyLookup(a: Element, b: Element)
 String function print_dict(dict : Element)
 Element function allPossibleIncoming(model : Element, target : String)
 Element function allPossibleOutgoing(model : Element, source : String)