|
|
@@ -146,8 +146,10 @@
|
|
|
<parameter name="new_mapper"/>
|
|
|
<script>
|
|
|
global current_mapper
|
|
|
- current_mapper = new_mapper
|
|
|
- print("Switch mapper to " + str(new_mapper))
|
|
|
+ if new_mapper == "(none)":
|
|
|
+ current_mapper = None
|
|
|
+ else:
|
|
|
+ current_mapper = new_mapper
|
|
|
</script>
|
|
|
</transition>
|
|
|
<transition event="change_rendered" target="../change_rendered">
|
|
|
@@ -169,6 +171,7 @@
|
|
|
global current_model
|
|
|
current_model = self.preload_model
|
|
|
self.preload_model = None
|
|
|
+ self.locations = {}
|
|
|
</script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
@@ -386,9 +389,6 @@
|
|
|
|
|
|
<state id="change_metamodel">
|
|
|
<onentry>
|
|
|
- <script>
|
|
|
- print("MM -> " + current_metamodel)
|
|
|
- </script>
|
|
|
<raise event="update_status" scope="narrow" target="'progress_bar'">
|
|
|
<parameter expr="20"/>
|
|
|
<parameter expr="'Storing model context...'"/>
|
|
|
@@ -603,6 +603,7 @@
|
|
|
<script>
|
|
|
global current_model
|
|
|
current_model = result
|
|
|
+ self.locations = {}
|
|
|
</script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
@@ -631,7 +632,6 @@
|
|
|
<parameter name="result"/>
|
|
|
<script>
|
|
|
global current_metamodel
|
|
|
- print("Allowed metamodels: " + str(result))
|
|
|
if len(result) > 0:
|
|
|
current_metamodel = next(iter(result))
|
|
|
else:
|
|
|
@@ -657,25 +657,26 @@
|
|
|
<parameter expr="'transformation_between'"/>
|
|
|
<parameter expr="[{'abstract': current_metamodel, 'rendered': 'formalisms/MM_render/graphical'}, {'rendered': 'formalisms/MM_render/graphical'}]"/>
|
|
|
</raise>
|
|
|
- <script>
|
|
|
- print("Finding transformation with current MM: " + current_metamodel)
|
|
|
- </script>
|
|
|
</onentry>
|
|
|
|
|
|
<transition event="mv_response" target="../check_CS_mapper">
|
|
|
<parameter name="result"/>
|
|
|
<script>
|
|
|
- print("MM: " + str(current_metamodel))
|
|
|
- print("Allowed mappers: " + str(result))
|
|
|
+ result.add("(none)")
|
|
|
self.allowed_mappers = list(result)
|
|
|
global current_mapper
|
|
|
- if len(result) > 0:
|
|
|
- if current_mapper not in result:
|
|
|
- current_mapper = next(iter(result))
|
|
|
- print("CHANGING MAPPER TO " + str(current_mapper))
|
|
|
- else:
|
|
|
- current_mapper = None
|
|
|
- print("NO MAPPER found")
|
|
|
+ if current_mapper not in result:
|
|
|
+ current_mapper = next(iter(result))
|
|
|
+ if current_mapper == "(none)":
|
|
|
+ current_mapper = None
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
+
|
|
|
+ <transition event="mv_exception" target="../check_CS_mapper">
|
|
|
+ <script>
|
|
|
+ self.allowed_mappers = ["(none)"]
|
|
|
+ global current_mapper
|
|
|
+ current_mapper = None
|
|
|
</script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
@@ -689,6 +690,7 @@
|
|
|
</script>
|
|
|
<raise event="clear_canvas" scope="narrow" target="'canvas'"/>
|
|
|
</transition>
|
|
|
+
|
|
|
<transition cond="current_mapper is not None" target="../search_CS_rendered"/>
|
|
|
</state>
|
|
|
|
|
|
@@ -703,19 +705,20 @@
|
|
|
<transition event="mv_response" target="../store_metamodel">
|
|
|
<parameter name="result"/>
|
|
|
<script>
|
|
|
- print("Allowed rendered: " + str(result))
|
|
|
- print("Current mapper: " + str(current_mapper))
|
|
|
self.allowed_rendered = list(result)
|
|
|
+
|
|
|
+ self.allowed_rendered.append("(none)")
|
|
|
global current_rendered_model
|
|
|
|
|
|
if (len(result) > 0):
|
|
|
if current_rendered_model not in result:
|
|
|
- print("Reusing an existing rendered model")
|
|
|
current_rendered_model = next(iter(result))
|
|
|
else:
|
|
|
- print("Creating new rendered model!")
|
|
|
current_rendered_model = "rendered/%s" % str(uuid.uuid4())
|
|
|
self.allowed_rendered.append(current_rendered_model)
|
|
|
+
|
|
|
+ if current_rendered_model == "(none)":
|
|
|
+ current_rendered_model = None
|
|
|
</script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
@@ -826,6 +829,7 @@
|
|
|
global current_model
|
|
|
self.subwindow = association_name
|
|
|
current_model = ""
|
|
|
+ self.locations = {}
|
|
|
</script>
|
|
|
</transition>
|
|
|
</state>
|
|
|
@@ -836,6 +840,7 @@
|
|
|
<script>
|
|
|
global current_model
|
|
|
current_model = results["Model name"]
|
|
|
+ self.locations = {}
|
|
|
</script>
|
|
|
</transition>
|
|
|
|
|
|
@@ -1021,14 +1026,7 @@
|
|
|
</state>
|
|
|
|
|
|
<state id="pack_dsl_toolbar">
|
|
|
- <transition event="tk_widget" cond="current_mapper is None" target="../../../idle">
|
|
|
- <parameter name="tk_elem"/>
|
|
|
- <script>
|
|
|
- tk_elem.pack(anchor=tk.W)
|
|
|
- </script>
|
|
|
- </transition>
|
|
|
-
|
|
|
- <transition event="tk_widget" cond="current_mapper is not None" target="../../request_render">
|
|
|
+ <transition event="tk_widget" target="../../request_render">
|
|
|
<parameter name="tk_elem"/>
|
|
|
<script>
|
|
|
tk_elem.pack(anchor=tk.W)
|
|
|
@@ -1040,8 +1038,8 @@
|
|
|
<state id="request_render">
|
|
|
<onentry>
|
|
|
<raise event="mv_request" scope="broad">
|
|
|
- <parameter expr="'model_render'"/>
|
|
|
- <parameter expr="[current_model, current_mapper, current_rendered_model]"/>
|
|
|
+ <parameter expr="'model_render' if current_rendered_model else 'element_list_nice'"/>
|
|
|
+ <parameter expr="[current_model, current_mapper, current_rendered_model] if current_rendered_model else [current_model]"/>
|
|
|
</raise>
|
|
|
<raise event="update_status" scope="narrow" target="'progress_bar'">
|
|
|
<parameter expr="50"/>
|
|
|
@@ -1049,12 +1047,93 @@
|
|
|
</raise>
|
|
|
</onentry>
|
|
|
|
|
|
- <transition event="mv_response" target="../render_model">
|
|
|
+ <transition event="mv_response" cond="current_rendered_model" target="../render_model">
|
|
|
<parameter name="result"/>
|
|
|
<script>
|
|
|
self.rendered = result
|
|
|
</script>
|
|
|
</transition>
|
|
|
+
|
|
|
+ <transition event="mv_response" cond="not current_rendered_model" target="../render_model">
|
|
|
+ <parameter name="result"/>
|
|
|
+ <script>
|
|
|
+ print("Got result: " + str(result))
|
|
|
+ print("Finding elements:")
|
|
|
+ self.rendered = []
|
|
|
+
|
|
|
+ group_counter = 0
|
|
|
+ groups = {}
|
|
|
+ edges = []
|
|
|
+
|
|
|
+ for elem in list(result):
|
|
|
+ print("Got element: " + str(elem))
|
|
|
+ is_edge = False
|
|
|
+ attrs = {}
|
|
|
+ for key, value in elem.items():
|
|
|
+ if key == "id":
|
|
|
+ element_id = value
|
|
|
+ elif key == "__source":
|
|
|
+ element_source = value
|
|
|
+ is_edge = True
|
|
|
+ elif key == "__target":
|
|
|
+ element_target = value
|
|
|
+ is_edge = True
|
|
|
+ elif key == "type":
|
|
|
+ element_type = value
|
|
|
+ else:
|
|
|
+ attrs[key] = value
|
|
|
+ print("ID: " + str(element_id))
|
|
|
+ print("Is association: " + str(is_edge))
|
|
|
+ print("Type: " + str(element_type))
|
|
|
+ print("Attributes: " + str(attrs))
|
|
|
+ max_text = 0
|
|
|
+
|
|
|
+ if is_edge:
|
|
|
+ cs_elem_id = str(uuid.uuid4())
|
|
|
+ edges.append({"id": cs_elem_id, "type": "ConnectingLine", "offsetSourceX": 0, "offsetSourceY": 0, "offsetTargetX": 0, "offsetTargetY": 0, "lineWidth": 1, "lineColour": "black", "arrow": True, "__asid": element_id, "layer": 0, "__source": element_source, "__target": element_target})
|
|
|
+ groups[element_id] = cs_elem_id
|
|
|
+ else:
|
|
|
+ # Add the group
|
|
|
+ print("Searching location in " + str(self.locations))
|
|
|
+ x, y = self.locations.get(element_id, (30 + (group_counter * 150) % 1000, 30 + ((group_counter / 10) * 150)))
|
|
|
+ self.rendered.append({"id": str(group_counter), "type": "Group", "x": x, "y": y, "__asid": element_id})
|
|
|
+ self.locations[element_id] = (x, y)
|
|
|
+ group_id = str(group_counter)
|
|
|
+ groups[element_id] = group_id
|
|
|
+ group_counter += 1
|
|
|
+
|
|
|
+ # Add the text elements
|
|
|
+ # First the header
|
|
|
+ cs_elem_id = str(uuid.uuid4())
|
|
|
+ self.rendered.append({"id": cs_elem_id, "type": "Text", "x": 10, "y": 10, "text": "%s : %s" % (element_id, element_type), "lineWidth": 1, "lineColour": "black", "layer": 2})
|
|
|
+ self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
|
|
|
+ max_text = max(len("%s : %s" % (element_id, element_type)), max_text)
|
|
|
+ # Then the attributes
|
|
|
+ text_counter = 0
|
|
|
+ for key, value in attrs.items():
|
|
|
+ cs_elem_id = str(uuid.uuid4())
|
|
|
+ self.rendered.append({"id": cs_elem_id, "type": "Text", "x": 10, "y": 25 + text_counter * 11, "text": "%s = %s" % (key, value), "lineWidth": 1, "lineColour": "black", "layer": 2})
|
|
|
+ max_text = max(len("%s = %s" % (key, value)), max_text)
|
|
|
+ self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
|
|
|
+ text_counter += 1
|
|
|
+
|
|
|
+ # Add the rectangle
|
|
|
+ cs_elem_id = str(uuid.uuid4())
|
|
|
+ self.rendered.append({"id": cs_elem_id, "type": "Rectangle", "x": 0, "y": 0, "width": max_text * 8, "height": 35 + text_counter * 11, "lineWidth": 1, "lineColour": "black", "fillColour": "white", "layer": 1})
|
|
|
+ self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
|
|
|
+
|
|
|
+ # Add the line
|
|
|
+ cs_elem_id = str(uuid.uuid4())
|
|
|
+ self.rendered.append({"id": cs_elem_id, "type": "Line", "x": 0, "y": 20, "targetX": max_text * 8, "targetY": 20, "lineWidth": 1, "lineColour": "black", "layer": 0, "arrow": False})
|
|
|
+ self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
|
|
|
+
|
|
|
+ for edge in edges:
|
|
|
+ edge["__source"] = groups[edge["__source"]]
|
|
|
+ edge["__target"] = groups[edge["__target"]]
|
|
|
+ self.rendered.append(edge)
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
+
|
|
|
<transition event="mv_exception" target="../../../close"/>
|
|
|
</state>
|
|
|
|
|
|
@@ -1070,6 +1149,10 @@
|
|
|
self.contains = [i for i in self.rendered if i["type"] == "contains"]
|
|
|
self.rendered = [i for i in self.rendered if i["type"] not in ["Group", "contains"]]
|
|
|
self.rendered.reverse()
|
|
|
+ print("Got elements to render:")
|
|
|
+ print("Groups: " + str(self.groups))
|
|
|
+ print("Contains: " + str(self.contains))
|
|
|
+ print("Others: " + str(self.rendered))
|
|
|
</script>
|
|
|
<raise event="mv_request" scope="broad">
|
|
|
<parameter expr="'alter_context'"/>
|
|
|
@@ -1147,6 +1230,19 @@
|
|
|
</transition>
|
|
|
</state>
|
|
|
</state>
|
|
|
+
|
|
|
+ <state id="mover">
|
|
|
+ <state id="move">
|
|
|
+ <transition event="move" target=".">
|
|
|
+ <parameter name="asid"/>
|
|
|
+ <parameter name="location"/>
|
|
|
+ <script>
|
|
|
+ print("MOVE LOCATION")
|
|
|
+ self.locations[asid] = location
|
|
|
+ </script>
|
|
|
+ </transition>
|
|
|
+ </state>
|
|
|
+ </state>
|
|
|
</parallel>
|
|
|
</scxml>
|
|
|
</class>
|