Пример #1
0
 def writeControllerConstructor(self,
                                class_diagram,
                                controller_sub_class,
                                parameters=[]):
     self.writeConstructorSignature(
         "Controller", parameters + [
             FormalParameter("keep_running", "", "true"),
             FormalParameter("finished_callback", "", None)
         ])
     self.fOut.indent()
     self.fOut.write(
         controller_sub_class +
         ".call(this, new ObjectManager(this), keep_running, finished_callback);"
     )
     for i in class_diagram.inports:
         self.fOut.write('this.addInputPort("' + i + '");')
     for i in class_diagram.outports:
         self.fOut.write('this.addOutputPort("' + i + '");')
     actual_parameters = [p.getIdent() for p in parameters]
     self.fOut.write('this.object_manager.createInstance("' +
                     class_diagram.default_class.name + '", [' +
                     ', '.join(actual_parameters) + ']);')
     self.fOut.dedent()
     self.fOut.write('};')
     self.fOut.write()
Пример #2
0
    def writeTransitionsRecursively(self, current_node):

        self.writeMethodSignature(current_node.statechart.class_obj.name,
                                  "transition_" + current_node.full_name,
                                  [FormalParameter("event", "event")])
        self.fOut.indent()

        valid_children = []
        for child in current_node.children:
            if child.is_composite or child.is_basic:
                valid_children.append(child)

        self.fOut.write("var catched = false;")
        do_dedent = False
        if current_node.solves_conflict_outer:
            self.writeFromTransitions(current_node)
            if current_node.is_parallel_state or current_node.is_composite:
                self.fOut.write("if (!catched) {")
                self.fOut.indent()
                do_dedent = True

        if current_node.is_parallel_state:
            for child in valid_children:
                self.fOut.write("catched = this.transition_" +
                                child.full_name + "(event) || catched")
        elif current_node.is_composite:
            for i, child in enumerate(valid_children):
                if i > 0:
                    self.fOut.write("else ")
                else:
                    self.fOut.write()
                self.fOut.extendWrite("if (this.current_state[this." +
                                      current_node.full_name +
                                      "][0] === this." + child.full_name +
                                      ") {")
                self.fOut.indent()
                self.fOut.write("catched = this.transition_" +
                                child.full_name + "(event);")
                self.fOut.dedent()
                self.fOut.write("}")

        if current_node.solves_conflict_outer:
            if do_dedent:
                self.fOut.dedent()
                self.fOut.write("}")
        elif len(current_node.transitions) > 0:
            self.fOut.write("if (!catched) {")
            self.fOut.indent()
            self.writeFromTransitions(current_node)
            self.fOut.dedent()
            self.fOut.write("}")

        self.fOut.write("return catched;")
        self.fOut.dedent()
        self.fOut.write("};")
        self.fOut.write()

        for child in valid_children:
            self.writeTransitionsRecursively(child)
Пример #3
0
	def writeControllerConstructor(self, class_diagram, parameters = []):
		self.writeMethodSignature('__init__', parameters + [FormalParameter("keep_running", "", "True")])
		self.fOut.indent()
		self.fOut.write("super(Controller, self).__init__(ObjectManager(self), keep_running)")
		for i in class_diagram.inports:
			self.fOut.write('self.addInputPort("' + i + '")')
		for i in class_diagram.outports:
			self.fOut.write('self.addOutputPort("' + i + '")')
		actual_parameters = [p.getIdent() for p in parameters]
		self.fOut.write('self.object_manager.createInstance("'+ class_diagram.default_class.name +'", [' +  ', '.join(actual_parameters)+ '])')
		self.fOut.write()
		self.fOut.dedent()
Пример #4
0
    def visit_Constructor(self, constructor):

        self.fOut.write(constructor.access + " " + constructor.parent_class.name + "(")
        self.writeFormalParameters([FormalParameter("controller", "ControllerBase", None)] + constructor.getParams())
        self.fOut.extendWrite(")")
        self.fOut.write("{")
        self.fOut.indent()
        self.fOut.write("this.commonConstructor(controller);")
        if constructor.body :
            self.fOut.write()
            self.fOut.write("//constructor body (user-defined)")
            self.writeCodeCorrectIndent(constructor.body)
        self.fOut.dedent()
        self.fOut.write("}")
        self.fOut.write()
Пример #5
0
	def visit_Constructor(self, constructor):
		self.fOut.write("#The actual constructor")
		parameters =  [FormalParameter("controller", "", None)] + constructor.getParams()
		self.writeMethodSignature("__init__", parameters)
		self.fOut.indent()
		if constructor.parent_class.statechart is not None :
			self.fOut.write("self.commonConstructor(controller)")
		else :
			self.fOut.write("self.commonConstructor()")
		if constructor.body :
			self.fOut.write()
			self.fOut.write("#constructor body (user-defined)")
			self.writeCodeCorrectIndent(constructor.body)
		self.fOut.dedent()
		self.fOut.write()
