Ver código fonte

Fixed several bugs

Yentl Van Tendeloo 7 anos atrás
pai
commit
787f0636a1

+ 4 - 1
classes/modelverse/modelverse.xml

@@ -503,7 +503,7 @@
                     <state id="transformation_between">
                         <onentry>
                             <raise event="request">
-                                <parameter expr="['transformation_between', self.parameters[0], self.parameters[1]]"/>
+                                <parameter expr="['transformation_between'] + self.dict_to_list(self.parameters[0]) + self.dict_to_list(self.parameters[1])"/>
                             </raise>
                         </onentry>
 
@@ -690,6 +690,9 @@
                                     <raise event="result">
                                         <parameter expr="True if self.responses.pop(0) == 'Success' else False"/>
                                     </raise>
+                                    <script>
+                                        print("RAISING FINISHED")
+                                    </script>
                                 </transition>
 
                                 <transition cond="not (self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)) and self.expect_response_partial('', pop=False)" target=".">

+ 2 - 1
classes/toolbar/dsl_toolbar.xml

@@ -107,7 +107,8 @@
                 </script>
             </transition>
 
-            <transition event="close" target="../closing"/>
+            <transition event="close" cond="self.buttons" target="../closing"/>
+            <transition event="close" cond="not self.buttons" target="../close"/>
         </state>
 
         <state id="closing">

+ 6 - 0
classes/widgets/entry.xml

@@ -75,6 +75,12 @@
                         self.strvar.set(new_value)
                     </script>
                 </transition>
+
+                <transition event="disable" target=".">
+                    <script>
+                        self.entry.config(state=tk.DISABLED)
+                    </script>
+                </transition>
             </state>
         </state>
     </scxml>

+ 19 - 21
classes/window/activity.xml

@@ -177,12 +177,9 @@
                     <parameter name="event_name"/>
                     <parameter name="value"/>
                     <script>
-                        print("Setting " + str(event_name) + " to " + str(value))
                         if event_name.startswith('input_'):
-                            print("INP")
                             self.exec_input_signature[event_name.split("input_", 1)[1]] = value
                         else:
-                            print("OUTP")
                             self.exec_output_signature[event_name.split("output_", 1)[1]] = value
                     </script>
                 </transition>
@@ -199,19 +196,12 @@
                         </raise>
                     </onentry>
                     <transition cond="set(self.exec_input_signature.keys()) == set(self.input_signature.keys())" target="../execute">
-                        <raise event="change_bg" scope="narrow" target="'model_browse_entry'">
-                            <parameter expr="'light grey'"/>
-                        </raise>
-                        <script>
-                            print("Start execution")
-                        </script>
+                        <raise event="disable" scope="narrow" target="'model_browse_entry'"/>
                     </transition>
                     <transition cond="set(self.exec_input_signature.keys()) != set(self.input_signature.keys())" target="../../ready">
                         <script>
                             actual = set(self.exec_input_signature.keys())
                             formal = set(self.input_signature.keys())
-                            print("Actual: " + str(actual))
-                            print("Formal: " + str(formal))
                             missing = formal - actual
                             print("Missing input values for: " + str(missing))
                         </script>
@@ -228,6 +218,7 @@
                             print("   Inputs  " + str(self.exec_input_signature))
                             print("   Outputs " + str(self.exec_output_signature))
                         </script>
+
                         <raise event="mv_request" scope="broad">
                             <parameter expr="'transformation_execute'"/>
                             <parameter expr="[self.activity, self.exec_input_signature, self.exec_output_signature]"/>
@@ -244,6 +235,18 @@
 
                 <state id="in_context">
                     <!-- TODO Add data_input and data_output -->
+                    <onentry>
+                        <script>
+                            print("Waiting in context: " + str(self.current_context))
+                        </script>
+                    </onentry>
+
+                    <onexit>
+                        <script>
+                            print("Finished context: " + str(self.current_context))
+                        </script>
+                    </onexit>
+
                     <transition event="mv_response" cond="result == True" target="../alter_context_result">
                         <parameter name="result"/>
                     </transition>
@@ -255,17 +258,19 @@
                 <state id="alter_context_result" initial="check_next">
                     <state id="check_next">
                         <transition cond="self.exec_output_signature" target="../add"/>
-                        <transition cond="not self.exec_output_signature" target="../../../ready"/>
+                        <transition cond="not self.exec_output_signature" target="../../../closing"/>
                     </state>
 
                     <state id="add">
                         <onentry>
                             <script>
-                                key, value = self.exec_output_signature.popitem()
+                                tag, model = self.exec_output_signature.popitem()
+                                metamodel = self.output_signature[tag]
+                                print("Setting context for " + str((model, metamodel)))
                             </script>
                             <raise event="mv_request" scope="broad">
                                 <parameter expr="'alter_context'"/>
-                                <parameter expr="[key, value]"/>
+                                <parameter expr="[model, metamodel]"/>
                             </raise>
                         </onentry>
 
@@ -384,8 +389,6 @@
                             <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>
