manager.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from state.base import State
  2. from core.element import Element, String
  3. class Manager:
  4. def __init__(self, state: State):
  5. self.state = state
  6. def new_model(self, name: String, type_model_name: String) -> Element:
  7. root = self.state.read_root()
  8. mm_bottom = self.state.read_dict(root, type_model_name.value)
  9. if mm_bottom is None:
  10. print(f"Error: Invalid type model name {type_model_name.value}. Model not created.")
  11. return Element()
  12. bottom = self.state.create_nodevalue(name.value)
  13. if bottom is None:
  14. print(f"Error: Invalid model name {name.value}. Model not created.")
  15. return Element()
  16. self.state.create_dict(root, name.value, bottom)
  17. self.state.create_dict(bottom, "Model", self.state.create_node())
  18. self.state.create_dict(bottom, "Metamodel", mm_bottom)
  19. return Element(id=bottom)
  20. def get_model(self, name: String) -> Element:
  21. root = self.state.read_root()
  22. model = self.state.read_dict(root, name.value)
  23. if model is None:
  24. print(f"Error: Cannot find model with name {name.value}.")
  25. return Element()
  26. return Element(id=model)
  27. def rename_model(self, name: String, new_name: String):
  28. root = self.state.read_root()
  29. name_used = self.state.read_dict_edge(root, new_name.value)
  30. if name_used:
  31. print(f"Error: Model with name {new_name.value} already exists. Please use another name.")
  32. return
  33. mode_edge = self.state.read_dict_edge(root, name.value)
  34. if mode_edge is None:
  35. print(f"Error: Cannot find model with name {name.value}.")
  36. return
  37. _, model_node = self.state.read_edge(mode_edge)
  38. self.state.create_dict(root, new_name.value, model_node)
  39. created = self.state.read_dict_edge(root, new_name.value)
  40. if created is None:
  41. print(f"Error: Invalid model name {new_name.value}. Model not renamed.")
  42. else:
  43. self.state.delete_edge(mode_edge)
  44. def delete_model(self, name: String):
  45. root = self.state.read_root()
  46. model = self.state.read_dict(root, name.value)
  47. if model is None:
  48. print(f"Error: No model found for name {name.value}.")
  49. else:
  50. self.state.delete_node(model)
  51. def list_models(self):
  52. unsorted = []
  53. for edge in self.state.read_outgoing(self.state.read_root()):
  54. _, model = self.state.read_edge(edge)
  55. metamodel = self.state.read_dict(model, "Metamodel")
  56. unsorted.append(f"{self.state.read_value(model)} : {self.state.read_value(metamodel)}")
  57. for x in sorted(unsorted):
  58. print(x)
  59. def retype_model(self, model_name: String, metamodel_name: String):
  60. root = self.state.read_root()
  61. model = self.state.read_dict(root, model_name.value)
  62. if model is None:
  63. print(f"Error: Cannot find model with name {model_name.value}.")
  64. metamodel = self.state.read_dict(root, metamodel_name.value)
  65. if metamodel is None:
  66. print(f"Error: Cannot find model with name {metamodel_name.value}.")
  67. metamodel_edge = self.state.read_dict_edge(model, "Metamodel")
  68. if metamodel_edge is not None:
  69. self.state.delete_edge(metamodel_edge)
  70. self.state.create_dict(model, "Metamodel", metamodel)