manager.py 3.6 KB

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