import os
import pysvn
import pystache
import json
import shutil


def containsAny(str, set):
    """Check whether 'str' contains ANY of the chars in 'set'"""
    return 1 in [c in str for c in set]

class DeployModule(object):
    def __init__(self, name=None, type_source=None, version=None, url=None, mail=None, deploy_repository=None,
                 deploy_repository_url=None, goal=None, dict_values=None, cron=None, nightly=None):
        if not dict_values:
            self.name = name
            self.type_source = type_source
            self.version = version
            self.url = url
            self.mail = mail
            self.goal = goal
            self.deploy_repository = deploy_repository
            self.deploy_repository_url = deploy_repository_url
            self.cron = cron
            self.nightly = nightly
        else:
            self.name = dict_values['name']
            self.type_source = dict_values['type_source']
            self.version = dict_values['version']
            self.url = dict_values['url']
            self.mail = dict_values['mail']
            self.goal = dict_values['goal']
            if 'deploy_repository' in dict_values:
                self.deploy_repository = dict_values['deploy_repository']
            if 'deploy_repository_url' in dict_values:
                self.deploy_repository_url = dict_values['deploy_repository_url']
            if 'cron' in dict_values:
                self.cron = dict_values['cron']
            if 'nightly' in dict_values:
                self.nightly = dict_values['nightly']


if os.path.isdir('/tmp/DSL40'):
    shutil.rmtree('/tmp/DSL40')
    print "DELETED Folder"
os.makedirs('/tmp/DSL40')
client = pysvn.Client()

entry_list = client.ls("http://svn-public.driver.research-infrastructures.eu/driver/dnet40/build/")
entry_module_list = client.ls("http://svn-public.driver.research-infrastructures.eu/driver/dnet40/modules/")
webapp_module_list = client.ls("http://svn-public.driver.research-infrastructures.eu/driver/dnet40/webapps/")
entry_list = entry_list+ entry_module_list + webapp_module_list
data_list =[]
renderer = pystache.Renderer()

f = open("/tmp/DSL40/configuration.xml", "w")
f.write('<?xml version="1.0"?>')
f.write("\n")
f.write("<modules>")
f.write("\n")

for e in entry_list:
    name = e.name
    if "dnet-container-openaireplus" in name:
        print name
    try:
        data =json.loads(client.cat(e.name + "/trunk/deploy.info"))
        if isinstance(data, list):
            for d_elem in data:
                data_list.append(d_elem)
                d = DeployModule(dict_values=d_elem)
                if containsAny(d.name,"\\/:"):
                    continue
                f.write(renderer.render(d))
                f.write("\n")
        else:
            data_list.append(data)
            d = DeployModule(dict_values=data)
            f.write(renderer.render(d))
            f.write("\n")
    except Exception as e:
        print "NOT FOUND IN %s "% (name.split('/')[-1])
        print e

f.write("\n")
f.write("</modules>")
f.close()
