浏览代码

Look up an arbitrary metamodel when none registered

Yentl Van Tendeloo 7 年之前
父节点
当前提交
d08e0499b6
共有 3 个文件被更改,包括 148 次插入52 次删除
  1. 47 22
      classes/modelverse/modelverse.xml
  2. 22 7
      classes/window/main_window.xml
  3. 79 23
      frontend.py

文件差异内容过多而无法显示
+ 47 - 22
classes/modelverse/modelverse.xml


+ 22 - 7
classes/window/main_window.xml

@@ -366,18 +366,17 @@
                             <script>
                                 print("MM -> " + current_metamodel)
                             </script>
-                            <raise event="mv_request" scope="broad">
-                                <parameter expr="'alter_context'"/>
-                                <parameter expr="[current_model, current_metamodel]"/>
-                            </raise>
-
                             <raise event="update_status" scope="narrow" target="'progress_bar'">
                                 <parameter expr="20"/>
                                 <parameter expr="'Storing model context...'"/>
                             </raise>
+                            <raise event="mv_request" scope="broad">
+                                <parameter expr="'alter_context'"/>
+                                <parameter expr="[current_model, current_metamodel]"/>
+                            </raise>
                         </onentry>
 
-                        <transition event="mv_response" target="../open_model/search_CS_mappers"/>
+                        <transition target="../open_model/search_CS_mappers"/>
                     </state>
 
                     <state id="conf_bottom" initial="check_if_exists">
@@ -449,6 +448,11 @@
                                         global current_metamodel
                                         current_metamodel = result
                                     </script>
+
+                                    <raise event="mv_request" scope="broad">
+                                        <parameter expr="'alter_context'"/>
+                                        <parameter expr="[current_model, current_metamodel]"/>
+                                    </raise>
                                 </transition>
 
                                 <transition event="close_window" target="../../../idle">
@@ -611,6 +615,12 @@
                                         current_metamodel = 'formalisms/Bottom'
                                     self.allowed_metamodels = result
                                 </script>
+
+                                <raise event="mv_request" scope="broad">
+                                    <parameter expr="'alter_context'"/>
+                                    <parameter expr="[current_model, current_metamodel]"/>
+                                </raise>
+
                                 <raise event="update_status" scope="narrow" target="'progress_bar'">
                                     <parameter expr="20"/>
                                     <parameter expr="'Querying existing metamodels... OK'"/>
@@ -642,7 +652,7 @@
                                             print("CHANGING MAPPER TO " + str(current_mapper))
                                     else:
                                         current_mapper = None
-                                        print("REMOVING MAPPER")
+                                        print("NO MAPPER found")
                                 </script>
                             </transition>
                         </state>
@@ -754,6 +764,11 @@
                                     global current_metamodel
                                     current_metamodel = result
                                 </script>
+
+                                <raise event="mv_request" scope="broad">
+                                    <parameter expr="'alter_context'"/>
+                                    <parameter expr="[current_model, current_metamodel]"/>
+                                </raise>
                             </transition>
                         </state>
 

+ 79 - 23
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:   Mon Oct 30 10:35:31 2017
+Date:   Mon Oct 30 11:26:57 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   Modelverse Visual Editor - Tkinter Version 
@@ -1017,21 +1017,32 @@ class Modelverse(RuntimeClassBase):
         
         # state /initialized/behaviour/going_manual
         self.states["/initialized/behaviour/going_manual"] = State(120, "/initialized/behaviour/going_manual", self)
-        self.states["/initialized/behaviour/going_manual"].setEnter(self._initialized_behaviour_going_manual_enter)
+        
+        # state /initialized/behaviour/going_manual/init
+        self.states["/initialized/behaviour/going_manual/init"] = State(121, "/initialized/behaviour/going_manual/init", self)
+        self.states["/initialized/behaviour/going_manual/init"].setEnter(self._initialized_behaviour_going_manual_init_enter)
+        
+        # state /initialized/behaviour/going_manual/search
+        self.states["/initialized/behaviour/going_manual/search"] = State(122, "/initialized/behaviour/going_manual/search", self)
+        self.states["/initialized/behaviour/going_manual/search"].setEnter(self._initialized_behaviour_going_manual_search_enter)
+        
+        # state /initialized/behaviour/going_manual/OK
+        self.states["/initialized/behaviour/going_manual/OK"] = State(123, "/initialized/behaviour/going_manual/OK", self)
+        self.states["/initialized/behaviour/going_manual/OK"].setEnter(self._initialized_behaviour_going_manual_OK_enter)
         
         # state /initialized/behaviour/going_scripted
