#!/usr/bin/python
from xml.dom.minidom import parse
from xml.dom.ext.reader import Sax2
from xml.dom import EMPTY_NAMESPACE
from sys import argv
from re import sub
from sys import stderr
class CmNode:
	def __init__(self,omap):
		self.attributes=dict()
		self.childids=[]
		self.omap=omap
		self.whitelist=set(['name','file','dir','subdir','classname','srcdir','srcfile','vname'])
	def addAttribute(self,key,val):
		self.attributes[key]=val
	def addChildId(self,cid):
		self.childids.append(cid)
	def __repr__(self):
		rep='{\n'
		for i in self.attributes.keys():
			if self.attributes[i] != '' and i in self.whitelist:
				rep+='\t'+i+' => \''+self.attributes[i]+'\',\n'
		if len(self.childids)>0:
			rep+='\tcomp => [\n'
			for rel in self.childids:
				if rel in self.omap:
					rep+='\t'+repr(self.omap[rel]).replace('\n','\n\t')+'\n'
				else:
					rep+='\t#ADD component with id:' +rel+'\n'
			rep+='\t]\n'
		rep+='},'
		return rep
			

	
reader = Sax2.Reader()
#fn='/home/cip/2006/sirahack/ciao/fm/ciao_os-core.ccfm'
if len(argv)==2:
	fn=argv[1]
else:
	exit (1)
	
#fn='small.ccf'
doc=reader.fromStream(open(fn))
elements=doc.getElementsByTagName('cm:element');
el=[]
elementsbyid=dict()
#print len(elements)
ns="http://www.pure-systems.com/consul/model"
etypes=set()
for e in elements:
	etype= e.getAttributeNS(ns,'type')
	etypes.add(etype)
	#if e.getAttributeNS(ns,'type')=='ps:file':
	#	el.append(CmFile(e.getAttributeNS(ns,'id'),""))
	ids=	e.getAttributeNS("http://www.pure-systems.com/consul/model",'id')
	name=   e.getAttributeNS("http://www.pure-systems.com/consul/model",'name')
	
	node=CmNode(elementsbyid)
	
	#name u id ermitteln
	node.addAttribute('id',ids)
	node.addAttribute('name',name)
	
	
	#properties
	props=e.getElementsByTagName('cm:property')
	for prop in props:
		pname=prop.getAttributeNS("http://www.pure-systems.com/consul/model",'name')
		pvalue=""
		constants=prop.getElementsByTagName('cm:constant')
		for constant in constants:
			for w in constant.childNodes:
				if w.nodeType==w.TEXT_NODE:
					pvalue= w.data
		
		node.addAttribute(pname,pvalue) 
	#relations
	rels=e.getElementsByTagName('cm:relations')
	for rel in rels:
		relclass=rel.getAttributeNS("http://www.pure-systems.com/consul/model",'class')
		if relclass=='ps:children':
			targets=rel.getElementsByTagName('cm:target')
			for target in targets:
				for tx in target.childNodes:
					if tx.nodeType==tx.TEXT_NODE:
						node.addChildId(tx.data)
	#vname
	
	vnames=e.getElementsByTagName('cm:vname')
	for vname in vnames:
		mimedescs=vname.getElementsByTagName('cm:mimedesc')
		for mimedesc in mimedescs:
			
			for tx in mimedesc.childNodes:
				
				if tx.nodeType==tx.TEXT_NODE:
						
						node.addAttribute('vname',tx.data)
	#einhaengen

	elementsbyid['./'+ids]=node

#print str(etypes)
#print repr(	elementsbyid["./i8wL-zp4cNPNu0Y_X"])


#print repr(	elementsbyid["./imh3PyY83fGJEgplU"])
print repr(elementsbyid["./iBmpubJTaedhLvwsm"])



#print el
#print len(el)


