Browse Source

Fix adding an AL activity with empty signature

Yentl Van Tendeloo 8 years ago
parent
commit
39323eec8e
2 changed files with 72 additions and 22 deletions
  1. 22 3
      classes/window/create_activity.xml
  2. 50 19
      frontend.py

+ 22 - 3
classes/window/create_activity.xml

@@ -676,8 +676,23 @@
                 </script>
             </transition>
 
-            <transition event="button_pressed" cond="evt == 'confirm'" target="../creating">
+            <transition event="button_pressed" cond="evt == 'confirm' and self.activity_type != 'ActionLanguage'" target="../creating">
                 <parameter name="evt"/>
+                <script>
+                    self.upload_code = ""
+                </script>
+            </transition>
+
+            <transition event="button_pressed" cond="evt == 'confirm' and self.activity_type == 'ActionLanguage'" target="../creating">
+                <parameter name="evt"/>
+                <script>
+                    from tkFileDialog import askopenfilename
+                    self.upload_code = askopenfilename()
+                    if self.upload_code is None:
+                        self.upload_code = ""
+                    else:
+                        self.upload_code = open(self.upload_code, 'r').read()
+                </script>
             </transition>
         </state>
 
@@ -685,11 +700,11 @@
             <onentry>
                 <raise event="mv_request" scope="broad">
                     <parameter expr="'transformation_add_%s' % ({'ManualOperation': 'MANUAL', 'ModelTransformation': 'MT', 'ActionLanguage': 'AL'}[self.activity_type])"/>
-                    <parameter expr="[self.create_input_signature, self.create_output_signature, self.activity_name, '']"/>
+                    <parameter expr="[self.create_input_signature, self.create_output_signature, self.activity_name, self.upload_code]"/>
                 </raise>
             </onentry>
 
-            <transition event="mv_response" target="../modifying_mm">
+            <transition event="mv_response" cond="result is not None" target="../modifying_mm">
                 <parameter name="result"/>
                 <script>
                     context, model_to_modify = result
@@ -697,6 +712,10 @@
                     self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", model_to_modify, "--limited"])
                 </script>
             </transition>
+
+            <transition event="mv_response" cond="result is None" target="../closing">
+                <parameter name="result"/>
+            </transition>
         </state>
 
         <state id="modifying_mm">

+ 50 - 19
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:   Thu Nov  9 08:57:46 2017
+Date:   Thu Nov  9 14:27:13 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -1502,10 +1502,6 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_0.setTrigger(None)
         _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_0.setGuard(self._initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_0_guard)
         self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_AL/edit_metamodel"].addTransition(_initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_0)
-        _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_1 = Transition(self, self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_AL/edit_metamodel"], [self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_AL/send_model"]])
-        _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_1.setTrigger(None)
-        _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_1.setGuard(self._initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_1_guard)
-        self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_AL/edit_metamodel"].addTransition(_initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_1)
         
         # transition /initialized/behaviour/operations/store_on_scripted/transformation_add_AL/send_model
         _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_send_model_0 = Transition(self, self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_AL/send_model"], [self.states["/initialized/behaviour/wait_for_action/megamodelling"]])
@@ -2288,6 +2284,12 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0.setGuard(self._initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0_guard)
         self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_MT"].addTransition(_initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0)
         
+        # transition /initialized/behaviour/operations/store_on_scripted/transformation_add_AL
+        _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_0 = Transition(self, self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_AL"], [self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_AL/send_model"]])
+        _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_0.setTrigger(None)
+        _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_0.setGuard(self._initialized_behaviour_operations_store_on_scripted_transformation_add_AL_0_guard)
+        self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_AL"].addTransition(_initialized_behaviour_operations_store_on_scripted_transformation_add_AL_0)
+        
         # transition /initialized/behaviour/operations/store_on_scripted/process_execute/enacting
         _initialized_behaviour_operations_store_on_scripted_process_execute_enacting_0 = Transition(self, self.states["/initialized/behaviour/operations/store_on_scripted/process_execute/enacting"], [self.states["/initialized/behaviour/operations/store_on_scripted/process_execute/executing"]])
         _initialized_behaviour_operations_store_on_scripted_process_execute_enacting_0.setTrigger(None)
