import os, sys, re,string,FCFileTools
verbose = 0
dcount = fcount = 0

def replaceTemplate(dirName, oldName, newName):
	"""
	modify contents from dirName and below, replace oldName by newName
	"""
	for file in os.listdir(dirName):
		pathName = os.path.join(dirName, file)
		if not os.path.isdir(pathName):
			try:
				print pathName
				origFile = open(pathName)									# open file
				lines = origFile.readlines()								# read the file...
				origFile.close()											# ... and close it
				output = open(pathName,"w")									# open the file again
				for line in lines:
					if (string.find(line, oldName) != -1):					# search for 'oldName' and replace it
						line = string.replace(line, oldName, newName)
					output.write(line)										# write the modified line back
				output.close												# close the file
			except:
				print 'Error modifying', pathName, '--skipped'
				print sys.exc_type, sys.exc_value
		else:
			try:
				replaceTemplate(pathName, oldName, newName)
			except:
				print 'Error changing to directory', pathName, '--skipped'
				print sys.exc_type, sys.exc_value


def copyTemplate(dirFrom, dirTo, oldName, newName, MatchFile, MatchDir):
	"""
	copy contents of dirFrom and below to dirTo
	"""
	global dcount, fcount
	for file in os.listdir(dirFrom):										# for files/dirs here
		print file
		pathFrom = os.path.join(dirFrom, file)
		pathTo   = os.path.join(dirTo,   file)								# extend both paths
		if (string.find(pathTo, oldName) != -1):
			pathTo = string.replace(pathTo, oldName, newName)				# rename file if 'oldName' is found
		if not os.path.isdir(pathFrom):										# copy simple files
			hit = 0
			for matchpat in MatchFile:
				if(re.match(matchpat,file)):
					hit = 1
					break
			if hit:
				print 'Ignore file '+file
				continue
			try:
				if verbose > 1: print 'copying', pathFrom, 'to', pathTo
				FCFileTools.cpfile(pathFrom, pathTo)
				fcount = fcount+1
			except:
				print 'Error copying', pathFrom, 'to', pathTo, '--skipped'
				print sys.exc_type, sys.exc_value
		else:
			hit = 0
			for matchpat in MatchDir:
				if(re.match(matchpat,file)):
					hit = 1
					break
			if hit:
				print 'Ignore directory '+file
				continue
			if verbose: print 'copying dir', pathFrom, 'to', pathTo
			try:
				os.mkdir(pathTo)																# make new subdir
				copyTemplate(pathFrom, pathTo, oldName, newName, MatchFile, MatchDir)			# recur into subdirs
				dcount = dcount+1
			except:
				print 'Error creating', pathTo, '--skipped'
				print sys.exc_type, sys.exc_value
