|
@@ -16,6 +16,7 @@ address = "http://127.0.0.1:8001"
|
|
taskname = str(random.random())
|
|
taskname = str(random.random())
|
|
MAX_WIDTH = 500
|
|
MAX_WIDTH = 500
|
|
MAX_HEIGHT = 500
|
|
MAX_HEIGHT = 500
|
|
|
|
+MM_RENDERED = "MM_rendered_graphical"
|
|
|
|
|
|
init()
|
|
init()
|
|
login("admin", "admin")
|
|
login("admin", "admin")
|
|
@@ -23,6 +24,51 @@ login("admin", "admin")
|
|
root = Tk()
|
|
root = Tk()
|
|
canvas = Canvas(root, width=MAX_WIDTH, height=MAX_HEIGHT, bg="white")
|
|
canvas = Canvas(root, width=MAX_WIDTH, height=MAX_HEIGHT, bg="white")
|
|
|
|
|
|
|
|
+selected_model = StringVar(root)
|
|
|
|
+selected_mapper = StringVar(root)
|
|
|
|
+
|
|
|
|
+mm_buttons = []
|
|
|
|
+available_models = model_list()
|
|
|
|
+available_mappers = []
|
|
|
|
+model_options = OptionMenu(root, selected_model, *[i[0] for i in available_models])
|
|
|
|
+mapper_options = OptionMenu(root, selected_mapper, "", *available_mappers)
|
|
|
|
+
|
|
|
|
+def visualize(model):
|
|
|
|
+ print("Visualizing model: " + str(model))
|
|
|
|
+
|
|
|
|
+def reset_optionmenu(optionmenu, options, var):
|
|
|
|
+ menu = optionmenu.children["menu"]
|
|
|
|
+ menu.delete(0, "end")
|
|
|
|
+ var.set("")
|
|
|
|
+ for option in options:
|
|
|
|
+ menu.add_command(label=option, command=lambda value=option: var.set(value))
|
|
|
|
+
|
|
|
|
+reset_optionmenu(mapper_options, [], selected_mapper)
|
|
|
|
+
|
|
|
|
+def read_available_mappers(instance_model):
|
|
|
|
+ # Get instance model's type first, as transformations are defined on the type
|
|
|
|
+ models = dict(model_list())
|
|
|
|
+ type_model = models[instance_model]
|
|
|
|
+ print("Found type model: " + type_model)
|
|
|
|
+ print("Found MM_Rendered model: " + MM_RENDERED)
|
|
|
|
+
|
|
|
|
+ # Switch to the core to find all information on megamodel relations
|
|
|
|
+ model_modify("core")
|
|
|
|
+
|
|
|
|
+ all_elems = [n for n, t in element_list() if t in ["Model", "ModelTransformation"]]
|
|
|
|
+ all_attrs = {i: read_attrs(i) for i in all_elems}
|
|
|
|
+ model_map = {all_attrs[i]["name"]: i for i in all_attrs}
|
|
|
|
+ print("Got model_map: " + str(model_map))
|
|
|
|
+ a = set([read_association_source(i) for i in read_incoming(model_map[MM_RENDERED], "transformOutput")])
|
|
|
|
+ b = set([read_association_source(i) for i in read_incoming(model_map[type_model], "transformInput")])
|
|
|
|
+ model_exit()
|
|
|
|
+
|
|
|
|
+ print("All mappers for this tool: " + str(a))
|
|
|
|
+ print("All transformations for this model: " + str(b))
|
|
|
|
+ mappers = [all_attrs[i]["name"] for i in a & b]
|
|
|
|
+ print("Overlap: " + str(mappers))
|
|
|
|
+ return mappers
|
|
|
|
+
|
|
class PromptDialog(tkSimpleDialog.Dialog):
|
|
class PromptDialog(tkSimpleDialog.Dialog):
|
|
def __init__(self, master, query):
|
|
def __init__(self, master, query):
|
|
self.query = query
|
|
self.query = query
|
|
@@ -39,19 +85,48 @@ class PromptDialog(tkSimpleDialog.Dialog):
|
|
def apply(self):
|
|
def apply(self):
|
|
self.result = {self.query[i]: self.entries[i].get() for i in range(len(self.entries))}
|
|
self.result = {self.query[i]: self.entries[i].get() for i in range(len(self.entries))}
|
|
|
|
|
|
|
|
+def create_element(t):
|
|
|
|
+ def create_elem():
|
|
|
|
+ print("Create element of type " + str(t))
|
|
|
|
+ return create_elem
|
|
|
|
+
|
|
|
|
+def render_model():
|
|
|
|
+ try:
|
|
|
|
+ model_exit()
|
|
|
|
+ except InvalidMode:
|
|
|
|
+ pass
|
|
|
|
+ rendered = model_render(selected_model.get(), selected_mapper.get())
|
|
|
|
+
|
|
|
|
+ #TODO visualize rendered model
|
|
|
|
+ print("Rendering model: " + rendered)
|
|
|
|
+ import json
|
|
|
|
+ visualize(json.loads(rendered))
|
|
|
|
+
|
|
def open_model():
|
|
def open_model():
|
|
try:
|
|
try:
|
|
- # Exit if necessary
|
|
|
|
model_exit()
|
|
model_exit()
|
|
except InvalidMode:
|
|
except InvalidMode:
|
|
pass
|
|
pass
|
|
- # Clear the canvas!
|
|
|
|
- print("Opening model: " + variable.get())
|
|
|
|
- model_modify(variable.get())
|
|
|
|
|
|
+ print("Opening model: " + selected_model.get())
|
|
|
|
+ available_mappers = read_available_mappers(selected_model.get())
|
|
|
|
+ reset_optionmenu(mapper_options, available_mappers, selected_mapper)
|
|
|
|
+
|
|
|
|
+ model_modify(selected_model.get())
|
|
|
|
+
|
|
|
|
+ print(types_full())
|
|
|
|
+ available_types = [i[0] for i in types_full() if i[1] == "Class"]
|
|
|
|
+
|
|
|
|
+ global mm_buttons
|
|
|
|
+ for button in mm_buttons:
|
|
|
|
+ button.destroy()
|
|
|
|
+
|
|
|
|
+ mm_buttons = []
|
|
|
|
+ for i, t in enumerate(available_types):
|
|
|
|
+ mm_buttons.append(Button(root, text=t, command=lambda : create_element(t)))
|
|
|
|
+ mm_buttons[-1].grid(row=1, column=i)
|
|
|
|
|
|
def instantiate_model():
|
|
def instantiate_model():
|
|
try:
|
|
try:
|
|
- # Exit if necessary
|
|
|
|
model_exit()
|
|
model_exit()
|
|
except InvalidMode:
|
|
except InvalidMode:
|
|
pass
|
|
pass
|
|
@@ -59,9 +134,10 @@ def instantiate_model():
|
|
if d.result is not None:
|
|
if d.result is not None:
|
|
name = str(d.result["Name:"])
|
|
name = str(d.result["Name:"])
|
|
print("Creating new model named " + name)
|
|
print("Creating new model named " + name)
|
|
- model_add(name, variable.get())
|
|
|
|
- options.children["menu"].add_command(label=name, command=lambda v=name: variable.set(v))
|
|
|
|
- model_modify(name)
|
|
|
|
|
|
+ model_add(name, selected_model.get())
|
|
|
|
+ reset_optionmenu(available_models, model_list())
|
|
|
|
+ selected_model.set(name)
|
|
|
|
+ open_model()
|
|
|
|
|
|
def verify_model():
|
|
def verify_model():
|
|
try:
|
|
try:
|
|
@@ -69,20 +145,19 @@ def verify_model():
|
|
model_exit()
|
|
model_exit()
|
|
except InvalidMode:
|
|
except InvalidMode:
|
|
pass
|
|
pass
|
|
- print(verify(variable.get()))
|
|
|
|
|
|
+ print(verify(selected_model.get()))
|
|
|
|
|
|
bound_functions = {
|
|
bound_functions = {
|
|
"open": open_model,
|
|
"open": open_model,
|
|
|
|
+ "render": render_model,
|
|
"instantiate": instantiate_model,
|
|
"instantiate": instantiate_model,
|
|
"verify": verify_model,
|
|
"verify": verify_model,
|
|
}
|
|
}
|
|
|
|
|
|
buttons = []
|
|
buttons = []
|
|
|
|
|
|
-models = model_list()
|
|
|
|
-variable = StringVar(root)
|
|
|
|
-options = OptionMenu(root, variable, *[i[0] for i in models])
|
|
|
|
-buttons.append(options)
|
|
|
|
|
|
+buttons.append(model_options)
|
|
|
|
+buttons.append(mapper_options)
|
|
|
|
|
|
for k, v in bound_functions.items():
|
|
for k, v in bound_functions.items():
|
|
buttons.append(Button(root, text=k, command=v))
|
|
buttons.append(Button(root, text=k, command=v))
|
|
@@ -90,7 +165,7 @@ for k, v in bound_functions.items():
|
|
for i, b in enumerate(buttons):
|
|
for i, b in enumerate(buttons):
|
|
b.grid(row=0, column=i)
|
|
b.grid(row=0, column=i)
|
|
|
|
|
|
-canvas.grid(row=1,column=0,columnspan=len(buttons))
|
|
|
|
|
|
+canvas.grid(row=2,column=0,columnspan=len(buttons))
|
|
|
|
|
|
def left_clicked():
|
|
def left_clicked():
|
|
pass
|
|
pass
|