ソースを参照

Update GUI for off-band execution of activities and processes

Yentl Van Tendeloo 7 年 前
コミット
7ed53c3bfc

+ 10 - 0
add_render_OD.py

@@ -0,0 +1,10 @@
+import sys
+sys.path.append("../modelverse/wrappers")
+from modelverse import *
+
+try:
+    init()
+    login("admin", "admin")
+    transformation_add_AL({"rendered": "formalisms/MM_render", "abstract": sys.argv[1]}, {"rendered": "formalisms/MM_render"}, "models/render_OD/" + sys.argv[1], open("models/render_OD.alc", 'r').read())
+except:
+    pass

+ 84 - 87
classes/main_app.xml

@@ -10,6 +10,7 @@
         <parameter name="password"/>
         <parameter name="model"/>
         <parameter name="limited_mode"/>
+        <parameter name="taskname"/>
         <body>
             self.nr_of_windows = 0
             self.root = root
@@ -25,6 +26,7 @@
             data['password'] = password
             data['mv_address'] = location
             data['timeout'] = 20.0
+            data['taskname'] = taskname
         </body>
     </constructor>
     <scxml initial="parallel">
@@ -56,6 +58,7 @@
                             <raise event="create_instance" scope="cd">
                                 <parameter expr="'modelverse'"/>
                                 <parameter expr="'Modelverse'"/>
+                                <parameter expr="data['taskname']"/>
                             </raise>
 
                             <raise event="update_status" scope="narrow" target="self.splash_window">
@@ -107,12 +110,91 @@
                             </raise>
                         </onentry>
 
-                        <transition event="mv_response" target="../logging_in_modelverse/login">
+                        <transition event="mv_response" cond="data['taskname'] is None" target="../logging_in_modelverse/login">
                             <raise event="update_status" scope="narrow" target="self.splash_window">
                                 <parameter expr="40"/>
                                 <parameter expr="'Waiting for Modelverse initialization... OK'"/>
                             </raise>
                         </transition>
+
+                        <transition event="mv_response" cond="data['taskname'] is not None" target="../conversing">
+                            <raise event="update_status" scope="narrow" target="self.splash_window">
+                                <parameter expr="40"/>
+                                <parameter expr="'Waiting for Modelverse initialization... OK'"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="conversing" initial="init">
+                        <onentry>
+                            <script>
+                                print("Conversing!")
+                            </script>
+                        </onentry>
+
+                        <state id="init">
+                            <transition event="mv_response" cond="result == 'OP'" target="../execute_OP">
+                                <parameter name="result"/>
+                            </transition>
+                            <transition event="mv_response" cond="result == 'SC'" target="../execute_SC">
+                                <parameter name="result"/>
+                            </transition>
+                        </state>
+
+                        <state id="execute_OP" initial="wait_model">
+                            <state id="wait_model">
+                                <transition event="mv_response" target="../wait_subprocess">
+                                    <parameter name="result"/>
+                                    <script>
+                                        self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", result, "--limited"])
+                                    </script>
+                                </transition>
+                            </state>
+
+                            <state id="wait_subprocess">
+                                <transition cond="self.subprocess.poll() is not None" target="../stopping">
+                                    <raise event="mv_data_input">
+                                        <parameter expr="None"/>
+                                        <parameter expr="None"/>
+                                    </raise>
+                                    <script>
+                                        print("Finished execution of manual!")
+                                    </script>
+                                </transition>
+                                <transition after="0.5" target="."/>
+                            </state>
+
+                            <state id="stopping">
+                                <transition after="2.0" target="../../../../stopped"/>
+                            </state>
+                        </state>
+
+                        <state id="execute_SC" initial="spawn_chatwindow">
+                            <onentry>
+                                <raise event="create_instance" scope="cd">
+                                    <parameter expr="'windows'"/>
+                                    <parameter expr="'ChatWindow'"/>
+                                </raise>
+                            </onentry>
+
+                            <state id="spawn_chatwindow">
+                                <transition event="instance_created" target=".">
+                                    <parameter name="assoc_name"/>
+                                    <raise event="start_instance" scope="cd">
+                                        <parameter expr="assoc_name"/>
+                                    </raise>
+                                    <raise event="assoc_name" scope="narrow" target="assoc_name">
+                                        <parameter expr="assoc_name"/>
+                                    </raise>
+                                </transition>
+
+                                <transition event="delete_me" target="../../../../stopped">
+                                    <script>
+                                        sys.exit(0)
+                                    </script>
+                                </transition>
+                            </state>
+                        </state>
                     </state>
 
                     <state id="logging_in_modelverse" initial="prompt_username">
