Bladeren bron

Read activity signature from the Modelverse

Yentl Van Tendeloo 7 jaren geleden
bovenliggende
commit
6f8186fe91
6 gewijzigde bestanden met toevoegingen van 1107 en 219 verwijderingen
  1. 35 0
      classes/modelverse/modelverse.xml
  2. 5 0
      classes/toolbar/generic_toolbar.xml
  3. 315 0
      classes/window/activity.xml
  4. 17 0
      classes/window/main_window.xml
  5. 734 219
      frontend.py
  6. 1 0
      frontend.xml

+ 35 - 0
classes/modelverse/modelverse.xml

@@ -514,6 +514,35 @@
                         </transition>
                     </state>
 
+                    <state id="transformation_signature">
+                        <onentry>
+                            <script>
+                                print("Signature of " + str(self.parameters[0]))
+                            </script>
+                            <raise event="request">
+                                <parameter expr="['transformation_read_signature', self.parameters[0]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <script>
+                                results = self.split_response(self.responses.pop(0))
+                                print("Got signature: " + str(results))
+                                inputs = {}
+                                outputs = {}
+                                for result in results:
+                                    key, value = result[1:].strip().split(" ", 1)
+                                    if result[0] == "I":
+                                        inputs[key] = value
+                                    elif result[0] == "O":
+                                        outputs[key] = value
+                            </script>
+                            <raise event="result">
+                                <parameter expr="(inputs, outputs)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
                     <state id="store_on_scripted" initial="transformation_add_MT">
                         <state id="transformation_add_MT" initial="send_metadata">
                             <state id="send_metadata">
@@ -1546,6 +1575,12 @@
                             </script>
                         </transition>
 
+                        <transition cond="self.expect_action(None, 'transformation_signature')" target="../../operations/transformation_signature">
+                            <script>
+                                self.load_action(None)
+                            </script>
+                        </transition>
+
                         <transition cond="self.expect_action(None, 'transformation_add_MT')" target="../../operations/store_on_scripted/transformation_add_MT">
                             <script>
                                 self.load_action(None)

+ 5 - 0
classes/toolbar/generic_toolbar.xml

@@ -81,6 +81,11 @@
                 <raise event="open_model" scope="narrow" target="'parent'"/>
             </transition>
 
+            <transition event="button_pressed" cond="event_name == 'activity'" target=".">
+                <parameter name="event_name"/>
+                <raise event="activity" scope="narrow" target="'parent'"/>
+            </transition>
+
             <transition event="close" target="../closing"/>
         </state>
 

+ 315 - 0
classes/window/activity.xml

