예제 #1
0
    def get_flatted_representation(self, meta_data=MetaData()):
        """
        Trans 1: A -> B
        Trans 2: B -> C
        Trans 3 Q-Start: C -> D
        Trans 4: C -> D
        Trans 5: C -> D
        Trans 6 Q-End: C -> D
        Trans 7: D -> E

        :returns:
        states = [A, B, C, D, D, D, D, E]
        transitions = [A -> B, B -> C, C -> D, D -> D, D -> D, D -> D, D -> E]
        """
        transitions = []
        states = []
        flatted_meta_data = MetaData()
        last_res_s = None
        processing_queue = False
        for trans in self.transitions:
            src_s = trans.source_state_o
            res_s = trans.resulting_state_o
            if processing_queue:
                states.append(res_s)
                new_trans = Transition(
                    trans.resulting_state, trans.resulting_state_o,
                    trans.action, trans.interacted_widget,
                    trans.interacted_widget_o, trans.resulting_state,
                    trans.resulting_state_o, trans.start_time, trans.end_time,
                    trans.successful, trans.exception, trans.data,
                    trans.action_id, trans.has_result_screen, trans.custom)
                transitions.append(new_trans)
                # We copy the data of the sequence element within the original meta data and apply to the
                # flatted states and transition representation
                if self in meta_data.data:
                    flatted_meta_data.put(res_s, meta_data.get(self))
                    flatted_meta_data.put(new_trans, meta_data.get(self))
            else:
                if last_res_s != src_s:
                    states.append(src_s)
                    if self in meta_data.data:
                        flatted_meta_data.put(src_s, meta_data.get(self))
                states.append(res_s)
                transitions.append(trans)
                # We copy the data of the sequence element within the origin meta data and apply to the
                # flatted states and transition representation
                if self in meta_data.data:
                    flatted_meta_data.put(res_s, meta_data.get(self))
                    flatted_meta_data.put(trans, meta_data.get(self))
                last_res_s = res_s

            if droidmateutil.is_queue_start(trans):
                processing_queue = True
            if droidmateutil.is_queue_end(trans):
                processing_queue = False
        return states, transitions, flatted_meta_data