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