@@ -0,0 +1,315 @@
+<class name="ActivityExecutor">
+    <relationships>
+        <inheritance class="tk.Toplevel" priority="1"/>
+        <inheritance class="SCCDWidget" priority="0"/>
+        <association name="activity_browse_button" class="Button"/>
+        <association name="model_browse_button" class="Button"/>
+        <association name="model_browse_label" class="Label"/>
+        <association name="browsers" class="Browser"/>
+        <association name="parent" class="A"/>
+    </relationships>
+
+    <constructor>
+        <super class="tk.TopLevel"/>
+        <super class="SCCDWidget"/>
+        <body>
+            self.input_frame = tk.Frame(self)
+            self.output_frame = tk.Frame(self)
+
+            tk.Label(self, text="Activity").grid(row=0, column=0)
+            tk.Label(self, text="Inputs").grid(row=1, column=0)
+            self.input_frame.grid(row=2,column=0)
+            tk.Label(self, text="Outputs").grid(row=3, column=0)
+            self.output_frame.grid(row=4, column=0)
+
+            self.associations = {}
+            self.current = None
+        </body>
+    </constructor>
+
+    <destructor>
+        <body>
+            self.destroy()
+        </body>
+    </destructor>
+
+    <scxml initial="create_activity_browse_button">
+        <state id="create_activity_browse_button" initial="create">
+            <state id="create">
+                <onentry>
+                    <raise event="create_instance" scope="cd">
+                        <parameter expr="'activity_browse_button'"/>
+                        <parameter expr="'Button'"/>
+                        <parameter expr="{'parent': self, 'event_parameters': 'browse_activity', 'visual': TextVisual('(none)'), 'tooltip_text': 'Browse for a activity'}"/>
+                    </raise>
+                </onentry>
+
+                <transition event="instance_created" target="../pack">
+                    <parameter name="assoc_name"/>
+                    <raise event="start_instance" scope="cd">
+                        <parameter expr="assoc_name"/>
+                    </raise>
+                </transition>
+            </state>
+
+            <state id="pack">
+                <transition event="tk_widget" target="../../ready">
+                    <parameter name="tk_widget"/>
+                    <script>
+                        tk_widget.grid(row=0,column=1)
+                    </script>
+                </transition>
+            </state>
+        </state>
+
+        <state id="ready">
+            <transition event="button_pressed" cond="event_name == 'browse_activity'" target="../browse_activity">
+                <parameter name="event_name"/>
+            </transition>
+            <transition event="button_pressed" cond="event_name.startswith('input_') or event_name.startswith('output_')" target="../browse_model">
+                <parameter name="event_name"/>
+                <script>
+                    self.current = event_name
+                </script>
+            </transition>
+        </state>
+
+        <state id="browse_activity" initial="create_browser">
+            <state id="create_browser">
+                <onentry>
+                    <raise event="create_instance" scope="cd">
+                        <parameter expr="'browsers'"/>
+                        <parameter expr="'Browser'"/>
+                        <parameter expr="'Select activity to execute.'"/>
+                        <parameter expr="None"/>
+                    </raise>
+                </onentry>
+
+                <transition event="instance_created" target="../waiting_for_decision">
+                    <parameter name="assoc_name"/>
+                    <raise event="start_instance" scope="cd">
+                        <parameter expr="assoc_name"/>
+                    </raise>
+                </transition>
+            </state>
+
+            <state id="waiting_for_decision">
+                <transition event="browse_result" target=".">
+                    <parameter name="activity"/>
+                    <script>
+                        self.activity = activity
+                    </script>
+                </transition>
+
+                <transition event="close_window" target="../../redraw_signature">
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'browsers'"/>
+                    </raise>
+                </transition>
+            </state>
+        </state>
+
+        <state id="redraw_signature" initial="clear_previous">
+            <state id="clear_previous">
+                <transition target="../read_signature">
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'model_browse_label'"/>
+                    </raise>
+                    <raise event="delete_instance" scope="cd">
+                        <parameter expr="'model_browse_button'"/>
+                    </raise>
+                </transition>
+            </state>
+
+            <state id="read_signature">
+                <onentry>
+                    <raise event="mv_request" scope="broad">
+                        <parameter expr="'transformation_signature'"/>
+                        <parameter expr="[self.activity]"/>
+                    </raise>
+                </onentry>
+
+                <transition event="mv_response" target="../add_input">
+                    <parameter name="result"/>
+                    <script>
+                        self.input_signature, self.output_signature = result
+                        print("Got signature: " + str(result))
+                    </script>
+                </transition>
+            </state>
+
+            <state id="add_input" initial="check_next">
+                <onentry>
+                    <script>
+                        self.counter = -1
+                    </script>
+                </onentry>
+
+                <state id="check_next">
+                    <transition cond="self.input_signature" target="../create_label">
+                        <script>
+                            self.counter += 1
+                            self.current = self.input_signature.popitem()
+                        </script>
+                    </transition>
+                    <transition cond="not self.input_signature" target="../../add_output"/>
+                </state>
+
+                <state id="create_label">
+                    <onentry>
+                        <raise event="create_instance" scope="cd">
+                            <parameter expr="'model_browse_label'"/>
+                            <parameter expr="'Label'"/>
+                            <parameter expr="{'parent': self.input_frame, 'text': self.current[0]}"/>
+                        </raise>
+                    </onentry>
+
+                    <transition event="instance_created" target="../pack_label">
+                        <parameter name="assoc_name"/>
+                        <raise event="start_instance" scope="cd">
+                            <parameter expr="assoc_name"/>
+                        </raise>
+                    </transition>
+                </state>
+
+                <state id="pack_label">
+                    <transition event="tk_widget" target="../create_button">
+                        <parameter name="tk_widget"/>
+                        <script>
+                            tk_widget.grid(row=self.counter,column=0)
+                            print("Adding input for " + str(self.current))
+                            print("At row " + str(self.counter))
+                        </script>
+                    </transition>
+                </state>
+
+                <state id="create_button">
+                    <onentry>
+                        <raise event="create_instance" scope="cd">
+                            <parameter expr="'model_browse_button'"/>
+                            <parameter expr="'Button'"/>
+                            <parameter expr="{'parent': self.input_frame, 'visual': TextVisual('(none)'), 'tooltip_text': 'Select input model for tag %s.' % self.current[0], 'event_parameters': 'input_%s' % self.current[0]}"/>
+                        </raise>
+                    </onentry>
+
+                    <transition event="instance_created" target="../pack_button">
+                        <parameter name="assoc_name"/>
+                        <raise event="start_instance" scope="cd">
+                            <parameter expr="assoc_name"/>
+                        </raise>
+                        <script>
+                            self.associations["input_%s" % self.current[0]] = assoc_name
+                        </script>
+                    </transition>
+                </state>
+
+                <state id="pack_button">
+                    <transition event="tk_widget" target="../check_next">
+                        <parameter name="tk_widget"/>
+                        <script>
+                            tk_widget.grid(row=self.counter, column=1)
+                        </script>
+                    </transition>
+                </state>
+            </state>
+
+            <state id="add_output" initial="check_next">
+                <onentry>
+                    <script>
+                        self.counter = -1
+                    </script>
+                </onentry>
+
+                <state id="check_next">
+                    <transition cond="self.output_signature" target="../create_label">
+                        <script>
+                            self.counter += 1
+                            self.current = self.output_signature.popitem()
+                        </script>
+                    </transition>
+                    <transition cond="not self.output_signature" target="../../../ready"/>
+                </state>
+
+                <state id="create_label">
+                    <onentry>
+                        <raise event="create_instance" scope="cd">
+                            <parameter expr="'model_browse_label'"/>
+                            <parameter expr="'Label'"/>
+                            <parameter expr="{'parent': self.output_frame, 'text': self.current[0]}"/>
+                        </raise>
+                    </onentry>
+
+                    <transition event="instance_created" target="../pack_label">
+                        <parameter name="assoc_name"/>
+                        <raise event="start_instance" scope="cd">
+                            <parameter expr="assoc_name"/>
+                        </raise>
+                    </transition>
+                </state>
+
+                <state id="pack_label">
+                    <transition event="tk_widget" target="../create_button">
+                        <parameter name="tk_widget"/>
+                        <script>
+                            tk_widget.grid(row=self.counter, column=0)
+                            print("Adding output for " + str(self.current))
+                            print("At row " + str(self.counter))
+                        </script>
+                    </transition>
+                </state>
+
+                <state id="create_button">
+                    <onentry>
+                        <raise event="create_instance" scope="cd">
+                            <parameter expr="'model_browse_button'"/>
+                            <parameter expr="'Button'"/>
+                            <parameter expr="{'parent': self.output_frame, 'visual': TextVisual('(none)'), 'tooltip_text': 'Select output model for tag %s.' % self.current[0], 'event_parameters': 'output_%s' % self.current[0]}"/>
+                        </raise>
+                    </onentry>
+
+                    <transition event="instance_created" target="../pack_button">
+                        <parameter name="assoc_name"/>
+                        <raise event="start_instance" scope="cd">
+                            <parameter expr="assoc_name"/>
+                        </raise>
+                        <script>
+                            self.associations["output_%s" % self.current[0]] = assoc_name
+                        </script>
+                    </transition>
+                </state>
+
+                <state id="pack_button">
+                    <transition event="tk_widget" target="../check_next">
+                        <parameter name="tk_widget"/>
+                        <script>
+                            tk_widget.grid(row=self.counter, column=1)
+                        </script>
+                    </transition>
+                </state>
+            </state>
+        </state>
+
+        <state id="browse_model">
+        </state>
+
+        <state id="closing">
+            <transition target="../closed">
+                <raise event="delete_instance" scope="cd">
+                    <parameter expr="'model_browse_label'"/>
+                </raise>
+                <raise event="delete_instance" scope="cd">
+                    <parameter expr="'model_browse_button'"/>
+                </raise>
+                <raise event="delete_instance" scope="cd">
+                    <parameter expr="'activity_browse_button'"/>
+                </raise>
+            </transition>
+        </state>
+
+        <state id="closed">
+            <onentry>
+                <raise event="window_close" scope="narrow" target="'parent'"/>
+            </onentry>
+        </state>
+    </scxml>
+</class>