Пример #6
0
 def writeControllerConstructor(self, class_diagram, parameters = []):
     self.fOut.write('public Controller(')
     self.writeFormalParameters(parameters + [FormalParameter("keep_running", "bool", "true")])
     self.fOut.extendWrite(") : base(keep_running)")
     self.fOut.write('{')
     self.fOut.indent()
     
     for p in class_diagram.inports:
         self.fOut.write('this.addInputPort("' + p + '");')
     for p in class_diagram.outports:
         self.fOut.write('this.addOutputPort("' + p + '");')
     self.fOut.write('this.object_manager = new ObjectManager(this);')
     actual_parameters = [p.getIdent() for p in parameters]
     self.fOut.write('this.object_manager.createInstance("'+ class_diagram.default_class.name +'", new object[]{' +  ', '.join(actual_parameters)+ '});')
     self.fOut.dedent()
     self.fOut.write('}')
Пример #7
0
    def visit_StateChart(self, statechart):
        self.fOut.write("// Statechart enter/exit action method(s) :")
        self.fOut.write()

        #visit enter and exit action of children
        for i in statechart.composites + statechart.basics:
            if i is not statechart.root:
                i.enter_action.accept(self)
                i.exit_action.accept(self)

        # write out statecharts methods for enter/exit state
        if len(statechart.composites) > 1:
            self.fOut.write("// Statechart enter/exit default method(s) :")
            self.fOut.write()
            for i in statechart.composites:
                if i is not statechart.root:
                    self.writeEnterDefault(i)

        # write out statecharts methods for enter/exit history
        if statechart.histories:
            self.fOut.write("// Statechart enter/exit history method(s) :")
            self.fOut.write()
            for i in statechart.shallow_history_parents:
                self.writeEnterHistory(i, False)
            for i in statechart.deep_history_parents:
                self.writeEnterHistory(i, True)

        self.fOut.write("// Statechart transitions :")
        self.fOut.write()
        self.writeTransitionsRecursively(statechart.root)

        # write out transition function
        self.fOut.write("// Execute transitions")
        self.writeMethodSignature(
            statechart.class_obj.name, "transition",
            [FormalParameter("event", "Event", "new Event()")])
        self.fOut.indent()
        self.fOut.write("this.state_changed = this.transition_" +
                        statechart.root.full_name + "(event);")
        self.fOut.dedent()
        self.fOut.write("};")
        self.fOut.write()

        # write out inState function
        self.fOut.write("// inState method for statechart")
        self.writeMethodSignature(statechart.class_obj.name, "inState",
                                  [FormalParameter("nodes", "Array")])
        #self.fOut.write("def inState(self, nodes):")
        self.fOut.indent()
        self.fOut.write("for (var c in this.current_state) {")
        self.fOut.indent()
        self.fOut.write("if (!this.current_state.hasOwnProperty(c)) continue;")

        self.fOut.write("var new_nodes = new Array();")
        self.fOut.write("for (var n in nodes) {")
        self.fOut.indent()
        self.fOut.write("if (!nodes.hasOwnProperty(n)) continue;")
        self.fOut.write(
            "if (this.current_state[c].indexOf(nodes[n]) === -1) {")
        self.fOut.indent()
        self.fOut.write("new_nodes.push(nodes[n]);")
        self.fOut.dedent()
        self.fOut.write("}")
        self.fOut.dedent()
        self.fOut.write("}")
        self.fOut.write("nodes = new_nodes;")
        self.fOut.write("if (nodes.length === 0) {")
        self.fOut.indent()
        self.fOut.write("return true;")
        self.fOut.dedent()

        self.fOut.write("}")
        self.fOut.dedent()
        self.fOut.write("}")
        self.fOut.write("return false;")
        self.fOut.dedent()
        self.fOut.write("};")
        self.fOut.write()
