Browse Source

Fix model_list from crashing on non-existing location

Yentl Van Tendeloo 8 years ago
parent
commit
8f586f0b3d
3 changed files with 59 additions and 49 deletions
  1. 46 36
      bootstrap/core_algorithm.alc
  2. 8 8
      integration/code/pm_pn_reachability.mvc
  3. 5 5
      integration/test_mvc.py

+ 46 - 36
bootstrap/core_algorithm.alc

@@ -383,12 +383,17 @@ Void function model_create(model : Element, name : String, user_id : String, typ
 	instantiate_attribute(core, model_id, "name", store_entry(model_id, name, user_id))
 	instantiate_attribute(core, model_id, "location", location)
 	instantiate_attribute(core, model_id, "permissions", "200")
+	log("Owner")
 	instantiate_link(core, "owner", "", model_id, user_id)
+	log("Group")
 	instantiate_link(core, "group", "", model_id, get_group_id("nobody"))
+	log("type_id")
 	instance_of = instantiate_link(core, "instanceOf", "", model_id, type_id)
+	log("Semantics")
 	instantiate_link(core, "semantics", "", instance_of, get_entry_id("models/conformance_mv"))
 
 	// Create type mapping model
+	log("Typing")
 	instantiate_link(core, "typing", "", instance_of, export_typing(model, name, user_id))
 
 	return!
@@ -1177,45 +1182,50 @@ String function cmd_model_delete(user_id : String, model_name : String):
 
 String function cmd_model_list(location : String):
 	// List all models
-	Element models
-	String result
-	String m
-
-	result = "Success: "
-	models = allAssociationDestinations(core, get_entry_id(location), "contains")
-	while (set_len(models) > 0):
-		m = set_pop(models)
-		if (is_nominal_instance(core, m, "Folder")):
-			result = result + string_join(read_attribute(core, m, "name"), "/\n")
-		else:
-			result = result + string_join(read_attribute(core, m, "name"), "\n")
-	return result!
+	if (get_entry_id(location) != ""):
+		Element models
+		String result
+		String m
+
+		result = "Success: "
+		models = allAssociationDestinations(core, get_entry_id(location), "contains")
+		while (set_len(models) > 0):
+			m = set_pop(models)
+			if (is_nominal_instance(core, m, "Folder")):
+				result = result + string_join(read_attribute(core, m, "name"), "/\n")
+			else:
+				result = result + string_join(read_attribute(core, m, "name"), "\n")
+		return result!
+	else:
+		return "Location not found: " + location!
 
 String function cmd_model_list_full(location : String):
 	// List all models with full info
-	Element models
-	String m
-	String permissions
-	String owner
-	String group
-	String name
-	String type
-	String result
-
-	result = "Success: "
-	models = allAssociationDestinations(core, get_entry_id(location), "contains")
-	while (set_len(models) > 0):
-		m = set_pop(models)
-		permissions = read_attribute(core, m, "permissions")
-		owner = read_attribute(core, set_pop(allAssociationDestinations(core, m, "owner")), "name")
-		group = read_attribute(core, set_pop(allAssociationDestinations(core, m, "group")), "name")
-		if (is_nominal_instance(core, m, "Folder")):
-			name = string_join(read_attribute(core, m, "name"), "/")
-		else:
-			name = read_attribute(core, m, "name")
-		result = result + (((((((permissions + " ") + owner) + " ") + group) + " ") + name) + "\n")
-
-	return result!
+	if (get_entry_id(location) != ""):
+		Element models
+		String m
+		String permissions
+		String owner
+		String group
+		String name
+		String type
+		String result
+
+		result = "Success: "
+		models = allAssociationDestinations(core, get_entry_id(location), "contains")
+		while (set_len(models) > 0):
+			m = set_pop(models)
+			permissions = read_attribute(core, m, "permissions")
+			owner = read_attribute(core, set_pop(allAssociationDestinations(core, m, "owner")), "name")
+			group = read_attribute(core, set_pop(allAssociationDestinations(core, m, "group")), "name")
+			if (is_nominal_instance(core, m, "Folder")):
+				name = string_join(read_attribute(core, m, "name"), "/")
+			else:
+				name = read_attribute(core, m, "name")
+			result = result + (((((((permissions + " ") + owner) + " ") + group) + " ") + name) + "\n")
+		return result!
+	else:
+		return "Location not found: " + location!
 
 String function cmd_transformation_add_MANUAL(user_id : String, source_models : Element, target_models : Element, operation_name : String):
 	return transformation_add(user_id, source_models, target_models, operation_name, "manual")!

+ 8 - 8
integration/code/pm_pn_reachability.mvc

@@ -1,25 +1,25 @@
 Start start {}
 Finish finish {}
 Exec initializePN {
-    name = "initialize_PN"
+    name = "models/initialize_PN"
 }
 Exec refinePN {
-    name = "refine_PN"
+    name = "models/refine_PN"
 }
 Exec reachability {
-    name = "reachability"
+    name = "models/reachability"
 }
 Exec reachability_print{
-    name = "reachability_print"
+    name = "models/reachability_print"
 }
 
 Data pn {
-    name = "pn"
-    type = "PetriNet"
+    name = "models/pn"
+    type = "formalisms/PetriNet"
 }
 Data reachability_graph {
-    name = "reachability"
-    type = "ReachabilityGraph"
+    name = "models/reachability"
+    type = "formalisms/ReachabilityGraph"
 }
 
 Next (start, initializePN) {}

+ 5 - 5
integration/test_mvc.py

@@ -127,12 +127,12 @@ class TestModelverseCore(unittest.TestCase):
 
         compare_locations("formalisms", set(["PetriNet"]))
         compare_locations("models", set(["print_pn"]))
-        compare_locations("RAMified/formalisms", set(["print_pn"]))
-        compare_locations("merged/formalisms", set(["print_pn"]))
+        compare_locations("RAMified/models", set(["print_pn"]))
+        compare_locations("merged/models", set(["print_pn"]))
         compare_locations("type mappings/formalisms", set(["PetriNet"]))
         compare_locations("type mappings/models", set(["print_pn"]))
-        compare_locations("type mappings/RAMified/formalisms", set(["print_pn"]))
-        compare_locations("type mappings/merged/formalisms", set(["print_pn"]))
+        compare_locations("type mappings/RAMified/models", set(["print_pn"]))
+        compare_locations("type mappings/merged/models", set(["print_pn"]))
 
     def test_transform_add_MT_pn_print_exec(self):
         log = []
@@ -177,7 +177,7 @@ class TestModelverseCore(unittest.TestCase):
         model_add("formalisms/PetriNet", "formalisms/SimpleClassDiagrams", open("integration/code/pn_design.mvc", "r").read())
         model_add("formalisms/PetriNet_Runtime", "formalisms/SimpleClassDiagrams", open("integration/code/pn_runtime.mvc", "r").read())
 
-        model_add("models/my_pn", "PetriNet", open("integration/code/pn_design_model.mvc", "r").read())
+        model_add("models/my_pn", "formalisms/PetriNet", open("integration/code/pn_design_model.mvc", "r").read())
 
         def add_tracability_D2R():
             instantiate(None, "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")