Browse Source

Update the number of exceptions

Yentl Van Tendeloo 7 years ago
parent
commit
0926db2480

+ 5 - 8
bootstrap/compiler.alc

@@ -16,9 +16,8 @@ Element function generic_compile(code : String, port : String):
 		comm_close(port)
 		comm_close(port)
 		return lst!
 		return lst!
 	else:
 	else:
-		log("Compilation error: " + response)
 		comm_close(port)
 		comm_close(port)
-		return read_root()!
+		return response!
 
 
 Element function compile_code(code : String):
 Element function compile_code(code : String):
 	String port
 	String port
@@ -31,9 +30,8 @@ Element function compile_code(code : String):
 	Element list
 	Element list
 	list = generic_compile(code, port)
 	list = generic_compile(code, port)
 
 
-	if (element_eq(list, read_root())):
-		return read_root()!
-
+	if (is_physical_string(list)):
+		return list!
 	else:
 	else:
 		return construct_function_list(list)!
 		return construct_function_list(list)!
 
 
@@ -49,8 +47,7 @@ Element function compile_model(code : String, metamodel : Element):
 	Element list
 	Element list
 	list = generic_compile(code, port)
 	list = generic_compile(code, port)
 
 
-	if (element_eq(list, read_root())):
-		return read_root()!
-
+	if (is_physical_string(list)):
+		return list!
 	else:
 	else:
 		return construct_model_list(instantiate_model(metamodel), list)!
 		return construct_model_list(instantiate_model(metamodel), list)!

+ 75 - 72
bootstrap/core_algorithm.alc

@@ -154,6 +154,9 @@ Boolean function is_admin(user_id : String):
 	else:
 	else:
 		return False!
 		return False!
 	
 	
+Boolean function allow_execute(user_id : String, model_id : String):
+	return allow_read(user_id, model_id)!
+
 Boolean function allow_read(user_id : String, model_id : String):
 Boolean function allow_read(user_id : String, model_id : String):
 	if (is_admin(user_id)):
 	if (is_admin(user_id)):
 		// Is admin, so always allow
 		// Is admin, so always allow
@@ -1111,17 +1114,17 @@ String function cmd_model_add(type : String, name : String, code : String):
 
 
 				new_model = compile_model(code, mm)
 				new_model = compile_model(code, mm)
 
 
-				if (element_eq(new_model, read_root())):
-					return "Compilation error"!
+				if (is_physical_string(new_model)):
+					return "Compilation error: " + cast_string(new_model)!
 
 
 				model_create(new_model, name, type_id, "Model")
 				model_create(new_model, name, type_id, "Model")
 				return "Success"!
 				return "Success"!
 			else:
 			else:
 				return "Model exists: " + name!
 				return "Model exists: " + name!
 		else:
 		else:
-			return "Permission denied to model: " + type!
+			return "Read permission denied to: " + type!
 	else:
 	else:
-		return "Model not found: " + type!
+		return "Location not found: " + type!
 
 
 String function cmd_process_execute(process : String, mapping : Element):
 String function cmd_process_execute(process : String, mapping : Element):
 	// Execute a process model until it reaches termination
 	// Execute a process model until it reaches termination
@@ -1129,7 +1132,7 @@ String function cmd_process_execute(process : String, mapping : Element):
 
 
 	process_id = get_entry_id(process)
 	process_id = get_entry_id(process)
 	if (process_id != ""):
 	if (process_id != ""):
-		if (allow_read(current_user_id, process_id)):
+		if (allow_execute(current_user_id, process_id)):
 			Element pm
 			Element pm
 			pm = get_full_model(process_id, get_entry_id("formalisms/ProcessModel"))
 			pm = get_full_model(process_id, get_entry_id("formalisms/ProcessModel"))
 			if (element_eq(pm, read_root())):
 			if (element_eq(pm, read_root())):
@@ -1138,9 +1141,9 @@ String function cmd_process_execute(process : String, mapping : Element):
 			enact_PM(pm, mapping)
 			enact_PM(pm, mapping)
 			return "Success"!
 			return "Success"!
 		else:
 		else:
-			return "Permission denied to model: " + process!
+			return "Execute permission denied to: " + process!
 	else:
 	else:
-		return "Model not found: " + process!
+		return "Location not found: " + process!
 
 
 String function cmd_process_signature(process : String):
 String function cmd_process_signature(process : String):
 	// Execute a process model until it reaches termination
 	// Execute a process model until it reaches termination
@@ -1152,7 +1155,7 @@ String function cmd_process_signature(process : String):
 
 
 	process_id = get_entry_id(process)
 	process_id = get_entry_id(process)
 	if (process_id != ""):
 	if (process_id != ""):
-		if (allow_read(current_user_id, process_id)):
+		if (allow_execute(current_user_id, process_id)):
 			Element pm
 			Element pm
 			pm = get_full_model(process_id, get_entry_id("formalisms/ProcessModel"))
 			pm = get_full_model(process_id, get_entry_id("formalisms/ProcessModel"))
 			if (element_eq(pm, read_root())):
 			if (element_eq(pm, read_root())):
@@ -1167,9 +1170,9 @@ String function cmd_process_signature(process : String):
 
 
 			return result!
 			return result!
 		else:
 		else:
-			return "Permission denied to model: " + process!
+			return "Execute permission denied to model: " + process!
 	else:
 	else:
-		return "Model not found: " + process!
+		return "Location not found: " + process!
 
 
 String function cmd_transformation_between(source_dict : String, target_dict : String):
 String function cmd_transformation_between(source_dict : String, target_dict : String):
 	Element result
 	Element result