@@ -207,92 +289,7 @@
                                 </raise>
                             </onentry>
 
-                            <transition target="../upload_models"/>
-                        </state>
-
-                        <state id="upload_models" initial="upload_MM_render">
-                            <state id="upload_MM_render">
-                                <onentry>
-                                    <raise event="mv_request">
-                                        <parameter expr="'model_add'"/>
-                                        <parameter expr="['formalisms/MM_render', 'formalisms/SimpleClassDiagrams', open('models/MM_render.mvc', 'r').read()]"/>
-                                    </raise>
-                                    <raise event="update_status" scope="narrow" target="self.splash_window">
-                                        <parameter expr="75"/>
-                                        <parameter expr="'Uploading MM render...'"/>
-                                    </raise>
-                                </onentry>
-
-                                <transition event="mv_exception" target="../upload_render_SCD"/>
-                                <transition event="mv_response" target="../upload_render_SCD"/>
-                            </state>
-
-                            <state id="upload_render_SCD">
-                                <onentry>
-                                    <raise event="mv_request">
-                                        <parameter expr="'transformation_add_AL'"/>
-                                        <parameter expr="[{'rendered': 'formalisms/MM_render', 'abstract': 'formalisms/SimpleClassDiagrams'}, {'rendered': 'formalisms/MM_render'}, 'models/render_SCD', open('models/render_SCD.alc', 'r').read()]"/>
-                                    </raise>
-                                    <raise event="update_status" scope="narrow" target="self.splash_window">
-                                        <parameter expr="80"/>
-                                        <parameter expr="'Uploading render_SCD...'"/>
-                                    </raise>
-                                </onentry>
-
-                                <transition event="mv_exception" target="../../../wait_close_splash"/>
-                                <transition event="mv_response" target="../modify_render_SCD">
-                                    <parameter name="result"/>
-                                    <script>
-                                        self.context, model = result
-                                    </script>
-                                </transition>
-                            </state>
-
-                            <state id="modify_render_SCD" initial="trace_class">
-                                <onexit>
-                                    <script>
-                                        self.context = None
-                                    </script>
-                                </onexit>
-
-                                <state id="trace_class">
-                                    <onentry>
-                                        <raise event="mv_request_context">
-                                            <parameter expr="'instantiate'"/>
-                                            <parameter expr="[None, 'Association', ('abstract/Class', 'rendered/Group'), 'TracabilityClass']"/>
-                                            <parameter expr="self.context"/>
-                                        </raise>
-                                    </onentry>
-
-                                    <transition event="mv_response" target="../trace_association"/>
-                                </state>
-
-                                <state id="trace_association">
-                                    <onentry>
-                                        <raise event="mv_request_context">
-                                            <parameter expr="'instantiate'"/>
-                                            <parameter expr="[None, 'Association', ('abstract/Association', 'rendered/ConnectingLine'), 'TracabilityAssociation']"/>
-                                            <parameter expr="self.context"/>
-                                        </raise>
-                                    </onentry>
-
-                                    <transition event="mv_response" target="../exit"/>
-                                </state>
-
-                                <state id="exit">
-                                    <onentry>
-                                        <raise event="mv_request_context">
-                                            <parameter expr="'exit'"/>
-                                            <parameter expr="[]"/>
-                                            <parameter expr="self.context"/>
-                                        </raise>
-                                    </onentry>
-
-                                    <transition event="mv_response" target="../../../../wait_close_splash"/>
-                                </state>
-
-                                <transition event="mv_exception" target="../../../wait_close_splash"/>
-                            </state>
+                            <transition target="../../wait_close_splash"/>
                         </state>
                     </state>
 