@@ -415,8 +418,6 @@
                             <parameter name="tk_widget"/>
                             <script>
                                 tk_widget.grid(row=self.counter, column=1)
-                                print("Adding input for " + str(self.current))
-                                print("At row " + str(self.counter))
                             </script>
                         </transition>
                     </state>
@@ -582,9 +583,6 @@
                     </transition>
 
                     <transition event="close_window" target="../../ready">
-                        <script>
-                            print("Got window close")
-                        </script>
                         <raise event="delete_instance" scope="cd">
                             <parameter expr="'browsers'"/>
                         </raise>

+ 4 - 1
classes/window/main_window.xml

@@ -574,8 +574,11 @@
                             <onentry>
                                 <raise event="mv_request" scope="broad">
                                     <parameter expr="'transformation_between'"/>
-                                    <parameter expr="[current_metamodel, 'formalisms/MM_render']"/>
+                                    <parameter expr="[{'abstract': current_metamodel, 'rendered': 'formalisms/MM_render'}, {'rendered': 'formalisms/MM_render'}]"/>
                                 </raise>
+                                <script>
+                                    print("Finding transformation with current MM: " + current_metamodel)
+                                </script>
                             </onentry>
 
                             <transition event="mv_response" target="../check_CS_mapper">

+ 37 - 18
frontend.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Tue Oct 17 14:42:55 2017
+Date:   Wed Oct 18 09:07:30 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -2342,7 +2342,7 @@ class Modelverse(RuntimeClassBase):
         self.raiseInternalEvent(Event("request", None, [['model_rendered', self.parameters[0], self.parameters[1]]]))
     
     def _initialized_behaviour_operations_transformation_between_enter(self):
-        self.raiseInternalEvent(Event("request", None, [['transformation_between', self.parameters[0], self.parameters[1]]]))
+        self.raiseInternalEvent(Event("request", None, [['transformation_between'] + self.dict_to_list(self.parameters[0]) + self.dict_to_list(self.parameters[1])]))
     
     def _initialized_behaviour_operations_transformation_signature_enter(self):
         print("Signature of " + str(self.parameters[0]))
@@ -2959,6 +2959,7 @@ class Modelverse(RuntimeClassBase):
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_0_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [True if self.responses.pop(0) == 'Success' else False]))
+        print("RAISING FINISHED")
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_0_guard(self, parameters):
         return self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)
@@ -5711,7 +5712,8 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [10, 'Querying existing metamodels...'])]))
     
     def _init_init_running_open_model_search_CS_mappers_enter(self):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_between', [current_metamodel, 'formalisms/MM_render']])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_between', [{'abstract': current_metamodel, 'rendered': 'formalisms/MM_render'}, {'rendered': 'formalisms/MM_render'}]])]))
+        print("Finding transformation with current MM: " + current_metamodel)
     
     def _init_init_running_open_model_search_CS_rendered_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['model_rendered', [current_model, current_mapper]])]))
@@ -7285,6 +7287,8 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         
         # state /all/execute/in_context
         self.states["/all/execute/in_context"] = State(18, "/all/execute/in_context", self)
+        self.states["/all/execute/in_context"].setEnter(self._all_execute_in_context_enter)
+        self.states["/all/execute/in_context"].setExit(self._all_execute_in_context_exit)
         
         # state /all/execute/alter_context_result
         self.states["/all/execute/alter_context_result"] = State(19, "/all/execute/alter_context_result", self)
@@ -7553,7 +7557,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _all_execute_alter_context_result_check_next_0.setTrigger(None)
         _all_execute_alter_context_result_check_next_0.setGuard(self._all_execute_alter_context_result_check_next_0_guard)
         self.states["/all/execute/alter_context_result/check_next"].addTransition(_all_execute_alter_context_result_check_next_0)
-        _all_execute_alter_context_result_check_next_1 = Transition(self, self.states["/all/execute/alter_context_result/check_next"], [self.states["/all/ready"]])
+        _all_execute_alter_context_result_check_next_1 = Transition(self, self.states["/all/execute/alter_context_result/check_next"], [self.states["/all/closing"]])
         _all_execute_alter_context_result_check_next_1.setTrigger(None)
         _all_execute_alter_context_result_check_next_1.setGuard(self._all_execute_alter_context_result_check_next_1_guard)
         self.states["/all/execute/alter_context_result/check_next"].addTransition(_all_execute_alter_context_result_check_next_1)
@@ -7740,9 +7744,17 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         print("   Outputs " + str(self.exec_output_signature))
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_execute', [self.activity, self.exec_input_signature, self.exec_output_signature]])]))
     
+    def _all_execute_in_context_enter(self):
+        print("Waiting in context: " + str(self.current_context))
+    
+    def _all_execute_in_context_exit(self):
+        print("Finished context: " + str(self.current_context))
+    
     def _all_execute_alter_context_result_add_enter(self):