@@ -2712,6 +2714,9 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0_guard(self, parameters):
         return self.expect_response_partial('', pop=False)
     
+    def _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_0_guard(self, parameters):
+        return self.expect_response('Waiting for code constructors...')
+    
     def _initialized_behaviour_operations_store_on_scripted_process_execute_enacting_0_guard(self, parameters):
         return self.expect_response('Success', pop=True)
     
@@ -2919,7 +2924,7 @@ class Modelverse(RuntimeClassBase):
         data = parameters[0]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[1], Event("HTTP_input", None, [urllib.urlencode({"op": "get_output", "taskname": self.taskname}), "parent"])]))
         self.responses.append(json.loads(data))
-        #print("Got data: " + str(json.loads(data)))
+        print("Got data: " + str(json.loads(data)))
     
     def _initialized_http_mapper_init_3_guard(self, parameters):
         data = parameters[0]
@@ -3120,7 +3125,6 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response_partial('Success: ', pop=False)
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_send_metadata_0_exec(self, parameters):
-        print("Operating on received")
         self.raiseInternalEvent(Event("result", None, [[self.context, self.responses.pop(0).split(': ', 1)[1]]]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_send_metadata_0_guard(self, parameters):
@@ -3139,7 +3143,6 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response('Success')
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_send_metadata_0_exec(self, parameters):
-        print("Got model we are operating on!")
         self.raiseInternalEvent(Event("result", None, [[self.context, self.responses.pop(0).split(': ', 1)[1]]]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_send_metadata_0_guard(self, parameters):
@@ -3148,9 +3151,6 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_0_guard(self, parameters):
         return self.expect_response('Model loaded, ready for commands!')
     
-    def _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_edit_metamodel_1_guard(self, parameters):
-        return self.expect_response('Waiting for code constructors...')
-    
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_AL_send_model_0_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [None]))
     
@@ -3158,7 +3158,6 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response('Success')
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_MANUAL_send_metadata_0_exec(self, parameters):
-        print("Operating on received")
         self.raiseInternalEvent(Event("result", None, [[self.context, self.responses.pop(0).split(': ', 1)[1]]]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_MANUAL_send_metadata_0_guard(self, parameters):
@@ -3183,7 +3182,6 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_send_operation_1_exec(self, parameters):
         self.input_context = str(uuid.uuid4())
         self.inputs[self.input_context] = []
-        print("Got context")
         self.raiseInternalEvent(Event("result", None, [['SC', self.parameters[0], self.input_context]]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_send_operation_1_guard(self, parameters):
@@ -3191,21 +3189,18 @@ 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("GOT SUCCESS/FALSE")
     
     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)
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_1_exec(self, parameters):
         self.raiseInternalEvent(Event("data_output", None, [self.responses.pop(0)]))
-        print("Got data_output")
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_1_guard(self, parameters):
         return not (self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)) and self.expect_response_partial('', pop=False)
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_2_exec(self, parameters):
         self.raiseInternalEvent(Event("request", None, [self.inputs[self.input_context].pop(0)['parameters']]))
-        print("Got data_input")
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_dialog_2_guard(self, parameters):
         return self.expect_input(self.input_context, 'data_input')
@@ -3215,7 +3210,6 @@ class Modelverse(RuntimeClassBase):
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_edit_model_1_exec(self, parameters):
         model = self.responses.pop(0).split(": ", 1)[1]
-        print("Operating on model " + str(model))
         self.raiseInternalEvent(Event("result", None, [['OP', self.parameters[0], self.context, model]]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_edit_model_1_guard(self, parameters):
@@ -10078,15 +10072,26 @@ class ActivityCreator(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _ready_9.setGuard(self._ready_9_guard)
         self.states["/ready"].addTransition(_ready_9)
         _ready_10 = Transition(self, self.states["/ready"], [self.states["/creating"]])
+        _ready_10.setAction(self._ready_10_exec)
         _ready_10.setTrigger(Event("button_pressed", None))
         _ready_10.setGuard(self._ready_10_guard)
         self.states["/ready"].addTransition(_ready_10)
+        _ready_11 = Transition(self, self.states["/ready"], [self.states["/creating"]])
+        _ready_11.setAction(self._ready_11_exec)
+        _ready_11.setTrigger(Event("button_pressed", None))
+        _ready_11.setGuard(self._ready_11_guard)
+        self.states["/ready"].addTransition(_ready_11)
         
         # transition /creating
         _creating_0 = Transition(self, self.states["/creating"], [self.states["/modifying_mm"]])
         _creating_0.setAction(self._creating_0_exec)
         _creating_0.setTrigger(Event("mv_response", None))
+        _creating_0.setGuard(self._creating_0_guard)
         self.states["/creating"].addTransition(_creating_0)
+        _creating_1 = Transition(self, self.states["/creating"], [self.states["/closing"]])
+        _creating_1.setTrigger(Event("mv_response", None))
+        _creating_1.setGuard(self._creating_1_guard)
+        self.states["/creating"].addTransition(_creating_1)
         
         # transition /modifying_mm
         _modifying_mm_0 = Transition(self, self.states["/modifying_mm"], [self.states["/finish_transformation_add"]])
@@ -10216,7 +10221,7 @@ class ActivityCreator(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'input_MM_browse', 'Button', {'parent': self.output_frame, 'visual': TextVisual('+'), 'tooltip_text': 'Create new element in signature.', 'event_parameters': 'add_output'}]))
     
     def _creating_enter(self):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_add_%s' % ({'ManualOperation': 'MANUAL', 'ModelTransformation': 'MT', 'ActionLanguage': 'AL'}[self.activity_type]), [self.create_input_signature, self.create_output_signature, self.activity_name, '']])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['transformation_add_%s' % ({'ManualOperation': 'MANUAL', 'ModelTransformation': 'MT', 'ActionLanguage': 'AL'}[self.activity_type]), [self.create_input_signature, self.create_output_signature, self.activity_name, self.upload_code]])]))
     
     def _modifying_mm_enter(self):
         self.addTimer(0, 0.5)
@@ -10492,9 +10497,26 @@ class ActivityCreator(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         evt = parameters[0]
         return evt.startswith('output_browse_')
     
+    def _ready_10_exec(self, parameters):
+        evt = parameters[0]
+        self.upload_code = ""
+    
     def _ready_10_guard(self, parameters):
         evt = parameters[0]
-        return evt == 'confirm'
+        return evt == 'confirm' and self.activity_type != 'ActionLanguage'
+    
+    def _ready_11_exec(self, parameters):
+        evt = parameters[0]
+        from tkFileDialog import askopenfilename
+        self.upload_code = askopenfilename()
+        if self.upload_code is None:
+            self.upload_code = ""
+        else:
+            self.upload_code = open(self.upload_code, 'r').read()
+    
+    def _ready_11_guard(self, parameters):
+        evt = parameters[0]
+        return evt == 'confirm' and self.activity_type == 'ActionLanguage'
     
     def _creating_0_exec(self, parameters):
         result = parameters[0]
@@ -10502,6 +10524,14 @@ class ActivityCreator(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.context = context
         self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", model_to_modify, "--limited"])
     
+    def _creating_0_guard(self, parameters):
+        result = parameters[0]
+        return result is not None
+    
+    def _creating_1_guard(self, parameters):
+        result = parameters[0]
+        return result is None
+    
     def _modifying_mm_0_guard(self, parameters):
         return self.subprocess.poll() is not None
     
@@ -11798,6 +11828,7 @@ class Text(RuntimeClassBase):
         self.entry.config(state=tk.NORMAL)
         self.entry.insert(tk.END, new_value)
         self.entry.config(state=tk.DISABLED)
+        self.entry.see(tk.END)
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("changed_value", None, [self.name, self.entry.get(1.0, tk.END)])]))
     
     def initializeStatechart(self):