+ 5 - 68
classes/window/activity.xml

@@ -250,79 +250,16 @@
                             <raise event="start" scope="narrow" target="'progressbar'"/>
                         </onentry>
 
-                        <transition event="mv_response" target="../in_context">
-                            <parameter name="context"/>
+                        <transition event="mv_response" target="../processing">
+                            <parameter name="taskname"/>
                             <script>
-                                self.current_context = context
-                                print("Entering context: " + str(self.current_context))
+                                subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--taskname", taskname])
                             </script>
                         </transition>
                     </state>
 
-                    <state id="in_context" initial="choice">
-                        <state id="choice">
-                            <transition cond="self.current_context[0] == 'SC'" target="../statechart"/>
-                            <transition cond="self.current_context[0] == 'OP'" target="../operations">
-                                <script>
-                                    self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", self.current_context[3], "--limited"])
-                                </script>
-                            </transition>
-                        </state>
-
-                        <state id="operations">
-                            <transition cond="self.subprocess.poll() is not None" target="../finished">
-                                <raise event="mv_request_context" scope="broad">
-                                    <parameter expr="'drop'"/>
-                                    <parameter expr="[]"/>
-                                    <parameter expr="self.current_context[2]"/>
-                                </raise>
-                            </transition>
-                            <transition after="0.5" target="."/>
-                        </state>
-
-                        <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>
-                                    <raise event="assoc_name" scope="narrow" target="assoc_name">
-                                        <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"/>
-
-                        <transition event="mv_response" cond="result == True" target="../alter_context_result">
-                            <parameter name="result"/>
-                            <script>
-                                print("Finished with TRUE")
-                            </script>
-                        </transition>
-                        <transition event="mv_response" cond="result == False" target="../../closing">
-                            <parameter name="result"/>
-                            <script>
-                                print("Finished with FALSE")
-                            </script>
-                        </transition>
+                    <state id="processing">
+                        <transition event="mv_response" target="../alter_context_result"/>
                     </state>
 
                     <state id="alter_context_result" initial="check_next">

+ 5 - 6
classes/window/chatwindow.xml

@@ -8,14 +8,11 @@
     </relationships>
 
     <constructor>
-        <parameter name="context"/>
-        <parameter name="activity_name"/>
         <super class="tk.TopLevel"/>
         <super class="SCCDWidget"/>
         <body>
-            tk.Label(self, text="Executing %s" % activity_name).pack()
             self.input_value = ""
-            self.context = context
+            print("Start up chatwindow!")
         </body>
     </constructor>
 
@@ -138,10 +135,10 @@
                 <parameter name="event_name"/>
                 <raise event="mv_data_input" scope="broad">
                     <parameter expr="self.input_value"/>
-                    <parameter expr="self.context"/>
+                    <parameter expr="None"/>
                 </raise>
                 <script>
-                    print("Sent data to context " + str(self.context))
+                    print("Sent data")
                 </script>
                 <raise event="change_value" scope="narrow" target="self.entry_input">
                     <parameter expr="''"/>
@@ -166,6 +163,8 @@
                 </script>
             </transition>
 
+            <transition event="mv_response" target="../closing"/>
+
             <transition event="close_window" target="../closing"/>
         </state>
 

+ 8 - 11
classes/window/create_activity.xml

@@ -704,17 +704,15 @@
                 </raise>
             </onentry>
 
-            <transition event="mv_response" cond="result is not None" target="../modifying_mm">
-                <parameter name="result"/>
+            <transition event="mv_response" cond="model is not None" target="../modifying_mm">
+                <parameter name="model"/>
                 <script>
-                    context, model_to_modify = result
-                    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"])
+                    self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", model, "--limited"])
                 </script>
             </transition>
 
-            <transition event="mv_response" cond="result is None" target="../closing">
-                <parameter name="result"/>
+            <transition event="mv_response" cond="model is None" target="../closing">
+                <parameter name="model"/>
             </transition>
         </state>
 
@@ -725,10 +723,9 @@
 
         <state id="finish_transformation_add">
             <onentry>