+ 17 - 0
classes/window/main_window.xml

@@ -113,6 +113,7 @@
                         <transition event="custom_MM" target="../custom_MM"/>
                         <transition event="upload_MVC" target="../upload_MVC"/>
                         <transition event="add_object_diagrams" target="../add_object_diagrams"/>
+                        <transition event="activity" target="../execute_activity"/>
                         <transition event="modify_defined_attrs" target="../modify_defined_attrs">
                             <parameter name="as_element"/>
                             <parameter name="cs_element"/>
@@ -193,6 +194,22 @@
                         </state>
                     </state>
 
+                    <state id="execute_activity">
+                        <onentry>
+                            <raise event="create_instance" scope="cd">
+                                <parameter expr="'subwindow'"/>
+                                <parameter expr="'ActivityExecutor'"/>
+                            </raise>
+                        </onentry>
+
+                        <transition event="instance_created" target="../idle">
+                            <parameter name="assoc_name"/>
+                            <raise event="start_instance" scope="cd">
+                                <parameter expr="assoc_name"/>
+                            </raise>
+                        </transition>
+                    </state>
+
                     <state id="add_object_diagrams" initial="init">
                         <state id="init">
                             <onentry>

File diff suppressed because it is too large
+ 734 - 219
frontend.py


+ 1 - 0
frontend.xml

@@ -30,6 +30,7 @@
     <class src="classes/window/splash_window.xml"/>
     <class src="classes/window/popup.xml"/>
     <class src="classes/window/choice_prompt_window.xml"/>
+    <class src="classes/window/activity.xml"/>
     <class src="classes/toolbar/toolbar.xml"/>
     <class src="classes/toolbar/generic_toolbar.xml"/>
     <class src="classes/toolbar/dsl_toolbar.xml"/>