import groovy.xml.MarkupBuilder // Classe décrivant un fichier SU class DescripteurSU { String nom String description def artefacts } // Classe décrivant un fichier SA class DescripteurSA { String nom String description String target def descripteurSUs public void genererSA(String fichierSA) { // Créer un répertoire temporaire File tempFile = File.createTempFile("sm-sa", "", null); tempFile.delete() String repTemporaire = tempFile.getAbsolutePath() println "Répertoire temporaire : ${repTemporaire}" def ant = new AntBuilder() // Créer le répertoire de travail si nécessaire ant.mkdir(dir: repTemporaire) // Créer le répertoire sa servant à créer l'archive du service-assembly String repSA = repTemporaire + "/sa/" ant.mkdir(dir: repSA) // Créer l'archive de chaque service-unit def i = 1 descripteurSUs.each { descSU -> // Créer le répertoire su servant à créer l'archive du service-unit String repSU = "${repTemporaire}/su${i}/" ant.mkdir(dir: repSU) // Copier les artefacts du SU descSU.artefacts.each { fichier -> ant.copy(file: fichier, todir: repSU) } // Créer le fichier zip su.zip ant.zip(basedir: repSU, destfile: repSA + "su${i}.zip") i++ } // Créer l'archive du service-assembly // Créer le répertoire META-INF qui contiendra le fichier jbi.xml ant.mkdir(dir: repSA + "META-INF") // Créer le fichier jbi.xml def writer = new FileWriter(new File(repSA + "META-INF/jbi.xml")) def builder = new MarkupBuilder(writer) builder.jbi(xmlns: "http://java.sun.com/xml/ns/jbi", version: "1.0") { "service-assembly"() { identification() { name(nom) description(description) } i = 1 descripteurSUs.each { descSU -> builder."service-unit"() { identification() { name(descSU.nom) description(descSU.description) } target() { "artifacts-zip"("su${i++}.zip") "component-name"(target) } } } } } writer.close() // cela crée le fichuer jbi.xml // Créer l'archive SA ant.zip(basedir: repSA, destfile: fichierSA) // Suppression du répertoire temporaire et de son contenu ant.delete(includeemptydirs: "true") { ant.fileset(dir: repTemporaire) } } } // Test DescripteurSU descSU = new DescripteurSU( nom: 'ServiceGroovy SU', description: 'Service Groovy SU', artefacts: [ 'C:\\OE\\ServiceMix\\Groovy\\ServiceGroovy\\xbean.xml', 'C:\\OE\\ServiceMix\\Groovy\\ServiceGroovy\\GroovyExchangeProcessor.groovy' ]) DescripteurSA descSA = new DescripteurSA( nom: 'ServiceGroovy SA', description: 'Service Groovy SA', target: 'servicemix-script', descripteurSUs: [descSU]) descSA.genererSA('C:\\OE\\ServiceMix\\apache-servicemix-3.1-incubating\\deploy\\ServiceGroovy-SA.zip')