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/DSL45'):
    shutil.rmtree('/tmp/DSL45')
    print "DELETED Folder"
os.makedirs('/tmp/DSL45')
client = pysvn.Client()

def make_job(path, client, f):
    try:
        data =json.loads(client.cat(path))
        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:
        pass


entry_list = client.ls("http://svn-public.driver.research-infrastructures.eu/driver/dnet45/modules/") + client.ls("http://svn-public.driver.research-infrastructures.eu/driver/LBS/")+ client.ls("http://svn-public.driver.research-infrastructures.eu/driver/dnet50/modules/") 

data_list =[]
renderer = pystache.Renderer()

f = open("/tmp/DSL45/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
    make_job(e.name + "/trunk/deploy.info", client, f)
    make_job(e.name + "/branches/saxonHE/deploy.info", client, f)
    make_job(e.name + "/branches/saxonHE-SOLR772/deploy.info", client, f)
    make_job(e.name + "/branches/solr75/deploy.info", client, f)
    make_job(e.name + "/branches/dnet-hadoop/deploy.info", client, f)


    

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