Просмотр исходного кода

Communication with MV during activity execution seems to work

Yentl Van Tendeloo 7 лет назад
Родитель
Сommit
501aeaa307
5 измененных файлов с 838 добавлено и 425 удалено
  1. 16 0
      classes/main_app.xml
  2. 24 6
      classes/window/activity.xml
  3. 34 45
      classes/window/process_enact.xml
  4. 763 374
      frontend.py
  5. 1 0
      frontend.xml

+ 16 - 0
classes/main_app.xml

@@ -393,6 +393,22 @@
                             print("Details: " + str(exception))
                         </script>
                     </transition>
+
+                    <transition event="mv_data_input" target=".">
+                        <parameter name="value"/>
+                        <parameter name="context" default="None"/>
+                        <raise event="data_input" scope="narrow" target="'modelverse'">
+                            <parameter expr="value"/>
+                            <parameter expr="context"/>
+                        </raise>
+                    </transition>
+
+                    <transition event="data_output" target=".">
+                        <parameter name="value"/>
+                        <raise event="mv_data_output" scope="broad">
+                            <parameter expr="value"/>
+                        </raise>
+                    </transition>
                 </state>
             </state>
         </parallel>

+ 24 - 6
classes/window/activity.xml

@@ -249,12 +249,30 @@
                         <transition after="0.5" target="."/>
                     </state>
 
-                    <state id="statechart">
-                        <onentry>
-                            <script>
-                                print("Executing SC activity")
-                            </script>
-                        </onentry>
+                    <state id="statechart" initial="init">
+                        <state id="init">
+                            <onentry>
+                                <raise event="create_instance" scope="cd">
+                                    <parameter expr="'browsers'"/>
+                                    <parameter expr="'ChatWindow'"/>
+                                    <parameter expr="self.current_context[2]"/>
+                                    <parameter expr="self.current_context[1]"/>
+                                </raise>
+                            </onentry>
+
+                            <transition event="instance_created" target="../waiting">
+                                <parameter name="assoc_name"/>
+                                <raise event="start_instance" scope="cd">
+                                    <parameter expr="assoc_name"/>
+                                </raise>
+                            </transition>
+                        </state>
+
+                        <state id="waiting">
+                            <onexit>
+                                <raise event="close_window" scope="narrow" target="'browsers'"/>
+                            </onexit>
+                        </state>
                     </state>
 
                     <state id="finished"/>

+ 34 - 45
classes/window/process_enact.xml

@@ -133,7 +133,7 @@
                         <raise event="create_instance" scope="cd">
                             <parameter expr="'activity_browse'"/>
                             <parameter expr="'Button'"/>
-                            <parameter expr="{'parent': self.exec_frame, 'event_parameters': 'execute', 'visual': TextVisual('EXECUTE'), 'tooltip_text': 'Execute the activity'}"/>
+                            <parameter expr="{'parent': self.exec_frame, 'event_parameters': 'execute', 'visual': TextVisual('START'), 'tooltip_text': 'Enact the process'}"/>
                         </raise>
                     </onentry>
 
@@ -178,22 +178,11 @@
                 </transition>
             </state>
 
-            <state id="execute" initial="check_args">
-                <state id="check_args">
-                    <onentry>
-                        <raise event="change_bg" scope="narrow" target="[self.stored_associations['input_%s' % i] for i in self.input_signature.keys()]">
-                            <parameter expr="'light grey'"/>
-                        </raise>
-                    </onentry>
-                    <transition cond="set(self.exec_input_signature.keys()) == set(self.input_signature.keys())" target="../execute">
-                        <raise event="disable" scope="narrow" target="'model_browse_entry'"/>
-                    </transition>
-                </state>
-
+            <state id="execute" initial="execute">
                 <state id="execute">
                     <onentry>
                         <script>
-                            print("Executing activity %s" % self.activity)
+                            print("Executing process %s" % self.activity)
                             print("   Inputs  " + str(self.exec_input_signature))
                         </script>
 
@@ -203,45 +192,45 @@
                         </raise>
                     </onentry>
 
-                    <transition event="mv_response" target="../in_context">
+                    <transition target="../in_context"/>
+                </state>
+
+                <state id="in_context" initial="waiting">
+                    <state id="dialog">
+                        <!-- TODO Add data_input and data_output -->
+                    </state>
+
+                    <state id="manual">
+                        <transition cond="self.subprocess.poll() is not None" target="../waiting">
+                            <raise event="mv_request_context" scope="broad">
+                                <parameter expr="'exit'"/>
+                                <parameter expr="[]"/>
+                                <parameter expr="self.current_context[2]"/>
+                            </raise>
+                        </transition>
+                        <transition after="0.5" target="."/>
+                    </state>
+
+                    <state id="waiting"/>
+
+                    <transition event="mv_response" cond="context[0] == 'OP'" target="manual">
                         <parameter name="context"/>
                         <script>
                             self.current_context = context
+                            print("Got context: " + str(self.current_context))
+                            print("Opening new browser")
+                            self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", context[3], "--limited"])
                         </script>
                     </transition>
-                </state>
 
-                <state id="in_context">
-                    <!-- TODO Add data_input and data_output -->
-                    <transition event="mv_response" cond="result == True" target="../alter_context_result">
-                        <parameter name="result"/>
-                    </transition>
-                    <transition event="mv_response" cond="result == False" target="../../ready">
-                        <parameter name="result"/>
+                    <transition event="mv_response" cond="context[0] == 'SC'" target="dialog">
+                        <parameter name="context"/>
+                        <script>
+                            print("Executing dialog with MV (not implemented...)")
+                            self.current_context = context
+                        </script>
                     </transition>
                 </state>
-
-                <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="../../../closing"/>
-                    </state>
-
-                    <state id="add">
-                        <onentry>
-                            <script>
-                                tag, model = self.exec_output_signature.popitem()
-                                metamodel = self.output_signature[tag]
-                            </script>
-                            <raise event="mv_request" scope="broad">
-                                <parameter expr="'alter_context'"/>
-                                <parameter expr="[model, metamodel]"/>
-                            </raise>
-                        </onentry>
-
-                        <transition event="mv_response" target="../check_next"/>
-                    </state>
-                </state>
             </state>
 
             <state id="browse_activity" initial="create_browser">

Разница между файлами не показана из-за своего большого размера
+ 763 - 374
frontend.py


+ 1 - 0
frontend.xml

@@ -41,6 +41,7 @@
     <class src="classes/toolbar/dsl_toolbar.xml"/>
     <class src="classes/toolbar/metamodelling_toolbar.xml"/>
     <class src="classes/toolbar/concretesyntax_toolbar.xml"/>
+    <class src="classes/widgets/text.xml"/>
     <class src="classes/widgets/entry.xml"/>
     <class src="classes/widgets/button.xml"/>
     <class src="classes/widgets/dropdown.xml"/>