-        self.states["/initialized/behaviour/going_scripted"] = State(121, "/initialized/behaviour/going_scripted", self)
+        self.states["/initialized/behaviour/going_scripted"] = State(124, "/initialized/behaviour/going_scripted", self)
         self.states["/initialized/behaviour/going_scripted"].setEnter(self._initialized_behaviour_going_scripted_enter)
         
         # state /initialized/behaviour/leaving_manual
-        self.states["/initialized/behaviour/leaving_manual"] = State(122, "/initialized/behaviour/leaving_manual", self)
+        self.states["/initialized/behaviour/leaving_manual"] = State(125, "/initialized/behaviour/leaving_manual", self)
         self.states["/initialized/behaviour/leaving_manual"].setEnter(self._initialized_behaviour_leaving_manual_enter)
         
         # state /initialized/queue
-        self.states["/initialized/queue"] = State(123, "/initialized/queue", self)
+        self.states["/initialized/queue"] = State(126, "/initialized/queue", self)
         
         # state /initialized/queue/queue
-        self.states["/initialized/queue/queue"] = State(124, "/initialized/queue/queue", self)
+        self.states["/initialized/queue/queue"] = State(127, "/initialized/queue/queue", self)
         
         # add children
         self.states[""].addChild(self.states["/init"])
@@ -1157,6 +1168,9 @@ class Modelverse(RuntimeClassBase):
         self.states["/initialized/behaviour/wait_for_action/modelling"].addChild(self.states["/initialized/behaviour/wait_for_action/modelling/recognized"])
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addChild(self.states["/initialized/behaviour/wait_for_action/modelling/recognized/manual"])
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addChild(self.states["/initialized/behaviour/wait_for_action/modelling/recognized/scripted"])
+        self.states["/initialized/behaviour/going_manual"].addChild(self.states["/initialized/behaviour/going_manual/init"])
+        self.states["/initialized/behaviour/going_manual"].addChild(self.states["/initialized/behaviour/going_manual/search"])
+        self.states["/initialized/behaviour/going_manual"].addChild(self.states["/initialized/behaviour/going_manual/OK"])
         self.states["/initialized/queue"].addChild(self.states["/initialized/queue/queue"])
         self.states[""].fixTree()
         self.states[""].default_state = self.states["/init"]
@@ -1183,6 +1197,7 @@ class Modelverse(RuntimeClassBase):
         self.states["/initialized/behaviour/wait_for_action"].default_state = self.states["/initialized/behaviour/wait_for_action/disconnected"]
         self.states["/initialized/behaviour/wait_for_action/modelling"].default_state = self.states["/initialized/behaviour/wait_for_action/modelling/recognized"]
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].default_state = self.states["/initialized/behaviour/wait_for_action/modelling/recognized/manual"]
+        self.states["/initialized/behaviour/going_manual"].default_state = self.states["/initialized/behaviour/going_manual/init"]
         self.states["/initialized/queue"].default_state = self.states["/initialized/queue/queue"]
         
         # transition /init
@@ -2059,6 +2074,7 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_wait_for_action_megamodelling_35.setGuard(self._initialized_behaviour_wait_for_action_megamodelling_35_guard)
         self.states["/initialized/behaviour/wait_for_action/megamodelling"].addTransition(_initialized_behaviour_wait_for_action_megamodelling_35)
         _initialized_behaviour_wait_for_action_megamodelling_36 = Transition(self, self.states["/initialized/behaviour/wait_for_action/megamodelling"], [self.states["/initialized/behaviour/going_manual"]])
+        _initialized_behaviour_wait_for_action_megamodelling_36.setAction(self._initialized_behaviour_wait_for_action_megamodelling_36_exec)
         _initialized_behaviour_wait_for_action_megamodelling_36.setTrigger(None)
         _initialized_behaviour_wait_for_action_megamodelling_36.setGuard(self._initialized_behaviour_wait_for_action_megamodelling_36_guard)
         self.states["/initialized/behaviour/wait_for_action/megamodelling"].addTransition(_initialized_behaviour_wait_for_action_megamodelling_36)
@@ -2080,16 +2096,33 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_wait_for_action_modelling_recognized_scripted_0.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_scripted_0_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized/scripted"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_scripted_0)
         
