Selaa lähdekoodia

Introduce notion of contexts in the wrapper

Yentl Van Tendeloo 8 vuotta sitten
vanhempi
commit
1579e151a3
2 muutettua tiedostoa jossa 21 lisäystä ja 8 poistoa
  1. 1 1
      bootstrap/core_algorithm.alc
  2. 20 7
      wrappers/modelverse.py

+ 1 - 1
bootstrap/core_algorithm.alc

@@ -913,7 +913,7 @@ String function cmd_verify(user_id : String, model_name : String, metamodel_name
 	model_id = get_model_id(model_name)
 	if (model_id != ""):
 		if (allow_read(user_id, model_id)):
-			return conformance_scd(get_full_model(get_model_id(model_name), get_model_id(metamodel_name)))!
+			return string_join("Success: ", conformance_scd(get_full_model(get_model_id(model_name), get_model_id(metamodel_name))))!
 		else:
 			return "Permission denied to model: " + model_name!
 	else:

+ 20 - 7
wrappers/modelverse.py

@@ -62,6 +62,7 @@ last_output = None
 mode = MODE_UNCONNECTED
 prev_mode = None
 current_model = None
+registered_metamodels = {}
 
 def _check_type(value):
     if not isinstance(value, (int, long, float, str, unicode, bool)):
@@ -75,6 +76,7 @@ def _dict_to_list(python_dict):
 
 def _goto_mode(new_mode, model_name=None):
     global mode
+    global registered_metamodels
 
     if mode == MODE_MANUAL and new_mode == MODE_MODIFY:
         if model_name != None and current_model != model_name:
@@ -83,11 +85,15 @@ def _goto_mode(new_mode, model_name=None):
             return
     elif mode == MODE_MODELLING and new_mode == MODE_MODIFY:
         # Are in root view, but want to modify a model
-        _model_modify(model_name)
+        if model_name not in registered_metamodels:
+            raise UnfamiliarMetamodel(model_name)
+        _model_modify(model_name, registered_metamodels[model_name])
     elif mode == MODE_MODIFY and new_mode == MODE_MODIFY and model_name != None and current_model != model_name:
         # Are in modify mode, but want to modify a different model
+        if model_name not in registered_metamodels:
+            raise UnfamiliarMetamodel(model_name)
         _model_exit()
-        _model_modify(model_name)
+        _model_modify(model_name, registered_metamodels[model_name])
     elif mode == MODE_MODIFY and new_mode == MODE_MODELLING:
         _model_exit()
     elif mode == new_mode:
@@ -191,7 +197,7 @@ def _handle_output(requested=None, split=None):
     else:
         raise InterfaceMismatch(value)
     
-def _model_modify(model_name):
+def _model_modify(model_name, metamodel_name):
     """Modify an existing model."""
     global mode
     global prev_mode
@@ -204,10 +210,7 @@ def _model_modify(model_name):
     _goto_mode(MODE_MODELLING)
     prev_mode = MODE_MODELLING
 
-    if not isinstance(model_name, tuple):
-        raise Exception("Must specify the metamodelling hierarchy!")
-
-    _input(["model_modify", model_name[0], model_name[1]])
+    _input(["model_modify", model_name, metamodel_name])
     _handle_output("Success")
     global current_model
     current_model = model_name
@@ -231,6 +234,10 @@ def _model_exit():
     _output("Success")
     mode = MODE_MODELLING
 
+def alter_context(model_name, metamodel_name):
+    global registered_metamodels
+    registered_metamodels[model_name] = metamodel_name
+
 # Main MvC operations
 def init(address_param="http://127.0.0.1:8001", timeout=20.0):
     """Starts up the connection to the Modelverse."""
@@ -303,6 +310,9 @@ def model_add(model_name, metamodel_name, model_code=None):
     _input(compiled)
     _output("Success")
 
+    global registered_metamodels
+    registered_metamodels[model_name] = metamodel_name
+
 def upload_code(code):
     try:
         compiled = _compile_AL(code)
@@ -388,6 +398,9 @@ def model_overwrite(model_name, metamodel_name, new_model=None):
     _input(compiled)
     _output("Success")
 
+    global registered_metamodels
+    registered_metamodels[model_name] = metamodel_name
+
 def user_logout():
     """Log out the current user and break the connection."""
     global mode