-        key, value = self.exec_output_signature.popitem()
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [key, value]])]))
+        tag, model = self.exec_output_signature.popitem()
+        metamodel = self.output_signature[tag]
+        print("Setting context for " + str((model, metamodel)))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [model, metamodel]])]))
     
     def _all_browse_activity_create_browser_enter(self):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'browsers', 'Browser', 'Select activity to execute.', None]))
@@ -7831,12 +7843,9 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_ready_2_exec(self, parameters):
         event_name = parameters[0]
         value = parameters[1]
-        print("Setting " + str(event_name) + " to " + str(value))
         if event_name.startswith('input_'):
-            print("INP")
             self.exec_input_signature[event_name.split("input_", 1)[1]] = value
         else:
-            print("OUTP")
             self.exec_output_signature[event_name.split("output_", 1)[1]] = value
     
     def _all_ready_3_guard(self, parameters):
@@ -7844,8 +7853,7 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         return event_name == 'execute'
     
     def _all_execute_check_args_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'model_browse_entry', Event("change_bg", None, ['light grey'])]))
-        print("Start execution")
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'model_browse_entry', Event("disable", None, [])]))
     
     def _all_execute_check_args_0_guard(self, parameters):
         return set(self.exec_input_signature.keys()) == set(self.input_signature.keys())
@@ -7853,8 +7861,6 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_execute_check_args_1_exec(self, parameters):
         actual = set(self.exec_input_signature.keys())
         formal = set(self.input_signature.keys())
-        print("Actual: " + str(actual))
-        print("Formal: " + str(formal))
         missing = formal - actual
         print("Missing input values for: " + str(missing))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, [self.stored_associations['input_%s' % i] for i in missing], Event("change_bg", None, ['red'])]))
@@ -7920,8 +7926,6 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_redraw_signature_add_input_pack_label_0_exec(self, parameters):
         tk_widget = parameters[0]
         tk_widget.grid(row=self.counter,column=0)
-        print("Adding input for " + str(self.current))
-        print("At row " + str(self.counter))
     
     def _all_redraw_signature_add_input_create_entry_0_exec(self, parameters):
         assoc_name = parameters[0]
@@ -7931,8 +7935,6 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     def _all_redraw_signature_add_input_pack_entry_0_exec(self, parameters):
         tk_widget = parameters[0]
         tk_widget.grid(row=self.counter, column=1)
-        print("Adding input for " + str(self.current))
-        print("At row " + str(self.counter))
     
     def _all_redraw_signature_add_input_create_button_0_exec(self, parameters):
         assoc_name = parameters[0]
@@ -7990,7 +7992,6 @@ class ActivityExecutor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.stored_associations[self.current], Event("change_value", None, [model])]))
     
     def _all_browse_model_waiting_for_decision_1_exec(self, parameters):
-        print("Got window close")
         self.big_step.outputEventOM(Event("delete_instance", None, [self, 'browsers']))
     
     def _all_closing_0_exec(self, parameters):
@@ -8360,7 +8361,12 @@ class DSLToolbar(Toolbar):
         self.states["/root"].addTransition(_root_0)
         _root_1 = Transition(self, self.states["/root"], [self.states["/closing"]])
         _root_1.setTrigger(Event("close", None))
+        _root_1.setGuard(self._root_1_guard)
         self.states["/root"].addTransition(_root_1)
+        _root_2 = Transition(self, self.states["/root"], [self.states["/close"]])
+        _root_2.setTrigger(Event("close", None))
+        _root_2.setGuard(self._root_2_guard)
+        self.states["/root"].addTransition(_root_2)
         
         # transition /closing
         _closing_0 = Transition(self, self.states["/closing"], [self.states["/closing"]])
@@ -8431,6 +8437,12 @@ class DSLToolbar(Toolbar):
         event_name = parameters[0]
         return event_name != self.currently_active
     
+    def _root_1_guard(self, parameters):
+        return self.buttons
+    
+    def _root_2_guard(self, parameters):
+        return not self.buttons
+    
     def _closing_0_guard(self, parameters):
         return len(self.buttons) > 0
     
@@ -8988,6 +9000,10 @@ class Entry(RuntimeClassBase):
         _main_ready_3.setAction(self._main_ready_3_exec)
         _main_ready_3.setTrigger(Event("change_value", None))
         self.states["/main/ready"].addTransition(_main_ready_3)
+        _main_ready_4 = Transition(self, self.states["/main/ready"], [self.states["/main/ready"]])
+        _main_ready_4.setAction(self._main_ready_4_exec)
+        _main_ready_4.setTrigger(Event("disable", None))
+        self.states["/main/ready"].addTransition(_main_ready_4)
     
     def _main_initializing_0_exec(self, parameters):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("tk_widget", None, [self.entry])]))
@@ -9016,6 +9032,9 @@ class Entry(RuntimeClassBase):
         print("CHANGE VALUE IN ENTRY")
         self.strvar.set(new_value)
     
+    def _main_ready_4_exec(self, parameters):
+        self.entry.config(state=tk.DISABLED)
+    
     def initializeStatechart(self):
         # enter default state
         self.default_targets = self.states["/main"].getEffectiveTargetStates()