@@ -1200,7 +1203,7 @@ String function cmd_transformation_between(source_dict : String, target_dict : S
 					// Correct tag, so make transformation a possibility
 					// Correct tag, so make transformation a possibility
 					set_add(subresult, readAssociationSource(core, link))
 					set_add(subresult, readAssociationSource(core, link))
 		else:
 		else:
-			return "Model not found: " + mm!
+			return "Location not found: " + mm!
 
 
 		// Got a set of subresults now, which we use to find the overlap
 		// Got a set of subresults now, which we use to find the overlap
 		result = set_overlap(result, subresult)
 		result = set_overlap(result, subresult)
@@ -1221,7 +1224,7 @@ String function cmd_transformation_between(source_dict : String, target_dict : S
 					// Correct tag, so make transformation a possibility
 					// Correct tag, so make transformation a possibility
 					set_add(subresult, readAssociationSource(core, link))
 					set_add(subresult, readAssociationSource(core, link))
 		else:
 		else:
-			return "Model not found: " + mm!
+			return "Location not found: " + mm!
 
 
 		// Got a set of subresults now, which we use to find the overlap
 		// Got a set of subresults now, which we use to find the overlap
 		result = set_overlap(result, subresult)
 		result = set_overlap(result, subresult)
@@ -1283,7 +1286,7 @@ String function cmd_model_render(model_name : String, mapper_name : String, rend
 
 
 		if (allow_read(current_user_id, model_ID)):
 		if (allow_read(current_user_id, model_ID)):
 			if (mapper_ID != ""):
 			if (mapper_ID != ""):
-				if (allow_read(current_user_id, mapper_ID)):
+				if (allow_execute(current_user_id, mapper_ID)):
 					// Everything is fine; start the actual operation
 					// Everything is fine; start the actual operation
 					// Find metamodel to render to
 					// Find metamodel to render to
 					tracability_name = "tracability/" + rendered_name
 					tracability_name = "tracability/" + rendered_name
@@ -1353,13 +1356,13 @@ String function cmd_model_render(model_name : String, mapper_name : String, rend
 					value = JSON_print(result["rendered"])
 					value = JSON_print(result["rendered"])
 					return ("Success: " + value) !
 					return ("Success: " + value) !
 				else:
 				else:
-					return "Permission denied to model: " + mapper_name!
+					return "Execute permission denied to: " + mapper_name!
 			else:
 			else:
-				return "Model not found: " + mapper_name!
+				return "Location not found: " + mapper_name!
 		else:
 		else:
-			return "Permission denied to model: " + model_name!
+			return "Read permission denied to: " + model_name!
 	else:
 	else:
-		return "Model not found: " + model_name!
+		return "Location not found: " + model_name!
 
 
 Boolean function do_spawn_modify(model_name : String, write : Boolean):
 Boolean function do_spawn_modify(model_name : String, write : Boolean):
 	output("Please edit this model before sending next input: " + model_name)
 	output("Please edit this model before sending next input: " + model_name)
@@ -1465,7 +1468,7 @@ String function cmd_transformation_execute(transformation_name : String, source_
 
 
 	transformation_id = get_entry_id(transformation_name)
 	transformation_id = get_entry_id(transformation_name)
 	if (transformation_id != ""):
 	if (transformation_id != ""):
-		if (allow_read(current_user_id, transformation_id)):
+		if (allow_execute(current_user_id, transformation_id)):
 			if (is_nominal_instance(core, transformation_id, "Transformation")):
 			if (is_nominal_instance(core, transformation_id, "Transformation")):
 				// Read out source and target links
 				// Read out source and target links
 				inputs = dict_create()
 				inputs = dict_create()
@@ -1486,9 +1489,9 @@ String function cmd_transformation_execute(transformation_name : String, source_
 							dict_add(inputs, assoc_name, source_model_name)
 							dict_add(inputs, assoc_name, source_model_name)
 							continue!
 							continue!
 						else:
 						else:
-							return "Permission denied to model: " + source_model_name!
+							return "Read permission denied to: " + source_model_name!
 					else:
 					else:
-						return "Model not found: " + source_model_name!
+						return "Location not found: " + source_model_name!
 
 
 				targets = allOutgoingAssociationInstances(core, transformation_id, "transformOutput")
 				targets = allOutgoingAssociationInstances(core, transformation_id, "transformOutput")
 				outputs = dict_create()
 				outputs = dict_create()
@@ -1502,31 +1505,31 @@ String function cmd_transformation_execute(transformation_name : String, source_
 						if (get_entry_id(target_model_name) == ""):
 						if (get_entry_id(target_model_name) == ""):
 							// Doesn't exist yet, so we can easily create
 							// Doesn't exist yet, so we can easily create
 							if (get_entry_id(get_foldername(target_model_name)) == ""):
 							if (get_entry_id(get_foldername(target_model_name)) == ""):
-								return "Folder not found: " + get_foldername(target_model_name)!
+								return "Location not found: " + get_foldername(target_model_name)!
 							else:
 							else:
 								if (allow_write(current_user_id, get_entry_id(get_foldername(target_model_name)))):
 								if (allow_write(current_user_id, get_entry_id(get_foldername(target_model_name)))):
 									dict_add(output_map, assoc_name, full_name(readAssociationDestination(core, target)))
 									dict_add(output_map, assoc_name, full_name(readAssociationDestination(core, target)))
 									dict_add(outputs, assoc_name, target_model_name)
 									dict_add(outputs, assoc_name, target_model_name)
 								else:
 								else:
-									return "Permission denied to folder: " + get_foldername(target_model_name)!
+									return "Write permission denied to: " + get_foldername(target_model_name)!
 						else:
 						else:
 							// Already exists, so we need to check for write access
 							// Already exists, so we need to check for write access
 							if (allow_write(current_user_id, get_entry_id(target_model_name))):
 							if (allow_write(current_user_id, get_entry_id(target_model_name))):
 								dict_add(output_map, assoc_name, read_attribute(core, readAssociationDestination(core, target), "name"))
 								dict_add(output_map, assoc_name, read_attribute(core, readAssociationDestination(core, target), "name"))
 								dict_add(outputs, assoc_name, target_model_name)
 								dict_add(outputs, assoc_name, target_model_name)
 							else:
 							else:
-								return "Permission denied to model: " + target_model_name!
+								return "Write permission denied to: " + target_model_name!
 
 
 				if (do_spawn_activity(transformation_id, tracability_name, inputs, outputs, output_map)):
 				if (do_spawn_activity(transformation_id, tracability_name, inputs, outputs, output_map)):
 					return "Success"!
 					return "Success"!
 				else:
 				else:
 					return "Failure"!
 					return "Failure"!
 			else:
 			else:
-				return "Model is not executable: " + transformation_name!
+				return "Execute permission denied to: " + transformation_name!
 		else:
 		else:
-			return "Permission denied to model: " + transformation_name!
+			return "Execute permission denied to: " + transformation_name!
 	else:
 	else:
-		return "Model not found: " + transformation_name!
+		return "Location not found: " + transformation_name!
 
 
 String function cmd_verify(model_name : String, metamodel_name : String):
 String function cmd_verify(model_name : String, metamodel_name : String):
 	// Check whether a model conforms to its specification (with the selected type mapping)
 	// Check whether a model conforms to its specification (with the selected type mapping)
@@ -1546,13 +1549,13 @@ String function cmd_verify(model_name : String, metamodel_name : String):
 
 
 					return string_join("Success: ", conformance_scd(m))!
 					return string_join("Success: ", conformance_scd(m))!
 				else:
 				else:
-					return "Permission denied to model: " + metamodel_name!
+					return "Read permission denied to: " + metamodel_name!
 			else:
 			else:
-				return "Model not found: " + metamodel_name!
+				return "Location not found: " + metamodel_name!
 		else:
 		else:
-			return "Permission denied to model: " + model_name!
+			return "Read permission denied to: " + model_name!
 	else:
 	else:
-		return "Model not found: " + model_name!
+		return "Location not found: " + model_name!
 
 
 String function cmd_model_overwrite(model_name : String, metamodel_name : String):
 String function cmd_model_overwrite(model_name : String, metamodel_name : String):
 	// Overwrites an existing model without changing any metadata
 	// Overwrites an existing model without changing any metadata
@@ -1573,17 +1576,17 @@ String function cmd_model_overwrite(model_name : String, metamodel_name : String
 				output("Waiting for model constructors...")
 				output("Waiting for model constructors...")
 				new_model = compile_model(input(), mm)
 				new_model = compile_model(input(), mm)
 
 
-				if (element_eq(new_model, read_root())):
-					return "Compilation error"!
+				if (is_physical_string(new_model)):
+					return "Compilation error: " + cast_string(new_model)!
 
 
 				model_overwrite(new_model, model_id, get_entry_id(metamodel_name))
 				model_overwrite(new_model, model_id, get_entry_id(metamodel_name))
 				return "Success"!
 				return "Success"!
 			else:
 			else:
-				return string_join("Permission denied to model: ", full_name(type_id))!
+				return string_join("Read permission denied to: ", full_name(type_id))!
 		else:
 		else:
-			return "Permission denied to model: " + model_name!
+			return "Write permission denied to: " + model_name!
 	else:
 	else:
-		return "Model not found: " + model_name!
+		return "Location not found: " + model_name!
 
 
 String function cmd_model_modify(model_name : String, metamodel_name : String):
 String function cmd_model_modify(model_name : String, metamodel_name : String):
 	// Model modify operation, which uses the mini_modify.alc operations, though with extensions for access control
 	// Model modify operation, which uses the mini_modify.alc operations, though with extensions for access control
@@ -1606,11 +1609,11 @@ String function cmd_model_modify(model_name : String, metamodel_name : String):
 					model_overwrite(new_model, model_id, get_entry_id(metamodel_name))
 					model_overwrite(new_model, model_id, get_entry_id(metamodel_name))
 				return "Success"!
 				return "Success"!
 			else:
 			else:
-				return string_join("Permission denied to model: ", full_name(type_id))!
+				return string_join("Read permission denied to: ", full_name(type_id))!
 		else:
 		else:
-			return "Permission denied to model: " + model_name!
+			return "Read permission denied to: " + model_name!
 	else:
 	else:
-		return "Model not found: " + model_name!
+		return "Location not found: " + model_name!
 
 
 Void function model_delete(model_id : String):
 Void function model_delete(model_id : String):
 	if (read_type(core, model_id) == "Folder"):
 	if (read_type(core, model_id) == "Folder"):
@@ -1637,9 +1640,9 @@ String function cmd_model_delete(model_name : String):
 			model_delete(model_id)
 			model_delete(model_id)
 			return "Success"!
 			return "Success"!
 		else:
 		else:
-			return "Permission denied to model: " + model_name!
+			return "Write permission denied to: " + model_name!
 	else:
 	else:
-		return "Model not found: " + model_name!
+		return "Location not found: " + model_name!
 
 
 String function cmd_model_list(location : String):
 String function cmd_model_list(location : String):
 	// List all models
 	// List all models
@@ -1659,7 +1662,7 @@ String function cmd_model_list(location : String):
 					result = result + (get_filename(read_attribute(core, m, "name")) + "\n")
 					result = result + (get_filename(read_attribute(core, m, "name")) + "\n")
 			return result!
 			return result!
 		else:
 		else:
-			return "Permission denied to folder: " + location!
+			return "Read permission denied to: " + location!
 	else:
 	else:
 		return "Location not found: " + location!
 		return "Location not found: " + location!
 
 
@@ -1690,7 +1693,7 @@ String function cmd_model_list_full(location : String):
 				result = result + permissions + " " + owner + " " + group + " " + name + "\n"
 				result = result + permissions + " " + owner + " " + group + " " + name + "\n"
 			return result!
 			return result!
 		else:
 		else:
-			return "Permission denied to folder: " + location!
+			return "Read permission denied to: " + location!
 	else:
 	else:
 		return "Location not found: " + location!
 		return "Location not found: " + location!
 
 
@@ -1746,9 +1749,9 @@ String function transformation_add(source_models : Element, target_models : Elem
 				else:
 				else:
 					return "Name already selected for source: " + key!
 					return "Name already selected for source: " + key!
 			else:
 			else:
-				return "Permission denied to model: " + name!
+				return "Read permission denied to: " + name!
 		else:
 		else:
-			return "Model not found: " + name!
+			return "Location not found: " + name!
 
 
 	keys = dict_keys(target_models)
 	keys = dict_keys(target_models)
 	while (set_len(keys) > 0):
 	while (set_len(keys) > 0):
@@ -1772,9 +1775,9 @@ String function transformation_add(source_models : Element, target_models : Elem
 				else:
 				else:
 					return "Name already selected for target: " + key!
 					return "Name already selected for target: " + key!
 			else:
 			else:
-				return "Permission denied to model: " + name!
+				return "Read permission denied to: " + name!
 		else:
 		else:
-			return "Model not found: " + name!
+			return "Location not found: " + name!
 
 
 	if (get_entry_id(operation_name) == ""):
 	if (get_entry_id(operation_name) == ""):
 		// Write out a merged metamodel containing all these models: this is the MM for the manual operation
 		// Write out a merged metamodel containing all these models: this is the MM for the manual operation
@@ -1802,8 +1805,8 @@ String function transformation_add(source_models : Element, target_models : Elem
 			output("Waiting for code constructors...")
 			output("Waiting for code constructors...")
 			Element compiled
 			Element compiled
 			compiled = compile_code(input())
 			compiled = compile_code(input())
-			if (element_eq(compiled, read_root())):
-				return "Compilation error"!
+			if (is_physical_string(compiled)):
+				return "Compilation error: " + cast_string(compiled)!
 
 
 			add_code_model(get_full_model(get_entry_id("formalisms/ActionLanguage"), get_entry_id("formalisms/SimpleClassDiagrams")), "AL/" + operation_name, compiled)
 			add_code_model(get_full_model(get_entry_id("formalisms/ActionLanguage"), get_entry_id("formalisms/SimpleClassDiagrams")), "AL/" + operation_name, compiled)
 			model_create(import_node("AL/" + operation_name), operation_name, get_entry_id("formalisms/ActionLanguage"), "ActionLanguage")
 			model_create(import_node("AL/" + operation_name), operation_name, get_entry_id("formalisms/ActionLanguage"), "ActionLanguage")
@@ -1893,9 +1896,9 @@ String function cmd_transformation_add_MT(source_models : Element, target_models
 				else:
 				else:
 					return "Model not supported for RAMification: " + name!
 					return "Model not supported for RAMification: " + name!
 			else:
 			else:
-				return "Permission denied: " + name!
+				return "Read permission denied to: " + name!
 		else:
 		else:
-			return "Model not found: " + name!
+			return "Location not found: " + name!
 
 
 	keys = dict_keys(target_models)
 	keys = dict_keys(target_models)
 	while (set_len(keys) > 0):
 	while (set_len(keys) > 0):
@@ -1923,9 +1926,9 @@ String function cmd_transformation_add_MT(source_models : Element, target_models
 				else:
 				else:
 					return "Model not supported for RAMification: " + name!
 					return "Model not supported for RAMification: " + name!
 			else:
 			else:
-				return "Permission denied: " + name!
+				return "Read permission denied to: " + name!
 		else:
 		else:
-			return "Model not found: " + name!
+			return "Location not found: " + name!
 
 
 	merged_formalism = model_fuse(to_ramify)
 	merged_formalism = model_fuse(to_ramify)
 	model_create(merged_formalism, "merged/" + operation_name, get_entry_id("formalisms/SimpleClassDiagrams"), "Model")
 	model_create(merged_formalism, "merged/" + operation_name, get_entry_id("formalisms/SimpleClassDiagrams"), "Model")
@@ -1943,8 +1946,8 @@ String function cmd_transformation_add_MT(source_models : Element, target_models
 		// Finished with all information, now create the model itself!
 		// Finished with all information, now create the model itself!
 		output("Waiting for model constructors...")
 		output("Waiting for model constructors...")
 		new_model = compile_model(input(), get_full_model(ramified_metamodel_id, get_entry_id("formalisms/SimpleClassDiagrams")))
 		new_model = compile_model(input(), get_full_model(ramified_metamodel_id, get_entry_id("formalisms/SimpleClassDiagrams")))
-		if (element_eq(new_model, read_root())):
-			return "Compilation error"!
+		if (is_physical_string(new_model)):
+			return "Compilation error: " + cast_string(new_model)!
 		model_create(new_model, operation_name, ramified_metamodel_id, "ModelTransformation")
 		model_create(new_model, operation_name, ramified_metamodel_id, "ModelTransformation")
 		model_id = get_entry_id(operation_name)
 		model_id = get_entry_id(operation_name)
 
 
@@ -2008,11 +2011,11 @@ String function cmd_permission_modify(model_name : String, permissions : String)
 				instantiate_attribute(core, model_id, "permissions", permissions)
 				instantiate_attribute(core, model_id, "permissions", permissions)
 				return "Success"!
 				return "Success"!
 			else:
 			else:
-				return "Permission has incorrect format: must be a string of three characters, with each character being a digit between 0 and 2"!
+				return "Incorrect format: must be a string of three characters, with each character being a digit between 0 and 2"!
 		else:
 		else:
-			return "Permission denied to model: " + model_name!
+			return "User permission denied to: " + model_name!
 	else:
 	else:
-		return "Model not found: " + model_name!
+		return "Location not found: " + model_name!
 
 
 String function cmd_permission_owner(model_name : String, new_user_name : String):
 String function cmd_permission_owner(model_name : String, new_user_name : String):
 	String model_id
 	String model_id
@@ -2029,9 +2032,9 @@ String function cmd_permission_owner(model_name : String, new_user_name : String
 			else:
 			else:
 				return "No such user: " + new_user_name!
 				return "No such user: " + new_user_name!
 		else:
 		else:
-			return "Permission denied to model: " + model_name!
+			return "User permission denied to: " + model_name!
 	else:
 	else:
-		return "Model not found: " + model_name!
+		return "Location not found: " + model_name!
 
 
 String function cmd_permission_group(model_name : String, new_group_name : String):
 String function cmd_permission_group(model_name : String, new_group_name : String):
 	String model_id
 	String model_id
@@ -2048,9 +2051,9 @@ String function cmd_permission_group(model_name : String, new_group_name : Strin
 			else:
 			else:
 				return "No such group: " + new_group_name!
 				return "No such group: " + new_group_name!
 		else:
 		else:
-			return "Permission denied to model: " + model_name!
+			return "User permission denied to: " + model_name!
 	else:
 	else:
-		return "Model not found: " + model_name!
+		return "Location not found: " + model_name!
 
 
 String function cmd_group_create(group_name : String):
 String function cmd_group_create(group_name : String):
 	// Create a new group and become its owner
 	// Create a new group and become its owner
@@ -2077,7 +2080,7 @@ String function cmd_group_delete(group_name : String):
 			model_delete_element(core, group_id)
 			model_delete_element(core, group_id)
 			return "Success"!
 			return "Success"!
 		else:
 		else:
-			return "Permission denied to group: " + group_name!
+			return "Group permission denied to: " + group_name!
 	else:
 	else:
 		return "Group not found: " + group_name!
 		return "Group not found: " + group_name!
 
 
@@ -2103,7 +2106,7 @@ String function cmd_group_owner_add(group_name : String, other_user_name : Strin
 			else:
 			else:
 				return "User not found: " + other_user_name!
 				return "User not found: " + other_user_name!
 		else:
 		else:
-			return "Permission denied to group: " + group_name!
+			return "Group permission denied to: " + group_name!
 	else:
 	else:
 		return "Group not found: " + group_name!
 		return "Group not found: " + group_name!
 
 
@@ -2130,7 +2133,7 @@ String function cmd_group_owner_delete(group_name : String, other_user_name : St
 			else:
 			else:
 				return "User not found: " + other_user_name!
 				return "User not found: " + other_user_name!
 		else:
 		else:
-			return "Permission denied to group: " + group_name!
+			return "Group permission denied to: " + group_name!
 	else:
 	else:
 		return "Group not found: " + group_name!
 		return "Group not found: " + group_name!
 
 
@@ -2152,7 +2155,7 @@ String function cmd_group_join(group_name : String, other_user_name : String):
 			else:
 			else:
 				return "User not found: " + other_user_name!
 				return "User not found: " + other_user_name!
 		else:
 		else:
-			return "Permission denied to group: " + group_name!
+			return "Group permission denied to: " + group_name!
 	else:
 	else:
 		return "Group not found: " + group_name!
 		return "Group not found: " + group_name!
 
 
@@ -2182,7 +2185,7 @@ String function cmd_group_kick(group_name : String, other_user_name : String):
 			else:
 			else:
 				return "User not found: " + other_user_name!
 				return "User not found: " + other_user_name!
 		else:
 		else:
-			return "Permission denied to group: " + group_name!
+			return "Group permission denied to: " + group_name!
 	else:
 	else:
 		return "Group not found: " + group_name!
 		return "Group not found: " + group_name!
 
 
@@ -2219,7 +2222,7 @@ String function cmd_admin_promote(other_user_name : String):
 		else:
 		else:
 			return "User not found: " + other_user_name!
 			return "User not found: " + other_user_name!
 	else:
 	else:
-		return "Permission denied to administrate: " + other_user_name!
+		return "Admin permission denied"!
 
 
 String function cmd_admin_demote(other_user_name : String):
 String function cmd_admin_demote(other_user_name : String):
 	// Demote a user to normal status
 	// Demote a user to normal status
@@ -2234,7 +2237,7 @@ String function cmd_admin_demote(other_user_name : String):
 		else:
 		else:
 			return "User not found: " + other_user_name!
 			return "User not found: " + other_user_name!
 	else:
 	else:
-		return "Permission denied to administrate: " + other_user_name!
+		return "Admin permission denied"!
 
 
 String function cmd_service_register(service_name : String):
 String function cmd_service_register(service_name : String):
 	// Active a service for this specific user
 	// Active a service for this specific user
@@ -2264,7 +2267,7 @@ String function cmd_user_password(user_name : String, new_password : String):
 		else:
 		else:
 			return "No such user: " + user_name!
 			return "No such user: " + user_name!
 	else:
 	else:
-		return "Permission denied to user: " + user_name!
+		return "User permission denied: " + user_name!
 
 
 String function cmd_transformation_signature(transformation_name : String):
 String function cmd_transformation_signature(transformation_name : String):
 	String model_id
 	String model_id
@@ -2272,7 +2275,7 @@ String function cmd_transformation_signature(transformation_name : String):
 
 
 	if (model_id != ""):
 	if (model_id != ""):
 		if (is_nominal_instance(core, model_id, "Transformation")):
 		if (is_nominal_instance(core, model_id, "Transformation")):
-			if (allow_read(current_user_id, transformation_name)):
+			if (allow_execute(current_user_id, transformation_name)):
 				String result
 				String result
 				String elem
 				String elem
 				Element inputs
 				Element inputs
@@ -2291,7 +2294,7 @@ String function cmd_transformation_signature(transformation_name : String):
 
 
 				return result!
 				return result!
 			else:
 			else:
-				return "Permission denied to operation: " + transformation_name!
+				return "Execute permission denied to: " + transformation_name!
 		else:
 		else:
 			return "Model is not an operation: " + transformation_name!
 			return "Model is not an operation: " + transformation_name!
 	else:
 	else:
@@ -2321,7 +2324,7 @@ String function cmd_folder_create(folder_name : String):
 		if (element_neq(create_folders(current_user_id, folder_name), read_root())):
 		if (element_neq(create_folders(current_user_id, folder_name), read_root())):
 			return "Success"!
 			return "Success"!
 		else:
 		else:
-			return "Permission denied to folder: " + folder_name!
+			return "Write permission denied to: " + folder_name!
 	else:
 	else:
 		return "Folder alreay exists: " + folder_name!
 		return "Folder alreay exists: " + folder_name!
 
 

+ 22 - 22
bootstrap/mini_modify.alc

@@ -90,14 +90,14 @@ String function cmd_upload(write : Boolean, model : Element):
 	if (write):
 	if (write):
 		output("Waiting for model constructors...")
 		output("Waiting for model constructors...")
 		new_model = compile_model(input(), model["metamodel"])
 		new_model = compile_model(input(), model["metamodel"])
-		if (element_eq(new_model, read_root())):
-			return "Compilation error"!
+		if (is_physical_string(new_model)):
+			return "Compilation error: " + cast_string(new_model)!
 
 
 		dict_overwrite(model, "model", new_model["model"])
 		dict_overwrite(model, "model", new_model["model"])
 		set_type_mapping(model, get_type_mapping(new_model))
 		set_type_mapping(model, get_type_mapping(new_model))
 		return "Success"!
 		return "Success"!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_instantiate_node(write : Boolean, model : Element, mm_type_name : String, element_name : String):
 String function cmd_instantiate_node(write : Boolean, model : Element, mm_type_name : String, element_name : String):
 	if (write):
 	if (write):
@@ -106,14 +106,14 @@ String function cmd_instantiate_node(write : Boolean, model : Element, mm_type_n
 				return "Element exists: " + element_name!
 				return "Element exists: " + element_name!
 			else:
 			else:
 				if (is_edge(model["metamodel"]["model"][mm_type_name])):
 				if (is_edge(model["metamodel"]["model"][mm_type_name])):
-					return "Element is not a node but an edge: " + mm_type_name!
+					return "Incorrect format: " + mm_type_name + " is an edge instead of a node"!
 
 
 				element_name = instantiate_node(model, mm_type_name, element_name)
 				element_name = instantiate_node(model, mm_type_name, element_name)
 				return "Success: " + element_name!
 				return "Success: " + element_name!
 		else:
 		else:
 			return "Element not found: " + mm_type_name!
 			return "Element not found: " + mm_type_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_instantiate_edge(write : Boolean, model : Element, mm_type_name : String, element_name : String, source_name : String, target_name : String):
 String function cmd_instantiate_edge(write : Boolean, model : Element, mm_type_name : String, element_name : String, source_name : String, target_name : String):
 	if (write):
 	if (write):
@@ -131,11 +131,11 @@ String function cmd_instantiate_edge(write : Boolean, model : Element, mm_type_n
 					else:
 					else:
 						return "Element not found: " + source_name!
 						return "Element not found: " + source_name!
 				else:
 				else:
-					return "Element is a node not an edge: " + mm_type_name!
+					return "Incorrect format: " + mm_type_name + " is a node instead of an edge"!
 		else:
 		else:
 			return "Element not found: " + mm_type_name!
 			return "Element not found: " + mm_type_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_define_attribute(write : Boolean, model : Element, element_name : String, attr_name : String, type : String):
 String function cmd_define_attribute(write : Boolean, model : Element, element_name : String, attr_name : String, type : String):
 	if (write):
 	if (write):
@@ -147,13 +147,13 @@ String function cmd_define_attribute(write : Boolean, model : Element, element_n
 					model_define_attribute(model, element_name, attr_name, False, type)
 					model_define_attribute(model, element_name, attr_name, False, type)
 					return "Success"!
 					return "Success"!
 				else:
 				else:
-					return "Attribute already defined: " + attr_name!
+					return "Attribute exists: " + attr_name!
 			else:
 			else:
 				return "Element not found: " + type!
 				return "Element not found: " + type!
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_attr_add(write : Boolean, model : Element, element_name : String, attr_name : String, value : Element):
 String function cmd_attr_add(write : Boolean, model : Element, element_name : String, attr_name : String, value : Element):
 	if (write):
 	if (write):
@@ -168,7 +168,7 @@ String function cmd_attr_add(write : Boolean, model : Element, element_name : St
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_attr_add_code(write : Boolean, model : Element, element_name : String, attr_name : String):
 String function cmd_attr_add_code(write : Boolean, model : Element, element_name : String, attr_name : String):
 	if (write):
 	if (write):
@@ -179,8 +179,8 @@ String function cmd_attr_add_code(write : Boolean, model : Element, element_name
 				output("Waiting for code constructors...")
 				output("Waiting for code constructors...")
 				Element compiled
 				Element compiled
 				compiled = compile_code(input())
 				compiled = compile_code(input())
-				if (element_eq(compiled, read_root())):
-					return "Compilation error"!
+				if (is_physical_string(compiled)):
+					return "Compilation error: " + cast_string(compiled)!
 
 
 				instantiate_attribute_code(model, element_name, attr_name, compiled)
 				instantiate_attribute_code(model, element_name, attr_name, compiled)
 				return "Success"!
 				return "Success"!
@@ -189,7 +189,7 @@ String function cmd_attr_add_code(write : Boolean, model : Element, element_name
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_attr_del(write : Boolean, model : Element, element_name : String, attr_name : String):
 String function cmd_attr_del(write : Boolean, model : Element, element_name : String, attr_name : String):
 	if (write):
 	if (write):
@@ -204,7 +204,7 @@ String function cmd_attr_del(write : Boolean, model : Element, element_name : St
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_attr_name(write : Boolean, model : Element, element_name : String, attr_name : String, new_attr_name : String):
 String function cmd_attr_name(write : Boolean, model : Element, element_name : String, attr_name : String, new_attr_name : String):
 	if (write):
 	if (write):
@@ -222,15 +222,15 @@ String function cmd_attr_name(write : Boolean, model : Element, element_name : S
 						model_define_attribute_ID(model, element_name, new_attr_name, optional, attrs[attr_name], attr_edge)
 						model_define_attribute_ID(model, element_name, new_attr_name, optional, attrs[attr_name], attr_edge)
 						return "Success"!
 						return "Success"!
 					else:
 					else:
-						return "Attribute already defined: " + new_attr_name!
+						return "Attribute exists: " + new_attr_name!
 				else:
 				else:
-					return "Attribute not defined: " + attr_name!
+					return "Attribute not found: " + attr_name!
 			else:
 			else:
 				return "Attribute not found: " + attr_name!
 				return "Attribute not found: " + attr_name!
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_attr_type(write : Boolean, model : Element, element_name : String, attr_name : String, new_attr_type : String):
 String function cmd_attr_type(write : Boolean, model : Element, element_name : String, attr_name : String, new_attr_type : String):
 	if (write):
 	if (write):
@@ -253,7 +253,7 @@ String function cmd_attr_type(write : Boolean, model : Element, element_name : S
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_attr_optional(write : Boolean, model : Element, element_name : String, attr_name : String, optional : Boolean):
 String function cmd_attr_optional(write : Boolean, model : Element, element_name : String, attr_name : String, optional : Boolean):
 	if (write):
 	if (write):
@@ -278,7 +278,7 @@ String function cmd_attr_optional(write : Boolean, model : Element, element_name
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_undefine_attribute(write : Boolean, model : Element, element_name : String, attr_name : String):
 String function cmd_undefine_attribute(write : Boolean, model : Element, element_name : String, attr_name : String):
 	if (write):
 	if (write):
@@ -297,7 +297,7 @@ String function cmd_undefine_attribute(write : Boolean, model : Element, element
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_delete(write : Boolean, model : Element, element_name : String):
 String function cmd_delete(write : Boolean, model : Element, element_name : String):
 	if (write):
 	if (write):
@@ -307,7 +307,7 @@ String function cmd_delete(write : Boolean, model : Element, element_name : Stri
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_list(model : Element):
 String function cmd_list(model : Element):
 	Element keys_m
 	Element keys_m
@@ -464,7 +464,7 @@ String function cmd_retype(write : Boolean, model : Element, element_name : Stri
 		else:
 		else:
 			return "Element not found: " + element_name!
 			return "Element not found: " + element_name!
 	else:
 	else:
-		return "Permission denied to write"!
+		return "Write permission denied"!
 
 
 String function cmd_read_association_source(write : Boolean, model : Element, element_name : String):
 String function cmd_read_association_source(write : Boolean, model : Element, element_name : String):
 	if (dict_in(model["model"], element_name)):
 	if (dict_in(model["model"], element_name)):

+ 98 - 6
wrappers/classes/modelverse.xml

@@ -1340,21 +1340,113 @@
                         <transition cond="self.expect_response('Success')" target="../../wait_for_action/megamodelling"/>
                         <transition cond="self.expect_response('Success')" target="../../wait_for_action/megamodelling"/>
                     </state>
                     </state>
 
 
+                    <transition cond="self.expect_response_partial('Compilation error: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'CompilationError'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Attribute not found: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'UnknownAttribute'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Model exists: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'ModelExists'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Attribute exists: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'AttributeExists'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Element exists: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'ElementExists'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Read permission denied to: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'ReadPermissionDenied'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Write permission denied to: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'WritePermissionDenied'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response('Write permission denied', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'WritePermissionDenied'"/>
+                            <parameter expr="self.current_model"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Execute permission denied to: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'ExecutePermissionDenied'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Group permission denied to: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'GroupPermissionDenied'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('User permission denied to: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'UserPermissionDenied'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Admin permission denied', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'AdminPermissionDenied'"/>
+                        </raise>
+                    </transition>
+
+                    <transition cond="self.expect_response_partial('Incorrect format: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'InterfaceMismatch'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
                     <transition cond="self.expect_response_partial('Element not found: ', pop=False)" target="../wait_for_action/history">
                     <transition cond="self.expect_response_partial('Element not found: ', pop=False)" target="../wait_for_action/history">
                         <raise event="exception">
                         <raise event="exception">
-                            <parameter expr="'UnknownIdentifier'"/>
-                            <parameter expr="'Element could not be found'"/>
+                            <parameter expr="'UnknownElement'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
                         </raise>
                         </raise>
+                    </transition>
 
 
-                        <script>
-                            self.responses.pop(0)
-                        </script>
+                    <transition cond="self.expect_response_partial('Location not found: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'UnknownLocation'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
                     </transition>
                     </transition>
 
 
                     <transition cond="self.expect_response_partial('No conformance relation can be found ', pop=False)" target="../wait_for_action/history">
                     <transition cond="self.expect_response_partial('No conformance relation can be found ', pop=False)" target="../wait_for_action/history">
                         <raise event="exception">
                         <raise event="exception">
                             <parameter expr="'UnknownMetamodellingHierarchy'"/>
                             <parameter expr="'UnknownMetamodellingHierarchy'"/>
-                            <parameter expr="'Conformance relation not found'"/>
                         </raise>
                         </raise>
 
 
                         <script>
                         <script>

+ 29 - 11
wrappers/modelverse.py

@@ -27,22 +27,46 @@ class UnknownIdentifier(ModelverseException):
 class CompilationError(ModelverseException):
 class CompilationError(ModelverseException):
     pass
     pass
 
 
-class NoSuchAttribute(ModelverseException):
+class UnknownAttribute(UnknownIdentifier):
     pass
     pass
 
 
-class UnknownModel(ModelverseException):
+class UnknownLocation(UnknownIdentifier):
+    pass
+
+class UnknownElement(UnknownIdentifier):
     pass
     pass
 
 
 class ConnectionError(ModelverseException):
 class ConnectionError(ModelverseException):
     pass
     pass
 
 
-class ModelExists(ModelverseException):
+class ExistsError(ModelverseException):
+    pass
+
+class AttributeExists(ExistsError):
+    pass
+
+class ModelExists(ExistsError):
     pass
     pass
 
 
 class PermissionDenied(ModelverseException):
 class PermissionDenied(ModelverseException):
     pass
     pass
 
 
-class InvalidMode(ModelverseException):
+class ReadPermissionDenied(PermissionDenied):
+    pass
+
+class WritePermissionDenied(PermissionDenied):
+    pass
+
+class ExecutePermissionDenied(PermissionDenied):
+    pass
+
+class UserPermissionDenied(PermissionDenied):
+    pass
+
+class GroupPermissionDenied(PermissionDenied):
+    pass
+
+class AdminPermissionDenied(PermissionDenied):
     pass
     pass
 
 
 class InterfaceMismatch(ModelverseException):
 class InterfaceMismatch(ModelverseException):
@@ -163,13 +187,7 @@ def OUTPUT():
         if response.name == "result":
         if response.name == "result":
             return response.parameters[1]
             return response.parameters[1]
         elif response.name == "exception":
         elif response.name == "exception":
-            if response.parameters[1] == "UnknownIdentifier":
-                raise UnknownIdentifier()
-            elif response.parameters[1] == "UnknownMetamodellingHierarchy":
-                raise UnknownMetamodellingHierarchy()
-            else:
-                print("Unknown error: " + str(response.parameters))
-                raise UnknownError()
+            raise eval(response.parameters[1])(*response.parameters[2:])
 
 
 def init(address_param="127.0.0.1:8001", timeout=20.0, taskname=None):
 def init(address_param="127.0.0.1:8001", timeout=20.0, taskname=None):
     global controller
     global controller

+ 161 - 8
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
 
-Date:   Wed Mar  7 08:26:22 2018
+Date:   Mon Mar 12 09:56:50 2018
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server
@@ -1711,6 +1711,76 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_2.setTrigger(None)
         _initialized_behaviour_operations_2.setTrigger(None)
         _initialized_behaviour_operations_2.setGuard(self._initialized_behaviour_operations_2_guard)
         _initialized_behaviour_operations_2.setGuard(self._initialized_behaviour_operations_2_guard)
         self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_2)
         self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_2)
+        _initialized_behaviour_operations_3 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_3.setAction(self._initialized_behaviour_operations_3_exec)
+        _initialized_behaviour_operations_3.setTrigger(None)
+        _initialized_behaviour_operations_3.setGuard(self._initialized_behaviour_operations_3_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_3)
+        _initialized_behaviour_operations_4 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_4.setAction(self._initialized_behaviour_operations_4_exec)
+        _initialized_behaviour_operations_4.setTrigger(None)
+        _initialized_behaviour_operations_4.setGuard(self._initialized_behaviour_operations_4_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_4)
+        _initialized_behaviour_operations_5 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_5.setAction(self._initialized_behaviour_operations_5_exec)
+        _initialized_behaviour_operations_5.setTrigger(None)
+        _initialized_behaviour_operations_5.setGuard(self._initialized_behaviour_operations_5_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_5)
+        _initialized_behaviour_operations_6 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_6.setAction(self._initialized_behaviour_operations_6_exec)
+        _initialized_behaviour_operations_6.setTrigger(None)
+        _initialized_behaviour_operations_6.setGuard(self._initialized_behaviour_operations_6_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_6)
+        _initialized_behaviour_operations_7 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_7.setAction(self._initialized_behaviour_operations_7_exec)
+        _initialized_behaviour_operations_7.setTrigger(None)
+        _initialized_behaviour_operations_7.setGuard(self._initialized_behaviour_operations_7_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_7)
+        _initialized_behaviour_operations_8 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_8.setAction(self._initialized_behaviour_operations_8_exec)
+        _initialized_behaviour_operations_8.setTrigger(None)
+        _initialized_behaviour_operations_8.setGuard(self._initialized_behaviour_operations_8_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_8)
+        _initialized_behaviour_operations_9 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_9.setAction(self._initialized_behaviour_operations_9_exec)
+        _initialized_behaviour_operations_9.setTrigger(None)
+        _initialized_behaviour_operations_9.setGuard(self._initialized_behaviour_operations_9_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_9)
+        _initialized_behaviour_operations_10 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_10.setAction(self._initialized_behaviour_operations_10_exec)
+        _initialized_behaviour_operations_10.setTrigger(None)
+        _initialized_behaviour_operations_10.setGuard(self._initialized_behaviour_operations_10_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_10)
+        _initialized_behaviour_operations_11 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_11.setAction(self._initialized_behaviour_operations_11_exec)
+        _initialized_behaviour_operations_11.setTrigger(None)
+        _initialized_behaviour_operations_11.setGuard(self._initialized_behaviour_operations_11_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_11)
+        _initialized_behaviour_operations_12 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_12.setAction(self._initialized_behaviour_operations_12_exec)
+        _initialized_behaviour_operations_12.setTrigger(None)
+        _initialized_behaviour_operations_12.setGuard(self._initialized_behaviour_operations_12_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_12)
+        _initialized_behaviour_operations_13 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_13.setAction(self._initialized_behaviour_operations_13_exec)
+        _initialized_behaviour_operations_13.setTrigger(None)
+        _initialized_behaviour_operations_13.setGuard(self._initialized_behaviour_operations_13_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_13)
+        _initialized_behaviour_operations_14 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_14.setAction(self._initialized_behaviour_operations_14_exec)
+        _initialized_behaviour_operations_14.setTrigger(None)
+        _initialized_behaviour_operations_14.setGuard(self._initialized_behaviour_operations_14_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_14)
+        _initialized_behaviour_operations_15 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_15.setAction(self._initialized_behaviour_operations_15_exec)
+        _initialized_behaviour_operations_15.setTrigger(None)
+        _initialized_behaviour_operations_15.setGuard(self._initialized_behaviour_operations_15_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_15)
+        _initialized_behaviour_operations_16 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_16.setAction(self._initialized_behaviour_operations_16_exec)
+        _initialized_behaviour_operations_16.setTrigger(None)
+        _initialized_behaviour_operations_16.setGuard(self._initialized_behaviour_operations_16_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_16)
         
         
         # transition /initialized/behaviour/wait_for_action
         # transition /initialized/behaviour/wait_for_action
         _initialized_behaviour_wait_for_action_0 = Transition(self, self.states["/initialized/behaviour/wait_for_action"], [self.states["/initialized/behaviour/wait_for_action/history"]])
         _initialized_behaviour_wait_for_action_0 = Transition(self, self.states["/initialized/behaviour/wait_for_action"], [self.states["/initialized/behaviour/wait_for_action/history"]])
@@ -2083,25 +2153,108 @@ class Modelverse(RuntimeClassBase):
         self.raiseInternalEvent(Event("request", None, ['drop']))
         self.raiseInternalEvent(Event("request", None, ['drop']))
     
     
     def _initialized_behaviour_operations_0_exec(self, parameters):
     def _initialized_behaviour_operations_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['UnknownIdentifier', 'Element could not be found']))
-        self.responses.pop(0)
+        self.raiseInternalEvent(Event("exception", None, ['CompilationError', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_0_guard(self, parameters):
     def _initialized_behaviour_operations_0_guard(self, parameters):
-        return self.expect_response_partial('Element not found: ', pop=False)
+        return self.expect_response_partial('Compilation error: ', pop=False)
     
     
     def _initialized_behaviour_operations_1_exec(self, parameters):
     def _initialized_behaviour_operations_1_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['UnknownMetamodellingHierarchy', 'Conformance relation not found']))
-        self.responses.pop(0)
+        self.raiseInternalEvent(Event("exception", None, ['UnknownAttribute', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_1_guard(self, parameters):
     def _initialized_behaviour_operations_1_guard(self, parameters):
-        return self.expect_response_partial('No conformance relation can be found ', pop=False)
+        return self.expect_response_partial('Attribute not found: ', pop=False)
     
     
     def _initialized_behaviour_operations_2_exec(self, parameters):
     def _initialized_behaviour_operations_2_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['ModelExists', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_2_guard(self, parameters):
+        return self.expect_response_partial('Model exists: ', pop=False)
+    
+    def _initialized_behaviour_operations_3_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['AttributeExists', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_3_guard(self, parameters):
+        return self.expect_response_partial('Attribute exists: ', pop=False)
+    
+    def _initialized_behaviour_operations_4_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['ElementExists', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_4_guard(self, parameters):
+        return self.expect_response_partial('Element exists: ', pop=False)
+    
+    def _initialized_behaviour_operations_5_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['ReadPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_5_guard(self, parameters):
+        return self.expect_response_partial('Read permission denied to: ', pop=False)
+    
+    def _initialized_behaviour_operations_6_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['WritePermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_6_guard(self, parameters):
+        return self.expect_response_partial('Write permission denied to: ', pop=False)
+    
+    def _initialized_behaviour_operations_7_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['WritePermissionDenied', self.current_model]))
+    
+    def _initialized_behaviour_operations_7_guard(self, parameters):
+        return self.expect_response('Write permission denied', pop=False)
+    
+    def _initialized_behaviour_operations_8_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['ExecutePermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_8_guard(self, parameters):
+        return self.expect_response_partial('Execute permission denied to: ', pop=False)
+    
+    def _initialized_behaviour_operations_9_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['GroupPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_9_guard(self, parameters):
+        return self.expect_response_partial('Group permission denied to: ', pop=False)
+    
+    def _initialized_behaviour_operations_10_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['UserPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_10_guard(self, parameters):
+        return self.expect_response_partial('User permission denied to: ', pop=False)
+    
+    def _initialized_behaviour_operations_11_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['AdminPermissionDenied']))
+    
+    def _initialized_behaviour_operations_11_guard(self, parameters):
+        return self.expect_response_partial('Admin permission denied', pop=False)
+    
+    def _initialized_behaviour_operations_12_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['InterfaceMismatch', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_12_guard(self, parameters):
+        return self.expect_response_partial('Incorrect format: ', pop=False)
+    
+    def _initialized_behaviour_operations_13_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['UnknownElement', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_13_guard(self, parameters):
+        return self.expect_response_partial('Element not found: ', pop=False)
+    
+    def _initialized_behaviour_operations_14_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['UnknownLocation', self.split_response(self.responses.pop(0))[0]]))
+    
+    def _initialized_behaviour_operations_14_guard(self, parameters):
+        return self.expect_response_partial('Location not found: ', pop=False)
+    
+    def _initialized_behaviour_operations_15_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['UnknownMetamodellingHierarchy']))
+        self.responses.pop(0)
+    
+    def _initialized_behaviour_operations_15_guard(self, parameters):
+        return self.expect_response_partial('No conformance relation can be found ', pop=False)
+    
+    def _initialized_behaviour_operations_16_exec(self, parameters):
         #print("Unknown Error: " + self.responses[0])
         #print("Unknown Error: " + self.responses[0])
         pass
         pass
         self.raiseInternalEvent(Event("exception", None, ['UnknownError', 'Error: %s' % self.responses.pop(0)]))
         self.raiseInternalEvent(Event("exception", None, ['UnknownError', 'Error: %s' % self.responses.pop(0)]))
     
     
-    def _initialized_behaviour_operations_2_guard(self, parameters):
+    def _initialized_behaviour_operations_16_guard(self, parameters):
         return self.expect_response_partial('', pop=False)
         return self.expect_response_partial('', pop=False)
     
     
     def _initialized_behaviour_wait_for_action_0_exec(self, parameters):
     def _initialized_behaviour_wait_for_action_0_exec(self, parameters):