-                <raise event="mv_request_context" scope="broad">
-                    <parameter expr="'drop'"/>
-                    <parameter expr="[]"/>
-                    <parameter expr="self.context"/>
+                <raise event="mv_data_input" scope="broad">
+                    <parameter expr="None"/>
+                    <parameter expr="None"/>
                 </raise>
             </onentry>
 

+ 7 - 42
classes/window/main_window.xml

@@ -304,57 +304,22 @@
                     <state id="add_object_diagrams" initial="init">
                         <state id="init">
                             <onentry>
-                                <raise event="mv_request" scope="broad">
-                                    <parameter expr="'transformation_add_AL'"/>
-                                    <parameter expr="[{'rendered': 'formalisms/MM_render', 'abstract': current_metamodel}, {'rendered': 'formalisms/MM_render'}, 'models/render_OD/' + current_metamodel, open('models/render_OD.alc', 'r').read()]"/>
-                                </raise>
+                                <script>
+                                    self.subprocess = subprocess.Popen([sys.executable, "add_render_OD.py", current_metamodel])
+                                </script>
+
                                 <raise event="update_status" scope="narrow" target="'progress_bar'">
                                     <parameter expr="10"/>
                                     <parameter expr="'Adding transformation...'"/>
                                 </raise>
                             </onentry>
 
-                            <transition event="mv_response" target="../modify_render_OD">
-                                <parameter name="result"/>
-                                <raise event="update_status" scope="narrow" target="'progress_bar'">
-                                    <parameter expr="25"/>
-                                    <parameter expr="'Switching contexts...'"/>
-                                </raise>
+                            <transition cond="self.subprocess.poll() is not None" target="../../open_model/search_CS_mappers">
                                 <script>
-                                    self.context, model = result
+                                    global current_mapper
+                                    current_mapper = 'models/render_OD/' + current_metamodel
                                 </script>
                             </transition>
-
-                            <transition event="mv_exception" target="../../idle"/>
-                        </state>
-
-                        <state id="modify_render_OD" initial="exit">
-                            <onexit>
-                                <script>
-                                    self.context = None
-                                </script>
-                            </onexit>
-
-                            <state id="exit">
-                                <onentry>
-                                    <raise event="mv_request_context" scope="broad">
-                                        <parameter expr="'exit'"/>
-                                        <parameter expr="[]"/>
-                                        <parameter expr="self.context"/>
-                                    </raise>
-                                    <raise event="update_status" scope="narrow" target="'progress_bar'">
-                                        <parameter expr="30"/>
-                                        <parameter expr="'Modifying transformation merged metamodel...'"/>
-                                    </raise>
-                                </onentry>
-
-                                <transition event="mv_response" target="../../../open_model/search_CS_mappers">
-                                    <script>
-                                        global current_mapper
-                                        current_mapper = 'models/render_OD/' + current_metamodel
-                                    </script>
-                                </transition>
-                            </state>
                         </state>
                     </state>
 

+ 5 - 84
classes/window/process_enact.xml

@@ -211,12 +211,6 @@
                 <state id="execute" initial="execute">
                     <state id="execute">
                         <onentry>
-                            <script>
-                                print("Executing process %s" % self.activity)
-                                print("   Inputs  " + str(self.exec_input_signature))
-                                self.current_context = ["NONE"]
-                            </script>
-
                             <raise event="mv_request" scope="broad">
                                 <parameter expr="'process_execute'"/>
                                 <parameter expr="[self.activity, self.exec_input_signature]"/>
@@ -228,89 +222,16 @@
                         <transition target="../in_context"/>
                     </state>
 