-        # transition /initialized/behaviour/going_manual
-        _initialized_behaviour_going_manual_0 = Transition(self, self.states["/initialized/behaviour/going_manual"], [self.states["/initialized/behaviour/wait_for_action/modelling/recognized/manual"]])
-        _initialized_behaviour_going_manual_0.setTrigger(None)
-        _initialized_behaviour_going_manual_0.setGuard(self._initialized_behaviour_going_manual_0_guard)
-        self.states["/initialized/behaviour/going_manual"].addTransition(_initialized_behaviour_going_manual_0)
-        _initialized_behaviour_going_manual_1 = Transition(self, self.states["/initialized/behaviour/going_manual"], [self.states["/initialized/behaviour/wait_for_action/megamodelling"]])
-        _initialized_behaviour_going_manual_1.setAction(self._initialized_behaviour_going_manual_1_exec)
-        _initialized_behaviour_going_manual_1.setTrigger(None)
-        _initialized_behaviour_going_manual_1.setGuard(self._initialized_behaviour_going_manual_1_guard)
-        self.states["/initialized/behaviour/going_manual"].addTransition(_initialized_behaviour_going_manual_1)
+        # transition /initialized/behaviour/going_manual/init
+        _initialized_behaviour_going_manual_init_0 = Transition(self, self.states["/initialized/behaviour/going_manual/init"], [self.states["/initialized/behaviour/going_manual/OK"]])
+        _initialized_behaviour_going_manual_init_0.setTrigger(None)
+        _initialized_behaviour_going_manual_init_0.setGuard(self._initialized_behaviour_going_manual_init_0_guard)
+        self.states["/initialized/behaviour/going_manual/init"].addTransition(_initialized_behaviour_going_manual_init_0)
+        _initialized_behaviour_going_manual_init_1 = Transition(self, self.states["/initialized/behaviour/going_manual/init"], [self.states["/initialized/behaviour/going_manual/search"]])
+        _initialized_behaviour_going_manual_init_1.setTrigger(None)
+        _initialized_behaviour_going_manual_init_1.setGuard(self._initialized_behaviour_going_manual_init_1_guard)
+        self.states["/initialized/behaviour/going_manual/init"].addTransition(_initialized_behaviour_going_manual_init_1)
+        
+        # transition /initialized/behaviour/going_manual/search
+        _initialized_behaviour_going_manual_search_0 = Transition(self, self.states["/initialized/behaviour/going_manual/search"], [self.states["/initialized/behaviour/going_manual/OK"]])
+        _initialized_behaviour_going_manual_search_0.setAction(self._initialized_behaviour_going_manual_search_0_exec)
+        _initialized_behaviour_going_manual_search_0.setTrigger(None)
+        _initialized_behaviour_going_manual_search_0.setGuard(self._initialized_behaviour_going_manual_search_0_guard)
+        self.states["/initialized/behaviour/going_manual/search"].addTransition(_initialized_behaviour_going_manual_search_0)
+        
+        # transition /initialized/behaviour/going_manual/OK
+        _initialized_behaviour_going_manual_OK_0 = Transition(self, self.states["/initialized/behaviour/going_manual/OK"], [self.states["/initialized/behaviour/wait_for_action/modelling/recognized/manual"]])
+        _initialized_behaviour_going_manual_OK_0.setTrigger(None)
+        _initialized_behaviour_going_manual_OK_0.setGuard(self._initialized_behaviour_going_manual_OK_0_guard)
+        self.states["/initialized/behaviour/going_manual/OK"].addTransition(_initialized_behaviour_going_manual_OK_0)
+        _initialized_behaviour_going_manual_OK_1 = Transition(self, self.states["/initialized/behaviour/going_manual/OK"], [self.states["/initialized/behaviour/wait_for_action/megamodelling"]])
+        _initialized_behaviour_going_manual_OK_1.setAction(self._initialized_behaviour_going_manual_OK_1_exec)
+        _initialized_behaviour_going_manual_OK_1.setTrigger(None)
+        _initialized_behaviour_going_manual_OK_1.setGuard(self._initialized_behaviour_going_manual_OK_1_guard)
+        self.states["/initialized/behaviour/going_manual/OK"].addTransition(_initialized_behaviour_going_manual_OK_1)
         
         # transition /initialized/behaviour/going_scripted
         _initialized_behaviour_going_scripted_0 = Transition(self, self.states["/initialized/behaviour/going_scripted"], [self.states["/initialized/behaviour/wait_for_action/modelling/recognized/scripted"]])
@@ -2523,9 +2556,14 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_save_enter(self):
         self.raiseInternalEvent(Event("request", None, [['exit', 'model_modify', self.current_model]]))
     
-    def _initialized_behaviour_going_manual_enter(self):
+    def _initialized_behaviour_going_manual_init_enter(self):
         self.context = None
         self.current_model = self.actions[None][0]["parameters"][0]
+    
+    def _initialized_behaviour_going_manual_search_enter(self):
+        self.raiseInternalEvent(Event("request", None, [['model_types', self.current_model]]))
+    
+    def _initialized_behaviour_going_manual_OK_enter(self):
         self.raiseInternalEvent(Event("request", None, [['model_modify', self.current_model, self.registered_metamodel[self.current_model]]]))
     
     def _initialized_behaviour_going_scripted_enter(self):
@@ -3560,6 +3598,9 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_wait_for_action_megamodelling_35_guard(self, parameters):
         return self.expect_action(None, 'model_types')
     