Пример #8
0
    def visit_Constructor(self, constructor):
        self.fOut.write("// Constructor")
        parameters = [FormalParameter("controller", "", None)
                      ] + constructor.getParams()
        self.writeConstructorSignature(constructor.parent_class.name,
                                       parameters)
        self.fOut.indent()

        if constructor.parent_class.super_classes:
            self.fOut.write(constructor.parent_class.super_classes[0] +
                            ".call(this);")
        else:
            self.fOut.write("RuntimeClassBase.call(this);")

        self.fOut.write()
        self.fOut.write("if (controller) {")
        self.fOut.indent()

        #visit input, output ports
        self.fOut.write("// User defined input ports")
        self.fOut.write("this.inports = new Object();")
        for p in constructor.parent_class.inports:
            self.fOut.write("this.inports[\"" + p +
                            "\"] = controller.addInputPort(\"" + p +
                            "\", this);")

        #for p in class_node.outports:

        # write attributes
        if constructor.parent_class.attributes:
            self.fOut.write()
            self.fOut.write("// User defined attributes")
            for attribute in constructor.parent_class.attributes:
                if attribute.init_value is None:
                    self.fOut.write("this." + attribute.name + " = null;")
                else:
                    self.fOut.write("this." + attribute.name + " = " +
                                    attribute.init_value + ";")
            self.fOut.write()

        # if there is a statechart
        if constructor.parent_class.statechart is not None:
            self.fOut.write("this.controller = controller;")
            self.fOut.write("this.object_manager = controller.object_manager;")
            self.fOut.write("this.current_state = new Object();")
            self.fOut.write("this.history_state = new Object();")
            if constructor.parent_class.statechart.nr_of_after_transitions:
                self.fOut.write("this.timers = new Object();")
            self.fOut.write()
            self.fOut.write("// Initialize statechart")

            if constructor.parent_class.statechart.histories:
                for node in constructor.parent_class.statechart.combined_history_parents:
                    self.fOut.write("this.history_state[" +
                                    constructor.parent_class.name + "." +
                                    node.full_name + "] = new Array();")
                self.fOut.write()

            for c in constructor.parent_class.statechart.composites:
                self.fOut.write("this.current_state[this." + c.full_name +
                                "] = new Array();")

        self.fOut.write()
        self.fOut.write("// Call user defined constructor")
        self.fOut.write(constructor.parent_class.name +
                        ".prototype.user_defined_constructor.call(this")
        for p in constructor.getParams():
            self.fOut.extendWrite(", ")
            p.accept(self)
        self.fOut.extendWrite(");")

        self.fOut.dedent()
        self.fOut.write("}")
        self.fOut.dedent()
        self.fOut.write("};")
        self.fOut.write()
Пример #9
0
	def visit_Class(self, class_node):
		"""
		Generate code for Class construct
		"""
		self.fOut.write()
		# take care of inheritance
		if class_node.super_classes:
			class_node.super_classes.append("RuntimeClassBase")
			super_classes = []
			for super_class in class_node.super_classes:
				super_classes.append(super_class)
			self.fOut.write("class " + class_node.name + "(" + ", ".join(super_classes) +  "):")
		else:
			self.fOut.write("class " + class_node.name + "(RuntimeClassBase):")

		self.fOut.indent()
		self.fOut.write()
		
		if class_node.statechart is not None:
			# assign each node a unique ID
			self.fOut.write("# Unique IDs for all statechart nodes")
			for (i,node) in enumerate(class_node.statechart.composites + class_node.statechart.basics):
				self.fOut.write(node.full_name + " = " + str(i))
	
			self.fOut.write()
			self.writeMethodSignature("commonConstructor", [FormalParameter("controller", "", "None")])
		else :
			self.writeMethodSignature("commonConstructor")
		self.fOut.indent()
		self.fOut.write('"""Constructor part that is common for all constructors."""')
		self.fOut.write("RuntimeClassBase.__init__(self)")

		# write private input/output ports
		self.fOut.write()
		self.fOut.write("# User defined input ports")
		self.fOut.write("self.inports = {}")
		for p in class_node.inports:
			self.fOut.write("self.inports[\""+p+"\"] = controller.addInputPort(\""+p+"\", self)")

		# write attributes
		if class_node.attributes:
			self.fOut.write()
			self.fOut.write("# User defined attributes")
			for attribute in class_node.attributes:
				if attribute.init_value is None :
					self.fOut.write("self." +  attribute.name + " = None")
				else :
					self.fOut.write("self." +  attribute.name + " = " + attribute.init_value)	 
			self.fOut.write()

		# if there is a statechart
		if class_node.statechart is not None:			
			self.fOut.write("self.controller = controller")
			self.fOut.write("self.object_manager = controller.getObjectManager()")
			self.fOut.write("self.current_state = {}")
			self.fOut.write("self.history_state = {}")
			if class_node.statechart.nr_of_after_transitions:
				self.fOut.write("self.timers = {}")
			self.fOut.write()
			self.fOut.write("#Initialize statechart :")
			self.fOut.write()
			
			if class_node.statechart.histories:
				for node in class_node.statechart.combined_history_parents:
					self.fOut.write("self.history_state[" + class_node.name + "." + node.full_name + "] = []")
				self.fOut.write()

			for c in class_node.statechart.composites :
				self.fOut.write("self.current_state[self." + c.full_name + "] = []")
		
		self.fOut.dedent()
		self.fOut.write()
		
		self.writeMethodSignature("start")
		self.fOut.indent()
		self.fOut.write("super(" + class_node.name + ", self).start()")
		if class_node.statechart:
			for default_node in class_node.statechart.root.defaults:
				if default_node.is_composite:
					self.fOut.write("self.enterDefault_" + default_node.full_name + "()")
				elif default_node.is_basic:
					self.fOut.write("self.enter_" + default_node.full_name + "()")
		self.fOut.dedent()
		self.fOut.write()
		
		#visit children
		for i in class_node.constructors :
			i.accept(self)
		for i in class_node.destructors :
			i.accept(self)
		for i in class_node.methods :
			i.accept(self)
		if class_node.statechart is not None:
			class_node.statechart.accept(self)
		  
		# write out str method
		self.fOut.dedent()