-                    <state id="in_context" initial="choice">
-                        <state id="choice">
-                            <transition cond="self.current_context[0] == 'SC'" target="../statechart"/>
-                            <transition cond="self.current_context[0] == 'OP'" target="../operations">
-                                <script>
-                                    self.subprocess = subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--model", self.current_context[3], "--limited"])
-                                </script>
-                            </transition>
-                        </state>
-
-                        <state id="operations">
-                            <transition cond="self.subprocess.poll() is not None" target="../finished">
-                                <raise event="mv_request_context" scope="broad">
-                                    <parameter expr="'drop'"/>
-                                    <parameter expr="[]"/>
-                                    <parameter expr="self.current_context[2]"/>
-                                </raise>
-                            </transition>
-                            <transition after="0.5" target="."/>
-                        </state>
-
-                        <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>
-                                    <raise event="assoc_name" scope="narrow" target="assoc_name">
-                                        <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"/>
-                        
-                        <transition event="mv_response" cond="isinstance(result, list) and result[0] == 'OP'" target="operations">
+                    <state id="in_context">
+                        <transition event="mv_response" cond="result == 'Success'" target="../alter_context_result">
                             <parameter name="result"/>
-                            <script>
-                                context = result
-                                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>
-
-                        <transition event="mv_response" cond="isinstance(result, list) and result[0] == 'SC'" target="statechart">
-                            <parameter name="result"/>
-                            <script>
-                                context = result
-                                print("Executing dialog with MV (not implemented...)")
-                                self.current_context = context
-                            </script>
-                        </transition>
-
-                        <transition event="mv_response" cond="not isinstance(result, list) and result == True" target="../alter_context_result">
-                            <parameter name="result"/>
-                            <script>
-                                print("Finished with TRUE")
-                            </script>
                         </transition>
 
-                        <transition event="mv_response" cond="not isinstance(result, list) and result == False" target="../../closing">
+                        <transition event="mv_response" cond="result != 'Success'" target=".">
                             <parameter name="result"/>
                             <script>
-                                print("Finished with FALSE")
+                                taskname, operation = result
+                                subprocess.Popen([sys.executable, sys.argv[0], "--address", data['mv_address'], "--username", data['username'], "--password", data['password'], "--taskname", taskname])
                             </script>
                         </transition>
                     </state>

ファイルの差分が大きいため隠しています
+ 689 - 1086
frontend.py


+ 1 - 0
run.sh

@@ -1,2 +1,3 @@
 #!/bin/bash
+python upload_models.py
 python -m sccd.compiler.sccdc -p eventloop frontend.xml && python runner.py

+ 4 - 3
runner.py

@@ -11,10 +11,10 @@ class Root(tk.Tk, SCCDWidget):
         tk.Tk.__init__(self)
         SCCDWidget.__init__(self)
 
-def run_GUI(location, username, password, model, limited_mode):
+def run_GUI(location, username, password, model, limited_mode, taskname):
     root = Root()
     root.withdraw()
-    controller = frontend.Controller(root, location, username, password, model, limited_mode, TkEventLoop(root))
+    controller = frontend.Controller(root, location, username, password, model, limited_mode, taskname, TkEventLoop(root))
     socket2event.boot_translation_service(controller)
 
     SCCDWidget.controller = controller
@@ -28,7 +28,8 @@ if __name__ == '__main__':
     parser.add_argument("--password", default="admin", type=str)
     parser.add_argument("--model", default=None, type=str)
     parser.add_argument("--limited", action="store_true")
+    parser.add_argument("--taskname", default=None, type=str)
 
     args = parser.parse_args()
 
-    run_GUI(args.address, args.username, args.password, args.model, args.limited)
+    run_GUI(args.address, args.username, args.password, args.model, args.limited, args.taskname)

+ 16 - 0
upload_models.py

@@ -0,0 +1,16 @@
+import sys
+sys.path.append("../modelverse/wrappers")
+
+from modelverse import *
+
+def scd_tracability(model):
+    instantiate(model, "Association", ("abstract/Class", "rendered/Group"), ID="TracabilityClass")
+    instantiate(model, "Association", ("abstract/Association", "rendered/ConnectingLine"), ID="TracabilityAssociation")
+
+try:
+    init()
+    login("admin", "admin")
+    model_add("formalisms/MM_render", "formalisms/SimpleClassDiagrams", open("models/MM_render.mvc", 'r').read())
+    transformation_add_AL({"rendered": "formalisms/MM_render", "abstract": "formalisms/SimpleClassDiagrams"}, {"rendered": "formalisms/MM_render"}, "models/render_SCD", open("models/render_SCD.alc", 'r').read(), callback=scd_tracability)
+except:
+    pass