예제 #1
0
 def __manual_plugin(self):
     tree = self.__get_manual()
     nodes = []
     root_node_id = 1
     for elem in tree:
         comp = XmlHandler.get_label("composition", elem)
         num_nodes = int(XmlHandler.get_label("value", elem))
         for node_id in xrange(0, num_nodes):
             node = self.__create_node(comp, node_id)
             #node = TopoNode(node_id)
             nodes.append(TopoNode(node))
     return (nodes)
예제 #2
0
    def __get_vars(self):
        """\brief get vars from xml template and save them into 
		a dict {'name': value}, one for topology vars and one for 
		compositions vars
		"""
        self.__tvars = {}
        var = self.dom.getElementsByTagName("vars")[0]
        for var_xml in var.getElementsByTagName("var"):
            v_name = XmlHandler.get_label("name", var_xml)
            v_value = XmlHandler.get_label("value", var_xml)
            v_topo = XmlHandler.get_label("topology", var_xml)
            if (v_topo is not None) and (v_topo.lower() == "yes"):
                self.__topovars[v_name] = v_value
            else:
                self.__compvars[v_name] = v_value
예제 #3
0
	def __get_exporter_blocks(self, cur_comp):
		comp_dom = XmlHandler.get_DOM(cur_comp)
		exp_blocks = ""
		for block in comp_dom.getElementsByTagName("block"):
			if block.getAttribute('export') == "yes":
				exp_blocks += block.toxml()
		return exp_blocks
예제 #4
0
 def __get_id(self):
     try:
         template_xml = self.dom.getElementsByTagName(self.__docname)[0]
     except:
         print "Template::get_id: error while getting template_docname", self.__docname
         return None
     return XmlHandler.get_label("id", template_xml)
예제 #5
0
	def __get_datafiles(self):
		import base64
		comp_dom = XmlHandler.get_DOM(self.__comprun_xml)
		for datafile in comp_dom.getElementsByTagName("datafile"):
			fname = datafile.getAttribute('filename')
			f = open(self.__datafile_dir +'/' + fname,'rb')
			fbin = base64.b64encode(f.read())
			f.close()
			self.__datafiles.append( (fname,fbin) )
예제 #6
0
 def __tree_plugin(self):
     tree = self.__get_tree()
     nodes, edges = [], []
     root_node_id = 1
     for elem in tree:
         comp = XmlHandler.get_label("composition", elem)
         if XmlHandler.get_label("type", elem) == "root":
             node = self.__create_node(comp, root_node_id)
             nodes.append(TopoNode(node))
         elif XmlHandler.get_label("type", elem) == "leaf":
             num_nodes = int(XmlHandler.get_label("value", elem))
             for node_id in xrange(root_node_id + 1,
                                   root_node_id + 1 + num_nodes):
                 node = self.__create_node(comp, node_id)
                 edge = self.__create_edge(node_id, root_node_id)
                 nodes.append(TopoNode(node))
                 edges.append(Edge(edge))
     return (nodes, edges)
예제 #7
0
    def __init__(self, compdom):
        """\brief Initialize the class
		\param (\c dom) composition as DOM object
		"""
        self.__compdom = compdom
        self.__id = XmlHandler.get_label("id", self.__compdom)
        self.__intvars = {}
        self.__extvars = {}
        for v in [self.__intvars, self.__extvars]:
            for p in ['ip', 'port']:
                v[p] = []
        self.__get_intvars()
        self.__get_extvars()
예제 #8
0
	def rescue(self):
		"""\brief substitute the exporter block and get the new 
		xml running composition
		\return (\c RetVal)
		"""
		if self.__comprun_xml is None: return RetVal.CODE_FAILURE
		
		# delete the exporter blocks from the current running comp
		comprun_dom = XmlHandler.get_DOM(self.__comprun_xml)
		delete_dom = comprun_dom.createElement('delete')
		comprun_dom.childNodes[0].appendChild(delete_dom)
		for block in comprun_dom.getElementsByTagName("block"):
			if block.getAttribute('export') == "yes":
				delete_dom.appendChild(block)
		
		# add the exporter blocks from the new running comp
		add_dom = comprun_dom.createElement('add')
		comprun_dom.childNodes[0].appendChild(add_dom)
		comp_dom = XmlHandler.get_DOM(self.__comp_xml)
		for block in comp_dom.getElementsByTagName("block"):
			if block.getAttribute('export') == "yes":
				add_dom.appendChild(block)
		for label in ['general','install']:
			comprun_dom.childNodes[0].removeChild( comprun_dom.getElementsByTagName(label)[0] )

		self.__comprun_xml = comprun_dom.toxml()
		print "----------------"
		print self.__comprun_xml
		print "----------------"
		self.__substitute_compvars()
		self.__substitute_vars(self.__intvars, self.__nodesrc)
		self.__substitute_vars(self.__extvars, self.__nodedst)
		print "**************"
		print self.__comprun_xml
		print "**************"
		return RetVal.CODE_SUCCESS
예제 #9
0
 def __init__(self, topodom):
     self.__topodom = topodom
     self.__type = XmlHandler.get_label("type", self.__topodom)
     self.__nodes = []
     self.__edges = []
예제 #10
0
 def __init__(self, node):
     self.__node = node
     self.__id = XmlHandler.get_label("id", self.__node)
     self.__comp_id = XmlHandler.get_label("composition", self.__node)
예제 #11
0
 def __init__(self, edge):
     self.__edge = edge
     self.__src = XmlHandler.get_label("src_id", self.__edge)
     self.__dst = XmlHandler.get_label("dst_id", self.__edge)
예제 #12
0
 def __substitute_topovars(self, topovars):
     import re
     topo = self.__topodom.toxml()
     for (name, value) in topovars.iteritems():
         topo = re.sub('"\s*@' + name + '\s*"', '"' + value + '"', topo)
     self.__topodom = XmlHandler.get_DOM(topo)
예제 #13
0
 def dom(self):
     return XmlHandler.get_DOM(self.__template)