|
@@ -0,0 +1,65 @@
|
|
|
+from state.base import State
|
|
|
+from core.element import Element, String
|
|
|
+
|
|
|
+
|
|
|
+class Manager:
|
|
|
+ def __init__(self, state: State):
|
|
|
+ self.state = state
|
|
|
+
|
|
|
+ def new_model(self, name: String, type_model_name: String) -> Element:
|
|
|
+ root = self.state.read_root()
|
|
|
+ mm_bottom = self.state.read_dict(root, type_model_name.value)
|
|
|
+ if mm_bottom is None:
|
|
|
+ print(f"Error: Invalid type model name {type_model_name.value}. Model not created.")
|
|
|
+ return Element()
|
|
|
+ bottom = self.state.create_nodevalue(name.value)
|
|
|
+ if bottom is None:
|
|
|
+ print(f"Error: Invalid model name {name.value}. Model not created.")
|
|
|
+ return Element()
|
|
|
+ self.state.create_dict(root, name.value, bottom)
|
|
|
+ self.state.create_dict(bottom, "Model", self.state.create_node())
|
|
|
+ self.state.create_dict(bottom, "Metamodel", mm_bottom)
|
|
|
+ return Element(id=bottom)
|
|
|
+
|
|
|
+ def get_model(self, name: String) -> Element:
|
|
|
+ root = self.state.read_root()
|
|
|
+ model = self.state.read_dict(root, name.value)
|
|
|
+ if model is None:
|
|
|
+ print(f"Error: Cannot find model with name {name.value}.")
|
|
|
+ return Element()
|
|
|
+ return Element(id=model)
|
|
|
+
|
|
|
+ def rename_model(self, name: String, new_name: String):
|
|
|
+ root = self.state.read_root()
|
|
|
+ name_used = self.state.read_dict_edge(root, new_name.value)
|
|
|
+ if name_used:
|
|
|
+ print(f"Error: Model with name {new_name.value} already exists. Please use another name.")
|
|
|
+ return
|
|
|
+ mode_edge = self.state.read_dict_edge(root, name.value)
|
|
|
+ if mode_edge is None:
|
|
|
+ print(f"Error: Cannot find model with name {name.value}.")
|
|
|
+ return
|
|
|
+ _, model_node = self.state.read_edge(mode_edge)
|
|
|
+ self.state.create_dict(root, new_name.value, model_node)
|
|
|
+ created = self.state.read_dict_edge(root, new_name.value)
|
|
|
+ if created is None:
|
|
|
+ print(f"Error: Invalid model name {new_name.value}. Model not renamed.")
|
|
|
+ else:
|
|
|
+ self.state.delete_edge(mode_edge)
|
|
|
+
|
|
|
+ def delete_model(self, name: String):
|
|
|
+ root = self.state.read_root()
|
|
|
+ model = self.state.read_dict(root, name.value)
|
|
|
+ if model is None:
|
|
|
+ print(f"Error: No model found for name {name.value}.")
|
|
|
+ else:
|
|
|
+ self.state.delete_node(model)
|
|
|
+
|
|
|
+ def list_models(self):
|
|
|
+ unsorted = []
|
|
|
+ for edge in self.state.read_outgoing(self.state.read_root()):
|
|
|
+ _, model = self.state.read_edge(edge)
|
|
|
+ metamodel = self.state.read_dict(model, "Metamodel")
|
|
|
+ unsorted.append(f"{self.state.read_value(model)} : {self.state.read_value(metamodel)}")
|
|
|
+ for x in sorted(unsorted):
|
|
|
+ print(x)
|