""" << Samate Project / SRD / XML Directory
	
	This script generate the XML file for upload purposes.

Version 0.1:  2006, August 01 by [romain.gaucher@nist.gov]

"""
import os, sys, re, string, fnmatch

header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE testcases SYSTEM \"http://samate.nist.gov/SRD/DTD/testcases.dtd\">\n<!-- The full directory -->\n<container>\n\t<testcase>\n"
footer = "</testcase>\n</container>"
pattern= "\t<file path=\"%s\" language=\"%s\"></file>\n"
patterm= "\t<file path=\"%s\" />\n"

ext2name = {
	'C++' : ['cpp','C','hpp','hxx','H','cxx','inc'],
	'C'   : ['c', 'h'],
	'Java': ['java']
}

def Walk(root):
	result = []
	try:
		names = os.listdir(root)
	except os.error:
		return result
	for name in names:
		fullname = os.path.normpath(os.path.join(root, name))
		if os.path.isfile(fullname):
			result.append(fullname)
		elif os.path.isdir(fullname) and not os.path.islink(fullname):
			result = result + Walk(fullname)
	return result

def WriteXmlFile(filename):
	filename = filename.replace('\\','/')
	# get the language by the extension
	if filename.find('.') > -1:
		myStr = filename.split('.')
		# search the extension in the previous dictionnary
		language = [k for k in ext2name.keys() if myStr[len(myStr)-1] in ext2name[k]]
		language.append('') # trick for next lines
		if language[0] in ext2name.keys():
			return pattern % (filename,language[0])
		else:
			return patterm % (filename)
	else:
		return patterm % (filename)


if __name__ == '__main__':
	files = Walk(os.curdir)
	try:
		xml = open("manifest.xml","w")
	except IOError:
		print "Error when you tried to open the file..."
	else:
		xml.write(header)
		for f in files:
			if f != "xmlGenerator.py":
				xml.write(WriteXmlFile(f))
		xml.write(footer)
		xml.close()