+    def _initialized_behaviour_wait_for_action_megamodelling_36_exec(self, parameters):
+        print("Going manual for operations: " + str(self.actions[None]))
+    
     def _initialized_behaviour_wait_for_action_megamodelling_36_guard(self, parameters):
         return self.expect_action(None, ['element_list', 'element_list_nice', 'types', 'types_full', 'read_info', 'read_attrs', 'read_defined_attrs', 'instantiate', 'delete_element', 'attr_assign', 'attr_assign_code', 'attr_delete', 'read_outgoing', 'read_incoming', 'read_association_source', 'read_association_destination', 'connections_between', 'define_attribute', 'undefine_attribute', 'all_instances', 'attr_optional', 'attr_type', 'attr_name'])
     
@@ -3575,15 +3616,27 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_wait_for_action_modelling_recognized_scripted_0_guard(self, parameters):
         return self.expect_action(self.context, 'exit')
     
-    def _initialized_behaviour_going_manual_0_guard(self, parameters):
+    def _initialized_behaviour_going_manual_init_0_guard(self, parameters):
+        return self.current_model in self.registered_metamodel
+    
+    def _initialized_behaviour_going_manual_init_1_guard(self, parameters):
+        return self.current_model not in self.registered_metamodel
+    
+    def _initialized_behaviour_going_manual_search_0_exec(self, parameters):
+        self.registered_metamodel[self.current_model] = set(self.split_response(self.responses.pop(0))).pop()
+    
+    def _initialized_behaviour_going_manual_search_0_guard(self, parameters):
+        return self.expect_response_partial('Success: ')
+    
+    def _initialized_behaviour_going_manual_OK_0_guard(self, parameters):
         return self.expect_response('Model loaded, ready for commands!', pop=True)
     
-    def _initialized_behaviour_going_manual_1_exec(self, parameters):
+    def _initialized_behaviour_going_manual_OK_1_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownMetamodellingHierarchy', 'Conformance relation not found']))
         self.responses.pop(0)
         self.actions[None].pop(0)
     
-    def _initialized_behaviour_going_manual_1_guard(self, parameters):
+    def _initialized_behaviour_going_manual_OK_1_guard(self, parameters):
         return self.expect_response_partial('No conformance relation can be found ', pop=False)
     
     def _initialized_behaviour_leaving_manual_0_guard(self, parameters):
@@ -5373,7 +5426,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         
         # transition /init/init/running/change_metamodel
         _init_init_running_change_metamodel_0 = Transition(self, self.states["/init/init/running/change_metamodel"], [self.states["/init/init/running/open_model/search_CS_mappers"]])
-        _init_init_running_change_metamodel_0.setTrigger(Event("mv_response", None))
+        _init_init_running_change_metamodel_0.setTrigger(None)
         self.states["/init/init/running/change_metamodel"].addTransition(_init_init_running_change_metamodel_0)
         
         # transition /init/init/running/conf_bottom/check_if_exists
@@ -5770,8 +5823,8 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     
     def _init_init_running_change_metamodel_enter(self):
         print("MM -> " + current_metamodel)
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [current_model, current_metamodel]])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [20, 'Storing model context...'])]))
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [current_model, current_metamodel]])]))
     
     def _init_init_running_conf_bottom_add_bottom_enter(self):
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['conformance_add', [current_model, 'formalisms/Bottom']])]))
@@ -5965,6 +6018,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         result = parameters[0]
         global current_metamodel
         current_metamodel = result
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [current_model, current_metamodel]])]))
     
     def _init_init_running_custom_MM_wait_for_metamodel_wait_for_result_0_guard(self, parameters):
         result = parameters[0]
@@ -6018,6 +6072,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         else:
             current_metamodel = 'formalisms/Bottom'
         self.allowed_metamodels = result
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [current_model, current_metamodel]])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'progress_bar', Event("update_status", None, [20, 'Querying existing metamodels... OK'])]))
     
     def _init_init_running_open_model_search_CS_mappers_0_exec(self, parameters):
@@ -6032,7 +6087,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
                 print("CHANGING MAPPER TO " + str(current_mapper))
         else:
             current_mapper = None
-            print("REMOVING MAPPER")
+            print("NO MAPPER found")
     
     def _init_init_running_open_model_check_CS_mapper_0_exec(self, parameters):
         global current_rendered_model
@@ -6074,6 +6129,7 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         result = parameters[0]
         global current_metamodel
         current_metamodel = result
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['alter_context', [current_model, current_metamodel]])]))
     
     def _init_init_running_create_new_model_got_mm_0_exec(self, parameters):
         self.big_step.outputEventOM(Event("delete_instance", None, [self, self.subwindow]))