Java tutorial
/* Copyright (C) 2007-20013 BlueXML - www.bluexml.com This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.bluexml.side.integration.buildHudson.utils; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.commons.io.FileUtils; import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import org.jdom.xpath.XPath; import com.bluexml.side.integration.buildHudson.Application; public class Utils { private static ArrayList<String> listeFeatureModif = new ArrayList<String>(); private static String revisionNumber; private static ArrayList<String> listefichierpom = new ArrayList<String>(); public static ArrayList<String> getListefichierpom() { return listefichierpom; } private static String repositoryCopy = "repositoryCopy"; private static String SourceSVNName = ""; private static Properties buildProperties = new Properties(); public static String getSourceSVNName() { return SourceSVNName; } public static void setSourceSVNName(String sourceSVNName) { SourceSVNName = sourceSVNName; } private static Map<String, String> updatedPlugins = new HashMap<String, String>(); private static Map<String, String> updatedFeatures = new HashMap<String, String>(); private static Map<String, String> updatedPoms = new HashMap<String, String>(); private static Properties getBuildProperties() { return buildProperties; } public static void setBuildProperties(Properties buildProperties) { Utils.buildProperties = buildProperties; } /** * Mthode qui ouvre le fichier de proprerties */ public static Properties openProperties(String fichier) { String[] filePart = fichier.split("\\."); String fileName = filePart[0]; String userName = System.getenv("USER"); String userPropertyFile = fileName + "." + userName + "." + filePart[1]; File props = new File(userPropertyFile); if (!props.exists()) { props = new File(fichier); } FileInputStream fileStream = null; Properties properties = null; try { fileStream = new FileInputStream(props); properties = new Properties(); properties.load(fileStream); // System.out.println("Properties File loaded :" + // props.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } finally { try { fileStream.close(); } catch (IOException e) { e.printStackTrace(); } } return properties; } /** * Retourne la liste des projets */ public static List<String> getProjects() { List<String> projects = getProjects("project"); projects.addAll(getProjects("project.enterprise")); return projects; } /** * Retourne la liste des projets */ public static List<String> getProjects(String properties) { String property = getBuildProperties().getProperty(properties); List<String> l = new ArrayList<String>(); if ((property != null) && (property.length() > 0)) { String[] projects = property.split(","); if (projects.length > 0) { for (int i = 0; i < projects.length; i++) { String projectName = projects[i].split("&")[1]; projectName.trim().replaceAll("\n", ""); if (projectName.length() > 0) { l.add(projectName); } } } } return l; } /** * Retourne la liste des projets a versionner */ public static List<String> getVersionedProjects() { return getProjects("projectToVersioned"); } /** * Retourne le chemin pour un projet donn (par exemple * MetaModel/Application pour le projet com.bluexml.side.Application * * @param projectName * @return */ public static String getProjectPath(String projectName) { String path = getCommunityProject(projectName); if (path.length() == 0) { path = getEnterpriseProjectPath(projectName); } // We search in versioned projects this is used if (path.length() == 0) { String property = getBuildProperties().getProperty("projectToVersioned"); if ((property != null) && (property.length() > 0)) { String[] projects = property.split(","); for (int i = 0; i < projects.length; i++) { if (projects[i].split("&")[1].equals(projectName)) { path = projects[i].split("&")[0]; } } } } return path; } private static String getCommunityProject(String projectName) { String path = ""; String property = getCommunityProjectProperty(); if ((property != null) && (property.length() > 0)) { String[] projects = property.split(","); for (int i = 0; i < projects.length; i++) { if (projects[i].split("&")[1].equals(projectName)) { path = projects[i].split("&")[0]; return Application.SIDE_Core + File.separator + path + File.separator + "trunk" + File.separator + projectName; } } } return path; } private static String getCommunityProjectProperty() { return getBuildProperties().getProperty("project"); } private static String getEnterpriseProjectPath(String projectName) { String path = ""; // We search in enterprise projects String property = getEnterpriseProjectProperty(); if ((property != null) && (property.length() > 0)) { String[] projects = property.split(","); for (int i = 0; i < projects.length; i++) { if (projects[i].split("&")[1].equals(projectName)) { path = projects[i].split("&")[0]; return Application.SIDE_Enterprise + File.separator + path + File.separator + "trunk" + File.separator + projectName; } } } return path; } private static String getEnterpriseProjectProperty() { return getBuildProperties().getProperty("project.enterprise"); } /** * Return the Build Path: /home/stager/buildAuto/Ankle */ public static String getBuildPath() { return getBuildProperties().getProperty("buildDir") + File.separator + getCodeName(); } /** * return the buildDirectory: /home/stager/buildAuto/Ankle/workingCopy */ public static String getBuildDirectory() { return getBuildPath() + File.separator + getBuildProperties().getProperty("buildName"); } /** * Retourne le repository: http://svn.bluexml.com/svn/bluexml/com/ */ public static String getRepository() { return getBuildProperties().getProperty("repository"); } /** * Retourne le nom de code: Ankle */ public static String getCodeName() { return getBuildProperties().getProperty("codeName"); } /** * return the final directory: /home/stager/share/SIDE */ public static String getFinalDirectory() { return getBuildProperties().getProperty("finalDirectory"); } /** * return the Build Label: I.UpdateSite */ public static String getBuildLabel() { return getBuildProperties().getProperty("buildType") + "." + getBuildProperties().getProperty("buildId"); } /** * Return the name of the Update-Site: Update-Site */ public static String getArchivePrefix() { return getBuildProperties().getProperty("archivePrefix"); } /** * Return the Version Number to force the change of each number version * (void for no change) */ private static String getForceNumberVersion() { return getBuildProperties().getProperty("forceNumberVersion"); } /** * Return the path to the private Update site: /home/stager/share/SIDE-Final */ public static String getPublicUpdateSiteDirectory() { return getBuildProperties().getProperty("privateUpdateSiteDirectory"); } /** * Return the license URL: http://url.to.license.com */ private static String getlicenseURL() { return getBuildProperties().getProperty("licenseURL"); } /** * Return the license text file: /home/stager/buildAuto/license.txt */ private static String getLicenseText() { return loadFile(new File(getBuildProperties().getProperty("licensePath"))); } /** * Return the copyright URL: http://url.to.copyright.com */ private static String getCopyrightURL() { return getBuildProperties().getProperty("copyrightURL"); } /** * Return the copyright text file: /home/stager/buildAuto/copyright.txt */ private static String getCopyrightText() { return loadFile(new File(getBuildProperties().getProperty("copyrightPath"))); } /** * Retourne le numro de version en fonction de l'utilisation de hudson ou * non */ private static String getRevisionNumber() { String number = ""; if (Application.parametre) { number = Application.svn_revision; } else { number = revisionNumber; } return number; } /** * Retourne le numro de version pour un projet donn * * @param projectName * le nom du projet * @return le numro de version pour un projet donn */ public static String getVersionNumber(String projectName) { String version = ""; // En fonction du type du projet (feature ou plugin) // on ira regarder soit dans le MANIFEST ou alors dans le feature.xml if (projectName.indexOf("feature") == -1) { version = openProperties( getPathToLocalCopy(projectName) + File.separator + "META-INF" + File.separator + "MANIFEST.MF") .getProperty("Bundle-Version"); } else { org.jdom.Document document = null; org.jdom.Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le // fichier // XML document = sxb.build(new File(getPathToLocalCopy(projectName) + File.separator + "feature.xml")); } catch (Exception e) { e.printStackTrace(); } // On initialise un nouvel lment racine avec l'lment // racine du // document. racine = document.getRootElement(); version = racine.getAttributeValue("version"); } return version; } /** * Retourne le numro de version pour un pom donn * * @param projectName * le nom du projet * @return le numro de version pour un projet donn */ private static String getVersionNumberPom(String projectName) { // En fonction du type du projet (feature ou plugin) // on ira regarder soit dans le MANIFEST ou alors dans le feature.xml org.jdom.Document document = null; org.jdom.Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le fichier // XML document = sxb.build(new File(projectName)); } catch (Exception e) { } // On initialise un nouvel lment racine avec l'lment racine // du // document. racine = document.getRootElement(); String oldVersionNumber = ""; // On cre une List contenant tous les noeuds "version" de // l'Element racine List listVersion = racine.getChildren(); Iterator<?> i = listVersion.iterator(); // on va parcourir tous les plugins while (i.hasNext()) { // On recre l'Element courant chaque tour de boucle afin de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) i.next(); // sauvegarde du numro de version if (courant.getName().equals("version")) { oldVersionNumber = courant.getText(); return oldVersionNumber; } } return oldVersionNumber; } /** * Copie de la copie local du rpository dans le repertoire * getBuildDirectory() en sparant les features et les plugins */ public static void preTraitement() { List<String> projects = new ArrayList<String>(); projects.addAll(getProjects()); projects.addAll(getProjects("projectToVersioned")); String path = ""; try { // suppression du dossier final s'il xiste if (new File(getBuildDirectory()).exists()) { FileHelper.deleteFile(new File(getBuildDirectory())); } new File(getBuildDirectory()).mkdir(); for (int i = 0; i < projects.size(); i++) { if (!Application.projectsExcluded.contains(projects.get(i))) { // path = Application.workspace + File.separator + "S-IDE" + // File.separator + getProjectPath(projects.get(i)) + // File.separator + "trunk"; path = getRepositoryCopyPath() + File.separator + getProjectPath(projects.get(i)); if (projects.get(i).indexOf("feature") == -1) { FileHelper.copyFiles(new File(path), new File(getBuildDirectory() + File.separator + "plugins" + File.separator + projects.get(i)), true); } else { FileHelper.copyFiles(new File(path), new File(getBuildDirectory() + File.separator + "features" + File.separator + projects.get(i)), true); updateCopyrightLicence(projects.get(i), getBuildDirectory() + File.separator + "features"); } } } } catch (IOException e) { System.out.println(e.getMessage()); } } /** * Return the path to the svn log (with or without hudson) */ private static String getPathToLog() { String path = ""; // Si on utilise Hudson if (Application.parametre) { // le chemin 'Application.workspace' est sous la forme // 'chemin/vers/workspace' et on ne veut pas le 'workspace' a la // fin, on va donc le supprimer du chemin et ajouter 'builds' a la // place et le numro de build path = Application.workspace.substring(0, Application.workspace.length() - "workspace".length()); path = path + "builds" + File.separator + Application.build_number + File.separator + "svnUpdate.log"; } else { path = getBuildPath() + File.separator + "logbuildSVNbuild.txt"; } return path; } public static void findFile(File f, String s) { boolean stopfind = false; if (f.getName().equals(s) && !(f.getPath().indexOf("src") > -1) && !(f.getPath().indexOf("config") > -1)) { listefichierpom.add(f.getPath()); stopfind = true; } File[] liste_fils = f.listFiles(); if (liste_fils != null && stopfind == false) { for (int i = 0; i < liste_fils.length; i++) { findFile(liste_fils[i], s); } } } /** * Cette mthode analyse le fichier de log (il changera en fonction de * l'utilisation de Hudson ou non) et regarde si des updates ont t fait * et ainsi, changer le numro de version du projet concern */ public static void traitementUpdate() { copyFromRepository(); ArrayList<String> listeProjetReels = new ArrayList<String>(); ArrayList<String> listeProjetPoms = new ArrayList<String>(); List<String> projects = new ArrayList<String>(); projects.addAll(getProjects("project")); projects.addAll(getProjects("project.enterprise")); projects.addAll(getProjects("projectToVersioned")); for (int i = 0; i < projects.size(); i++) { if (!Application.projectsExcluded.contains(projects.get(i))) { if (projects.get(i).length() > 0) listeProjetReels.add(projects.get(i)); } } List<String> projectsToVersioned = getVersionedProjects(); for (int i = 0; i < projectsToVersioned.size(); i++) { if (projectsToVersioned.get(i).length() > 0) listeProjetReels.add(projectsToVersioned.get(i)); } boolean end = false; ArrayList<String> listePlugin = new ArrayList<String>(); String pathproject = getRepositoryCopyPath(); listefichierpom = new ArrayList<String>(); findFile(new File(pathproject + "/" + SourceSVNName + "/"), "pom.xml"); // si on ne force pas la mise a jour du numro de version if ("".equals(getForceNumberVersion())) { String ligne = ""; String modif = ""; ArrayList<String> listeProjet = new ArrayList<String>(); boolean update = false; // ouverture d'un flux du fichier try { File log = new File(getPathToLog()); BufferedReader ficTexte = new BufferedReader(new FileReader(log)); System.out.println("###### search for updated project from svn log " + log); if (ficTexte == null) { throw new FileNotFoundException("Fichier non trouv"); } // Analyse et copie de chaque ligne while ((ligne = ficTexte.readLine()) != null && !end) { // condition d'arret de la lecture du log // on arrete la lecture lorsque se lance le build if (ligne.startsWith(Application.buildStartLine)) { end = true; } if (Application.parametre) { // condition pour ne pas traiter les logs du checkout if (ligne.startsWith("+ svn update")) { update = true; } if (ligne.indexOf("Checking out " + Utils.getRepository()) == -1) { update = true; } } else { if (ligne.indexOf("svnUD:") != -1) { update = true; } } if (!"".equals(ligne) && !end) { if (ligne.indexOf("At revision") != -1) { revisionNumber = ligne.substring("At revision".length(), ligne.length()).trim(); } if (update) { if ((ligne.charAt(0) == 'A' || ligne.charAt(0) == 'U' || ligne.charAt(0) == 'D' || ligne.charAt(0) == ' ') && (ligne.charAt(1) == ' ' || ligne.charAt(1) == 'U' || ligne.charAt(1) == 'A' || ligne.charAt(1) == 'D') && update) { if (ligne.indexOf("Integration") > -1 || ligne.indexOf("FrameworksModules") > -1) { for (String valeur : listefichierpom) { String valeurf = valeur; String[] tab = valeurf.split("/" + SourceSVNName + "/"); String[] tab2 = tab[1].split("/pom.xml"); if (ligne.indexOf(tab2[0]) > -1) { if (!listeProjetPoms.contains(valeur)) listeProjetPoms.add(valeur); } } } modif = ligne.substring(2, ligne.length()); modif.trim(); String[] proj = modif.split(File.separator); for (int i = 0; i < proj.length; i++) { if (!listeProjet.contains(proj[i])) { listeProjet.add(proj[i]); } } } } } } } catch (FileNotFoundException e) { e.getMessage(); } catch (IOException e1) { e1.getMessage(); } System.out.println("Update project versions"); // Add all projects to version for (String p : projectsToVersioned) { if (!listeProjet.contains(p)) listeProjet.add(p); } // on parcours la liste des projets qui ont t modifi for (String element : listeProjet) { if (listeProjetReels.contains(element)) { // on met tous les plugins modifis dans un tableau if (element.indexOf("feature") == -1) { listePlugin.add(element); } // et tous les features dans un autre else { listeFeatureModif.add(element); } } } // si on force la mise a jour du numro de version } else { System.out.println( "Les numros de version de tous les projets sont forcs : " + getForceNumberVersion()); for (int i = 0; i < projects.size(); i++) { if (projects.get(i).indexOf("feature") == -1) listePlugin.add(projects.get(i)); } } // On parcours la liste des pom et on les met a jour for (String pom : listeProjetPoms) { updateVersionNumberPom(pom); } if (listeProjetPoms.size() != 0) { System.out.println("\nListe des poms modifies: "); for (String pom : listeProjetPoms) { String valeurf = pom; String[] tab = valeurf.split("/" + SourceSVNName + "/"); String moduleId = tab[1]; String versionNumberPom = getVersionNumberPom(pom); System.out.println("\t- " + moduleId + ": " + versionNumberPom); updatedPoms.put(moduleId, versionNumberPom); } if (listePlugin.indexOf("com.bluexml.side.Util.dependencies") == -1) { listePlugin.add("com.bluexml.side.Util.dependencies"); } } // mettre a jour les plugins avec les versions des pom.xml // ajouter les plugins modifier dans la listePlugin ArrayList<String> listePomsModuleDepencies = new ArrayList<String>(); if (listeProjetPoms.size() != 0) { for (String pom : listeProjetPoms) { String versionPom = getVersionNumberPom(pom); String valeurf = pom; String[] tab = valeurf.split("/pom.xm"); String valeur2 = tab[0]; String nomPom = valeur2.substring(valeur2.lastIndexOf("/") + 1); // fixer les versions des fichiers plugin.xml System.out.println("\nFixer les versions des fichiers plugins : "); for (String element : projects) { if (element.indexOf("feature") == -1) { // si contient reference pom alors modifie max version // et ajouter a la liste listePlugin boolean ajouter = updatePluginModuleDependencies(element, nomPom, versionPom); if (ajouter) { if (listePlugin.indexOf(element) == -1) { listePlugin.add(element); System.out.println("update plugin : " + element + " pom : " + nomPom + " version : " + versionPom); } } } } // fixer les versions des fichier pom.xml System.out.println("\nFixer les versions des fichiers pom : "); for (String element : listefichierpom) { // si contient reference pom alors modifie max version // et ajouter a la liste listePlugin boolean ajouter = updatePomModuleDependencies(element, nomPom, versionPom); if (ajouter) { if (listeProjetPoms.indexOf(element) == -1) { listePomsModuleDepencies.add(element); System.out.println( "update pom : " + element + " pom : " + nomPom + " version : " + versionPom); } } } } } // mettre a jour les pom.xml modifiers // On parcours la liste des pom et on les met a jour for (String pomModuleDepencies : listePomsModuleDepencies) { updateVersionNumberPom(pomModuleDepencies); } if (listePomsModuleDepencies.size() != 0) { System.out.println("\nListe des poms modifies suite mis a jour module: "); for (String pom : listePomsModuleDepencies) { String valeurf = pom; String[] tab = valeurf.split("/" + SourceSVNName + "/"); String moduleId = tab[1]; String versionNumberPom = getVersionNumberPom(pom); System.out.println("\t- " + moduleId + ": " + versionNumberPom); updatedPoms.put(moduleId, versionNumberPom); } } System.out.println("\nFixer les versions des fichiers plugin : "); if (listePomsModuleDepencies.size() != 0) { for (String pom : listePomsModuleDepencies) { String versionPom = getVersionNumberPom(pom); String valeurf = pom; String[] tab = valeurf.split("/pom.xm"); String valeur2 = tab[0]; String nomPom = valeur2.substring(valeur2.lastIndexOf("/") + 1); // fixer les versions des fichiers plugin.xml for (String element : projects) { if (element.indexOf("feature") == -1) { // si contient reference pom alors modifie max version // et ajouter a la liste listePlugin boolean ajouter = updatePluginModuleDependencies(element, nomPom, versionPom); if (ajouter) { if (listePlugin.indexOf(element) == -1) { listePlugin.add(element); System.out.println("update plugin : " + element + " pom : " + nomPom + " version : " + versionPom); } } } } } } while (listePomsModuleDepencies.size() != 0) { System.out.println("\nFixer les versions des fichiers plugins suite mise a jour module : "); // mettre a jour les plugins avec les versions des pom.xml // ajouter les plugins modifier dans la listePlugin ArrayList<String> listePomsModuleDepencies1 = new ArrayList<String>(); if (listePomsModuleDepencies.size() != 0) { for (String pom : listePomsModuleDepencies) { String versionPom = getVersionNumberPom(pom); String valeurf = pom; String[] tab = valeurf.split("/pom.xm"); String valeur2 = tab[0]; String nomPom = valeur2.substring(valeur2.lastIndexOf("/") + 1); // fixer les versions des fichiers plugin.xml System.out.println("\nFixer les versions des fichiers plugins : "); for (String element : projects) { if (element.indexOf("feature") == -1) { // si contient reference pom alors modifie max // version // et ajouter a la liste listePlugin boolean ajouter = updatePluginModuleDependencies(element, nomPom, versionPom); if (ajouter) { if (listePlugin.indexOf(element) == -1) { listePlugin.add(element); System.out.println("update plugin : " + element + " pom : " + nomPom + " version : " + versionPom); } } } } // fixer les versions des fichier pom.xml System.out.println("\nFixer les versions des fichiers pom suite mise a jour module : "); for (String element : listefichierpom) { // si contient reference pom alors modifie max version // et ajouter a la liste listePlugin boolean ajouter = updatePomModuleDependencies(element, nomPom, versionPom); if (ajouter) { if ((listePomsModuleDepencies.indexOf(element) == -1) && (listeProjetPoms.indexOf(element) == -1)) { listePomsModuleDepencies1.add(element); System.out.println("update pom : " + element + " pom : " + nomPom + " version : " + versionPom); } } } } } // mettre a jour les pom.xml modifiers // On parcours la liste des pom et on les met a jour for (String pomModuleDepencies : listePomsModuleDepencies1) { updateVersionNumberPom(pomModuleDepencies); } if (listePomsModuleDepencies1.size() != 0) { System.out.println("\nListe des poms modifies suite mis a jour module: "); for (String pom : listePomsModuleDepencies1) { String valeurf = pom; String[] tab = valeurf.split("/" + SourceSVNName + "/"); String moduleId = tab[1]; String versionNumberPom = getVersionNumberPom(pom); System.out.println("\t- " + moduleId + ": " + versionNumberPom); updatedPoms.put(moduleId, versionNumberPom); } } System.out.println("\nFixer les versions des fichiers plugin : "); if (listePomsModuleDepencies1.size() != 0) { for (String pom : listePomsModuleDepencies1) { String versionPom = getVersionNumberPom(pom); String valeurf = pom; String[] tab = valeurf.split("/pom.xm"); String valeur2 = tab[0]; String nomPom = valeur2.substring(valeur2.lastIndexOf("/") + 1); // fixer les versions des fichiers plugin.xml for (String element : projects) { if (element.indexOf("feature") == -1) { // si contient reference pom alors modifie max // version // et ajouter a la liste listePlugin boolean ajouter = updatePluginModuleDependencies(element, nomPom, versionPom); if (ajouter) { if (listePlugin.indexOf(element) == -1) { listePlugin.add(element); System.out.println("update plugin : " + element + " pom : " + nomPom + " version : " + versionPom); } } } } } } listePomsModuleDepencies = new ArrayList<String>(); if (listePomsModuleDepencies1.size() != 0) { for (String pom : listePomsModuleDepencies1) { listePomsModuleDepencies.add(pom); } } } // On parcours la liste des plugins et on les met a jour for (String plugin : listePlugin) { updateVersionNumber(plugin); } // On fait la meme chose mais pour toutes les features for (int i = 0; i < projects.size(); i++) { if (projects.get(i).indexOf("feature") != -1) { updateVersionNumber(projects.get(i)); } } // affichage des donnes if (listePlugin.size() != 0) { System.out.println("\nListe des plugins modifis: "); // On parcours la liste des plugins et on les met a jour for (String plugin : listePlugin) { String versionNumber = getVersionNumber(plugin); System.out.println("\t- " + plugin + ": " + versionNumber); updatedPlugins.put(plugin, versionNumber); } } if (listeFeatureModif.size() != 0) { System.out.println("\nListe des features modifies: "); for (String feature : listeFeatureModif) { String versionNumber = getVersionNumber(feature); System.out.println("\t- " + feature + ": " + versionNumber); updatedFeatures.put(feature, versionNumber); } } // fin affichage // copyToRepository(); // log updated projects // try { // serializeUpdatedProjects(); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } public static void updateProduct() { String brandingPath = ""; String fileName = null; if (SourceSVNName.equals(Application.SIDE_Enterprise)) { brandingPath = Utils.getPathToLocalCopy("com.bluexml.side.Integration.eclipse.branding.enterprise"); fileName = "sideEnterprise.product"; } else { brandingPath = Utils.getPathToLocalCopy("com.bluexml.side.Integration.eclipse.branding.labs"); fileName = "side.product"; } File product = new File(brandingPath + File.separator + fileName); File plugin_featureRepo = new File(Utils.getBuildDirectory()); boolean sideProductChanges = Utils.updateProduct(product, plugin_featureRepo); if (sideProductChanges) { System.out.println("- side.product updated"); } else { System.out.println("- side.product no changes "); } } public static String getRepositoryCopyPath() { String pathproject = getBuildPath() + File.separator + getRepositoryCopy(); return pathproject; } /** * Retourne le chemin vers la copie locale du projet en fonction de * l'utilisation de hudson ou non */ public static String getPathToLocalCopy(String projectName) { String path = ""; if (new File(getBuildPath() + File.separator + getRepositoryCopy()).exists()) { path = getBuildPath() + File.separator + getRepositoryCopy(); } else { if (Application.parametre) { path = Application.workspace; } else { path = getBuildDirectory() + "_CO"; } } if (Application.parametre) { path = path + File.separator + getProjectPath(projectName); } else { if (projectName.indexOf("feature") == -1) { path = path + File.separator + "plugins" + File.separator + projectName; } else { path = path + File.separator + "features" + File.separator + projectName; } } return path; } /** * Copy the repository */ private static void copyFromRepository() { System.out.println("Utils.copyFromRepository() start"); String from = ""; if (Application.parametre) { from = Application.workspace; } else { from = getBuildDirectory() + "_CO"; } String to = getRepositoryCopyPath(); try { if (new File(to).exists()) { FileHelper.deleteFile(new File(to)); } new File(getBuildPath() + File.separator + getRepositoryCopy()).mkdir(); System.out.println("From " + from + " to " + to); FileHelper.copyFiles(new File(from), new File(to), true); } catch (IOException e) { e.printStackTrace(); } System.out.println("Utils.copyFromRepository() stop"); } public static void copyToRepository() { String to = ""; if (Application.parametre) { to = Application.workspace; } else { to = getBuildDirectory() + "_CO"; } String from = getRepositoryCopyPath(); try { FileHelper.copyFiles(new File(from), new File(to), true); // FileHelper.deleteFile(new File(from)); } catch (IOException e) { e.printStackTrace(); } } /** * Update the version number of the modules in the files pom.xml * * @param projectName */ private static boolean updatePomModuleDependencies(String element, String module, String version) { boolean modifie = false; // chemin vers le plugin.xml String fileFeaturePath = element; boolean exists = (new File(fileFeaturePath)).exists(); if (exists) { org.jdom.Document document = null; org.jdom.Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le // fichier // XML document = sxb.build(new File(fileFeaturePath)); } catch (Exception e) { e.printStackTrace(); } // On initialise un nouvel lment racine avec l'lment // racine du // document. racine = document.getRootElement(); // On va maintenant mettre a jour les numro de version des // plugins // associs a la feature // on garde en mmoire l'ancien numro de version du plugin pour // savoir s'il a changer et ainsi savoir s'il faut changer ou non le // numro de version de la feature // On cre une List contenant tous les noeuds "moduleDependence" // de // l'Element racine List<?> listDependencies = racine.getChildren(); // On cre un Iterator sur notre liste Iterator<?> i = listDependencies.iterator(); // on va parcourir tous les modules while (i.hasNext()) { // On recre l'Element courant chaque tour de boucle afin // de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) i.next(); if (courant.getName().equals("dependencies")) { List<?> listDependency = courant.getChildren(); // On cre un Iterator sur notre liste Iterator<?> iDependency = listDependency.iterator(); while (iDependency.hasNext()) { // On recre l'Element courant chaque tour de // boucle afin de // pouvoir utiliser les mthodes propres aux Element // comme : // selectionner un noeud fils, modifier du texte, etc... Element courantDependency = (Element) iDependency.next(); List<?> listDependent = courantDependency.getChildren(); // On cre un Iterator sur notre liste Iterator<?> iDependent = listDependent.iterator(); if (iDependent.hasNext()) { // On recre l'Element courant chaque tour de // boucle afin de // pouvoir utiliser les mthodes propres aux // Element comme : // selectionner un noeud fils, modifier du texte, // etc... Element courantDependent = (Element) iDependent.next(); String projectName; if (courantDependent.getName().equals("groupId")) { projectName = courantDependent.getText(); if (module.contains(projectName)) { while (iDependent.hasNext()) { Element courantDependentversion = (Element) iDependent.next(); if (courantDependentversion.getName().equals("artifactId")) { projectName = projectName + "." + courantDependentversion.getText(); } if (courantDependentversion.getName().equals("version") && module.equals(projectName)) { courantDependentversion.setText(version); modifie = true; } } } } } } } } if (modifie) { // Enregistrement du fichier try { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fileFeaturePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } return modifie; } /** * Update the version number of the modules in the files feature.xml * * @param projectName */ private static boolean updatePluginModuleDependencies(String element, String module, String version) { boolean modifie = false; // chemin vers le plugin.xml String fileFeaturePath = getPathToLocalCopy(element) + File.separator + "plugin.xml"; boolean exists = (new File(fileFeaturePath)).exists(); if (exists) { org.jdom.Document document = null; org.jdom.Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le // fichier // XML document = sxb.build(new File(fileFeaturePath)); } catch (Exception e) { e.printStackTrace(); } // On initialise un nouvel lment racine avec l'lment // racine du // document. racine = document.getRootElement(); // On va maintenant mettre a jour les numro de version des // plugins // associs a la feature // on garde en mmoire l'ancien numro de version du plugin pour // savoir s'il a changer et ainsi savoir s'il faut changer ou non le // numro de version de la feature // On cre une List contenant tous les noeuds "moduleDependence" // de // l'Element racine List<?> listModules = racine.getChildren("extension"); // On cre un Iterator sur notre liste Iterator<?> i = listModules.iterator(); // on va parcourir tous les modules while (i.hasNext()) { // On recre l'Element courant chaque tour de boucle afin // de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) i.next(); List<?> listmetamodel = courant.getChildren("metamodel"); Iterator<?> imetamodel = listmetamodel.iterator(); // on va parcourir tous les modules while (imetamodel.hasNext()) { // On recre l'Element courant chaque tour de boucle // afin de // pouvoir utiliser les mthodes propres aux Element comme // : // selectionner un noeud fils, modifier du texte, etc... Element courantmetamodel = (Element) imetamodel.next(); List<?> listtechnology = courantmetamodel.getChildren("technology"); Iterator<?> itechnology = listtechnology.iterator(); // on va parcourir tous les modules while (itechnology.hasNext()) { // On recre l'Element courant chaque tour de // boucle afin de // pouvoir utiliser les mthodes propres aux Element // comme : // selectionner un noeud fils, modifier du texte, etc... Element couranttechnology = (Element) itechnology.next(); List<?> listtechnologyVersion = couranttechnology.getChildren("technologyVersion"); Iterator<?> itechnologyVersion = listtechnologyVersion.iterator(); // on va parcourir tous les modules while (itechnologyVersion.hasNext()) { // On recre l'Element courant chaque tour de // boucle afin de // pouvoir utiliser les mthodes propres aux // Element comme : // selectionner un noeud fils, modifier du texte, // etc... Element couranttechnologyVersion = (Element) itechnologyVersion.next(); List<?> listgeneratorVersion = couranttechnologyVersion.getChildren("generatorVersion"); Iterator<?> igeneratorVersion = listgeneratorVersion.iterator(); // on va parcourir tous les modules while (igeneratorVersion.hasNext()) { // On recre l'Element courant chaque tour // de boucle afin de // pouvoir utiliser les mthodes propres aux // Element comme : // selectionner un noeud fils, modifier du // texte, etc... Element courantgeneratorVersion = (Element) igeneratorVersion.next(); List<?> listoption = courantgeneratorVersion.getChildren("option"); Iterator<?> ioption = listoption.iterator(); // on va parcourir tous les modules while (ioption.hasNext()) { // On recre l'Element courant chaque // tour de boucle afin de // pouvoir utiliser les mthodes propres // aux Element comme : // selectionner un noeud fils, modifier du // texte, etc... Element courantoption = (Element) ioption.next(); List<?> listmoduleDependence = courantoption.getChildren("moduleDependence"); Iterator<?> imoduleDependence = listmoduleDependence.iterator(); // on va parcourir tous les modules while (imoduleDependence.hasNext()) { // On recre l'Element courant // chaque tour de boucle afin de // pouvoir utiliser les mthodes // propres aux Element comme : // selectionner un noeud fils, modifier // du texte, etc... Element courantmoduleDependence = (Element) imoduleDependence.next(); String moduleId = courantmoduleDependence.getAttributeValue("moduleId"); // if we find the module then we add the // attributes versionMax and versionMin if (moduleId.equals(module)) { courantmoduleDependence.setAttribute("versionMax", version); courantmoduleDependence.setAttribute("versionMin", version); modifie = true; } } } List<?> listmdep = courantgeneratorVersion.getChildren("moduleDependence"); Iterator<?> imdep = listmdep.iterator(); // on va parcourir tous les modules while (imdep.hasNext()) { // On recre l'Element courant chaque // tour de boucle afin de // pouvoir utiliser les mthodes propres // aux Element comme : // selectionner un noeud fils, modifier du // texte, etc... Element courantmoduleDependence1 = (Element) imdep.next(); String moduleId = courantmoduleDependence1.getAttributeValue("moduleId"); // if we find the module then we add the // attributes versionMax and versionMin if (moduleId.equals(module)) { courantmoduleDependence1.setAttribute("versionMax", version); courantmoduleDependence1.setAttribute("versionMin", version); modifie = true; } } } } } } // String moduleId = courant.getAttributeValue("moduleId"); // if (moduleId.equals(module)){ // courant.setAttribute("versionMax", version); // modifie=true; // } } if (modifie) { // Enregistrement du fichier try { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fileFeaturePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } return modifie; } /** * Update le numro de version du projet, le pattern pour cet update est * dans le fichier build.properties * * @param projectName */ private static void updateVersionNumber(String projectName) { if (projectName.length() > 0) { String[] pattern = getNumVersionPattern(); // En fonction du type du projet (feature ou plugin) // on ira regarder soit dans le MANIFEST.MF ou alors dans le // feature.xml if (projectName.indexOf("feature") == -1) { // chemin vers le MANIFEST.MF String filePluginPath = getPathToLocalCopy(projectName) + File.separator + "META-INF" + File.separator + "MANIFEST.MF"; // on rcupre dans un tableau les 3 numros de version du // projet String[] number = openProperties(filePluginPath).getProperty("Bundle-Version").split("\\."); String ligne = ""; try { BufferedReader reader = new BufferedReader(new FileReader(filePluginPath)); PrintWriter writer = new PrintWriter(new FileWriter(filePluginPath + ".txt")); while ((ligne = reader.readLine()) != null) { // si la ligne contient "Bundle-Version:" if (ligne.indexOf("Bundle-Version:") != -1) { // on supprime tout ce qui se trouve aprs // "Bundle-Version:" ligne = ligne.substring(0, "Bundle-Version:".length()); // on ajoute a la ligne le nouveau numro de // version // si on ne force pas la mise a jour du numro de // version if ("".equals(getForceNumberVersion())) ligne += " " + update(number, pattern); else ligne += " " + update(number, getForceNumberVersion().split("\\.")); } // ecriture de la ligne dans le nouveau fichier writer.println(ligne); } // fermeture des flux reader.close(); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // Suppression de l'ancien fichier MANIFEST new File(filePluginPath).delete(); // Renomage du nouveau MANIFEST new File(filePluginPath + ".txt").renameTo(new File(filePluginPath)); } else { // boolean qui permet de savoir s'il faut changer le numro du // feature ou non boolean featureAModifier = false; if (listeFeatureModif.contains(projectName)) featureAModifier = true; // chemin vers le feature.xml String fileFeaturePath = getPathToLocalCopy(projectName) + File.separator + "feature.xml"; org.jdom.Document document = null; org.jdom.Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le // fichier // XML document = sxb.build(new File(fileFeaturePath)); } catch (Exception e) { e.printStackTrace(); } // On initialise un nouvel lment racine avec l'lment // racine du // document. racine = document.getRootElement(); // On va maintenant mettre a jour les numro de version des // plugins // associs a la feature // on garde en mmoire l'ancien numro de version du plugin // pour // savoir s'il a changer et ainsi savoir s'il faut changer ou // non le // numro de version de la feature String oldVersionNumber = ""; // On cre une List contenant tous les noeuds "plugin" de // l'Element racine List<?> listPlugins = racine.getChildren("plugin"); // On cre un Iterator sur notre liste Iterator<?> i = listPlugins.iterator(); // on va parcourir tous les plugins while (i.hasNext()) { // On recre l'Element courant chaque tour de boucle // afin de // pouvoir utiliser les mthodes propres aux Element comme // : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) i.next(); // sauvegarde du numro de version oldVersionNumber = courant.getAttributeValue("version"); // on regarde si le numro de version du plugin a chang if (!oldVersionNumber.equals(getVersionNumber(courant.getAttributeValue("id")))) { // On modifie le numro de version du plugin courant courant.setAttribute("version", getVersionNumber(courant.getAttributeValue("id"))); // on indique que le numro de feature doit changer featureAModifier = true; } } /******************************** * CHECKING OF INCLUDED FEATURES ********************************/ List<?> listIncludedFeatures = racine.getChildren("includes"); i = listIncludedFeatures.iterator(); System.out.println("Utils.updateVersionNumber() current feature " + projectName); while (i.hasNext()) { Element currentNode = (Element) i.next(); oldVersionNumber = currentNode.getAttributeValue("version"); String inculdedFeatureId = currentNode.getAttributeValue("id"); System.out.println("scan included feature :" + inculdedFeatureId + " : " + oldVersionNumber); // check version of features String newVersionNumber = getVersionNumber(inculdedFeatureId); if (!oldVersionNumber.equals(newVersionNumber)) { // modify the included features currentNode.setAttribute("version", newVersionNumber); // feature is modified featureAModifier = true; System.out.println("update included feature version from " + oldVersionNumber + " to " + newVersionNumber); } } // on rcupre dans un tableau les 3 numros de version du // projet String[] number = racine.getAttributeValue("version").split("\\."); // on change le numro de version (s'il le faut) if ("".equals(getForceNumberVersion())) { if (featureAModifier) { if (!listeFeatureModif.contains(projectName)) { listeFeatureModif.add(projectName); } racine.setAttribute("version", update(number, pattern)); } } else { racine.setAttribute("version", update(number, getForceNumberVersion().split("\\."))); } // Enregistrement du fichier try { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fileFeaturePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } } /** * Update le numro de version du projet, le pattern pour cet update est * dans le fichier build.properties * * @param projectName */ private static void updateVersionNumberPom(String projectName) { String[] pattern = getNumVersionPattern(); // chemin vers le pom.xml String fileFeaturePath = projectName; org.jdom.Document document = null; org.jdom.Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le fichier // XML document = sxb.build(new File(fileFeaturePath)); } catch (Exception e) { e.printStackTrace(); } // On initialise un nouvel lment racine avec l'lment racine // du // document. racine = document.getRootElement(); // On va maintenant mettre a jour les numro de version des plugins // associs a la feature // on garde en mmoire l'ancien numro de version du plugin pour // savoir s'il a changer et ainsi savoir s'il faut changer ou non le // numro de version de la feature String oldVersionNumber = ""; // On cre une List contenant tous les noeuds "version" de // l'Element racine List listVersion = racine.getChildren(); Iterator<?> i = listVersion.iterator(); // on va parcourir tous les plugins while (i.hasNext()) { // On recre l'Element courant chaque tour de boucle afin de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) i.next(); // sauvegarde du numro de version if (courant.getName().equals("version")) { oldVersionNumber = courant.getText(); String[] number = oldVersionNumber.split("\\."); courant.setText(updatepom(number, pattern)); } } // Enregistrement du fichier try { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fileFeaturePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static String[] getNumVersionPattern() { String[] pattern = getBuildProperties().getProperty("number-pattern").split("\\."); return pattern; } /** * change le numro de version en fonction du pattern * * @param number * un tableau des 3 numro de version * @param pattern * un tableau avec les 3 lments du pattern * @return Le numro de version sous la forme 1.0.12 */ private static String update(String[] number, String[] pattern) { boolean change = false; for (int i = 0; i < 3; i++) { // test si l'lment est un nombre si une exception est leve, // l'lment n'est pas un nombre try { Integer.valueOf(pattern[i]); number[i] = pattern[i]; } catch (NumberFormatException e) { if (change) number[i] = "0"; else { if (pattern[i].equals("u")) { change = true; number[i] = String.valueOf(Integer.valueOf(number[i]) + 1); } } } } return number[0] + "." + number[1] + "." + number[2] + ".v" + getRevisionNumber() + "-" + getDate(); } /** * change le numro de version en fonction du pattern pour pom.xml * * @param number * un tableau des 3 numro de version * @param pattern * un tableau avec les 3 lments du pattern * @return Le numro de version sous la forme 1.0.12 */ private static String updatepom(String[] number, String[] pattern) { boolean change = false; for (int i = 0; i < 3; i++) { // test si l'lment est un nombre si une exception est leve, // l'lment n'est pas un nombre try { Integer.valueOf(pattern[i]); number[i] = pattern[i]; } catch (NumberFormatException e) { if (change) number[i] = "0"; else { if (pattern[i].equals("u")) { change = true; number[i] = String.valueOf(Integer.valueOf(number[i]) + 1); } } } } return number[0] + "." + number[1] + "." + number[2]; } /** * Met a jour le site.xml en fonction des features. Si une feature n'est pas * prsente dans le site.xml, elle est ajoute et place dans la * catgorie 'other' (retourn par la mthode getNewCategory() ) */ public static void updateSiteXml() { // chemin vers le feature.xml String fileSitePath = getBuildPath() + File.separator + "site.xml"; // String fileSitePath = getFinalDirectory()+ File.separator + // getArchivePrefix() + File.separator+ "site.xml"; List<String> projects = getProjects(); // tableau qui contiendra la liste des features ArrayList<String> listeFeature = new ArrayList<String>(); // on met tous les features dans le tableau for (int i = 0; i < projects.size(); i++) { if (projects.get(i).indexOf("feature") != -1) { if (!Application.projectsExcluded.contains(projects.get(i))) { listeFeature.add(projects.get(i)); } } } org.jdom.Document document = null; Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le fichier // XML document = sxb.build(new File(fileSitePath)); } catch (Exception e) { e.printStackTrace(); } // On initialise un nouvel lment racine avec l'lment racine // du // document. racine = document.getRootElement(); // On cre une List contenant tous les noeuds "feature" de // l'Element racine List<?> listFeatures = racine.getChildren("feature"); // On cre un Iterator sur notre liste Iterator<?> i = listFeatures.iterator(); // Boucle qui permet de mettre jour le numro de version de chaque // feature while (i.hasNext()) { // On recre l'Element courant chaque tour de boucle afin de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) i.next(); // on regarde si l'lment parcouru est dans le tableau de // features if (listeFeature.contains(courant.getAttributeValue("id"))) { // on supprime le feature de la liste listeFeature.remove(courant.getAttributeValue("id")); // On modifie le numro de version du plugin courant courant.setAttribute("version", getVersionNumber(courant.getAttributeValue("id"))); courant.setAttribute("url", "features/" + courant.getAttributeValue("id") + "_" + getVersionNumber(courant.getAttributeValue("id")) + ".jar"); } } /*********************************************************************** * DEPRECATED PART : BEGIN ***********************************************************************/ // on parcourt le tableau de feature // on va ajouter les features prsentes dans le tableau (et donc qui // ne // sont pas prsentes dans le site.xml) et les ajouter au site.xml // for (String feature : listeFeature) { // Element newElement = new Element("feature"); // // newElement.setAttribute("url", "features/" + feature + "_" // + getVersionNumber(feature) + ".jar"); // newElement.setAttribute("id", feature); // newElement.setAttribute("version", getVersionNumber(feature)); // // Element newCategory = new Element("category"); // // newCategory.setAttribute("name", "SIDE " + getNewCategory()); // // newElement.addContent(newCategory); // racine.addContent(newElement); // } /*********************************************************************** * DEPRECATED PART : END ***********************************************************************/ // Enregistrement du fichier try { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fileSitePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * Traitement final: Copie de l'update site dans le repertoire final Copie * des logs dans le repertoire final Suppression de workingcopy */ public static void finalTraitement() { String buildNumber = ""; System.out.println("Final treatment : "); if (Application.parametre) { buildNumber = "-" + Application.build_number; } File finalFeatures = new File(getUpdateSiteDir() + File.separator + getCodeName() + File.separator + getRevisionNumber() + buildNumber + File.separator + "features"); File finalPlugins = new File(getUpdateSiteDir() + File.separator + getCodeName() + File.separator + getRevisionNumber() + buildNumber + File.separator + "plugins"); File finalSite = new File(getUpdateSiteDir() + File.separator + getCodeName() + File.separator + getRevisionNumber() + buildNumber + File.separator + "site.xml"); try { // copie de l'update site System.out.println("\t- Update Site copy under <Revision number>-<build number> :"); FileHelper.copyFiles(new File(getBuildDirectory() + File.separator + getBuildLabel() + File.separator + getArchivePrefix() + File.separator + "features"), finalFeatures, true); System.out.println("\t\t. on " + finalFeatures + " from " + getBuildDirectory() + File.separator + getBuildLabel() + File.separator + getArchivePrefix() + File.separator + "features DONE"); FileHelper.copyFiles(new File(getBuildDirectory() + File.separator + getBuildLabel() + File.separator + getArchivePrefix() + File.separator + "plugins"), finalPlugins, true); System.out.println("\t\t. on " + finalPlugins + " from " + getBuildDirectory() + File.separator + getBuildLabel() + File.separator + getArchivePrefix() + File.separator + "plugins DONE"); // copie du site.xml pour l'update site FileHelper.copyFiles(new File(getBuildPath() + File.separator + "site.xml"), finalSite, true); System.out.println( "\t\t. on " + finalSite + " from " + getBuildPath() + File.separator + "site.xml DONE"); // creation du dossier final s'il n'xiste pas if (!new File(getFinalDirectory()).exists()) new File(getFinalDirectory()).mkdir(); /* * System.out.println("\t- Suppression de l'ancien update site" ); * if (new File(getUpdateSiteDir() + File.separator + getCodeName() * + File.separator + "features").exists()) { * FileHelper.deleteFile(new File(getUpdateSiteDir() + * File.separator + getCodeName() + File.separator + "features")); * new File(getUpdateSiteDir() + File.separator + getCodeName() + * File.separator + "features").mkdir(); } if (new * File(getUpdateSiteDir() + File.separator + getCodeName() + * File.separator + "plugins").exists()) { FileHelper.deleteFile(new * File(getUpdateSiteDir() + File.separator + getCodeName() + * File.separator + "plugins")); new File(getUpdateSiteDir() + * File.separator + getCodeName() + File.separator + * "plugins").mkdir(); } */ // copie de l'update site System.out.println("\t- Update Site copy :"); FileHelper.copyFiles( new File(getBuildDirectory() + File.separator + getBuildLabel() + File.separator + getArchivePrefix() + File.separator + "features"), new File(getUpdateSiteDir() + File.separator + getCodeName() + File.separator + "features"), true); System.out.println("\t\t. on " + getUpdateSiteDir() + File.separator + getCodeName() + File.separator + "features from " + getBuildDirectory() + File.separator + getBuildLabel() + File.separator + getArchivePrefix() + File.separator + "features DONE"); FileHelper.copyFiles( new File(getBuildDirectory() + File.separator + getBuildLabel() + File.separator + getArchivePrefix() + File.separator + "plugins"), new File(getUpdateSiteDir() + File.separator + getCodeName() + File.separator + "plugins"), true); System.out.println("\t\t. on " + getUpdateSiteDir() + File.separator + getCodeName() + File.separator + "plugins from " + getBuildDirectory() + File.separator + getBuildLabel() + File.separator + getArchivePrefix() + File.separator + "plugins DONE"); // copie du site.xml pour l'update site FileHelper.copyFiles(new File(getBuildPath() + File.separator + "site.xml"), new File(getUpdateSiteDir() + File.separator + getCodeName() + File.separator + "site.xml"), true); System.out.println("\t\t. on " + getUpdateSiteDir() + File.separator + getCodeName() + File.separator + "site.xml from " + getBuildPath() + File.separator + "site.xml DONE"); // copie du site.xml vers le workspace FileHelper.copyFiles(new File(getBuildPath() + File.separator + "site.xml"), new File(Application.workspace + File.separator + SourceSVNName + "/Integration/trunk/com.bluexml.side.Integration.buildHudson/config/site.xml"), true); System.out.println("\t\t. on " + Application.workspace + File.separator + SourceSVNName + "/Integration/trunk/com.bluexml.side.Integration.buildHudson/config/site.xml from " + getBuildPath() + File.separator + "site.xml DONE"); // copie de la doc System.out.println("\t- Generated Doc copy :"); FileHelper.copyFiles(new File(getBuildPath() + File.separator + "doc"), new File(getFinalDirectory() + File.separator + "doc"), true); System.out.println("\t\t. on " + getFinalDirectory() + File.separator + "doc from " + getBuildPath() + File.separator + "doc DONE"); // copie des fichiers compils if (!new File(getFinalDirectory() + File.separator + "logs").exists()) new File(getFinalDirectory() + File.separator + "logs").mkdir(); // copie des logs (pour la compilation de chaque projet) System.out.println("\t- Logs copy :"); FileHelper.copyFiles( new File(getBuildDirectory() + File.separator + getBuildLabel() + File.separator + "compilelogs"), new File(getFinalDirectory() + File.separator + "logs" + File.separator + getCodeName() + File.separator + "compilelogs"), true); System.out.println("\t\t. on " + getFinalDirectory() + File.separator + "logs" + File.separator + getCodeName() + File.separator + "compilelogs from " + getBuildDirectory() + File.separator + getBuildLabel() + File.separator + "compilelogs DONE"); // copie des fichiers de log (pour tout le traitement) /* * if (Application.EnterpriseRelease) { FileHelper.copyFiles(new * File(getBuildPath() + File.separator + * "logbuildSVNsvnCommit.txt"), new File(getFinalDirectory() + * File.separator + "logs" + File.separator + getCodeName() + * File.separator + "logCommit.txt"), true); } */ FileHelper.copyFiles(new File(getBuildPath() + File.separator + "logbuildbuild.txt"), new File(getFinalDirectory() + File.separator + "logs" + File.separator + getCodeName() + File.separator + "logBuild.txt"), true); System.out.println("\t\t. on " + getFinalDirectory() + File.separator + "logs" + File.separator + getCodeName() + File.separator + "logBuild.txt from " + getBuildPath() + File.separator + "logbuildbuild.txt DONE"); FileHelper.copyFiles(new File(getBuildPath() + File.separator + "logjarBuilderjarBuilder.txt"), new File(getFinalDirectory() + File.separator + "logs" + File.separator + getCodeName() + File.separator + "logBuildJar.txt"), true); System.out.println("\t\t. on " + getFinalDirectory() + File.separator + "logs" + File.separator + getCodeName() + File.separator + "logBuildJar.txt from " + getBuildPath() + File.separator + "logjarBuilderjarBuilder.txt DONE"); if (!Application.parametre) { FileHelper.copyFiles(new File(getBuildPath() + File.separator + "logbuildSVNbuild.txt"), new File(getFinalDirectory() + File.separator + "logs" + File.separator + getCodeName() + File.separator + "logSVN.txt"), true); } // copie des fichiers compils System.out.println("\t- Compiled files copy :"); if (!new File(getFinalDirectory() + File.separator + "bin").exists()) new File(getFinalDirectory() + File.separator + "bin").mkdir(); List<String> projects = getProjects(); for (int i = 0; i < projects.size(); i++) { if (projects.get(i).indexOf("feature") == -1) { if (new File(getBuildDirectory() + File.separator + "plugins" + File.separator + projects.get(i) + File.separator + "@dot").exists()) { FileHelper.copyFiles( new File(getBuildDirectory() + File.separator + "plugins" + File.separator + projects.get(i) + File.separator + "@dot"), new File(getFinalDirectory() + File.separator + "bin" + File.separator + getCodeName() + File.separator + projects.get(i)), true); System.out.println("\t\t. on " + getFinalDirectory() + File.separator + "bin" + File.separator + getCodeName() + File.separator + projects.get(i) + " from " + getBuildDirectory() + File.separator + "plugins" + File.separator + projects.get(i) + File.separator + "@dot DONE"); } } } FileHelper.copyFiles(new File(getBuildDirectory() + File.separator + "features"), new File(getFinalDirectory() + File.separator + "bin" + File.separator + getCodeName()), true); System.out.println("\t\t. on " + getFinalDirectory() + File.separator + "bin" + File.separator + getCodeName() + " from " + getBuildDirectory() + File.separator + "features DONE"); // suppression du repertoire de travail /* * System.out.println("\t- Working dir Suppression" ); * FileHelper.deleteFile(new File(getBuildDirectory())); * System.out.println("\t\t. " + getBuildDirectory() + " DONE"); * FileHelper.deleteFile(new File(getBuildPath() + File.separator + * "doc")); System.out.println("\t\t. " + getBuildPath() + * File.separator + "doc DONE"); */ // suppression des fichiers crs // FileHelper.deleteFile(new File(Utils.getBuildPath()+ // File.separator + "buildSVN.xml")); /* * FileHelper.deleteFile(new File(Utils.getBuildPath() + * File.separator + "build.xml")); FileHelper.deleteFile(new * File(Utils.getBuildPath() + File.separator + * "buildAuto.product")); FileHelper.deleteFile(new * File(Utils.getBuildPath() + File.separator + "jarBuilder.xml")); * // suppression des fichiers de logs if * (Application.EnterpriseRelease){ FileHelper.deleteFile(new * File(getBuildPath() + File.separator + "logbuildSVNbuild.txt")); * // FileHelper.deleteFile(new File(getBuildPath() + File.separator * // + "logbuildSVNsvnCommit.txt")); } FileHelper.deleteFile(new * File(getBuildPath() + File.separator + "logbuildbuild.txt")); * FileHelper.deleteFile(new File(getBuildPath() + File.separator + * "logjarBuilderjarBuilder.txt")); */ } catch (IOException e) { e.printStackTrace(); } } private static String getUpdateSiteDir() { String updateSiteDir = "updateSiteDir"; // if (!Application.EnterpriseRelease) { // updateSiteDir = "updateSiteDirLabs"; // } return getBuildProperties().getProperty(updateSiteDir); } /** * Remplace, pour la feature donne, le texte du copyright et de la licence * (ainsi que leur url) par rapport au fichier indiqu dans le * build.properties * * @param featureName */ private static void updateCopyrightLicence(String featureName, String path) { // String[] tmp = featureName.split("\\."); // if (tmp[3].equals("Util")) { // tmp[3] = "Utils"; // } // String path = Application.workspace + File.separator + "S-IDE" // + File.separator + tmp[3] + File.separator + "trunk"; String fileFeaturePath = path + File.separator + featureName + File.separator + "feature.xml"; org.jdom.Document document = null; org.jdom.Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le fichier // XML document = sxb.build(new File(fileFeaturePath)); } catch (Exception e) { e.printStackTrace(); } // On initialise un nouvel lment racine avec l'lment racine // du // document. racine = document.getRootElement(); // On cre une List contenant tous les noeuds "copyright" de // l'Element racine List<?> listCopyright = racine.getChildren("copyright"); // On cre un Iterator sur notre liste Iterator<?> i = listCopyright.iterator(); // on va parcourir tous les plugins while (i.hasNext()) { // On recre l'Element courant chaque tour de boucle afin de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) i.next(); // on applique le texte du copyright courant.setText(getCopyrightText()); // on change l'url du copyright courant.setAttribute("url", getCopyrightURL()); } // On cre une List contenant tous les noeuds "license" de // l'Element racine List<?> listLicense = racine.getChildren("license"); // On cre un Iterator sur notre liste Iterator<?> j = listLicense.iterator(); // on va parcourir tous les plugins while (j.hasNext()) { // On recre l'Element courant chaque tour de boucle afin de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) j.next(); // on applique le texte du license courant.setText(getLicenseText()); // on change l'url du license courant.setAttribute("url", getlicenseURL()); } // Enregistrement du fichier try { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fileFeaturePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * Remplace, pour la feature donne, le texte du copyright et de la licence * (ainsi que leur url) par rapport au fichier indiqu dans le * build.properties * * @param featureName */ private static void updateCopyrightLicence(String featureName) { String[] tmp = featureName.split("\\."); if (tmp[3].equals("Util")) { tmp[3] = "Utils"; } String path = Application.workspace + File.separator + SourceSVNName + File.separator + tmp[3] + File.separator + "trunk"; String fileFeaturePath = path + File.separator + featureName + File.separator + "feature.xml"; org.jdom.Document document = null; org.jdom.Element racine; // On cre une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { // On cre un nouveau document JDOM avec en argument le fichier // XML document = sxb.build(new File(fileFeaturePath)); } catch (Exception e) { e.printStackTrace(); } // On initialise un nouvel lment racine avec l'lment racine // du // document. racine = document.getRootElement(); // On cre une List contenant tous les noeuds "copyright" de // l'Element racine List<?> listCopyright = racine.getChildren("copyright"); // On cre un Iterator sur notre liste Iterator<?> i = listCopyright.iterator(); // on va parcourir tous les plugins while (i.hasNext()) { // On recre l'Element courant chaque tour de boucle afin de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) i.next(); // on applique le texte du copyright courant.setText(getCopyrightText()); // on change l'url du copyright courant.setAttribute("url", getCopyrightURL()); } // On cre une List contenant tous les noeuds "license" de // l'Element racine List<?> listLicense = racine.getChildren("license"); // On cre un Iterator sur notre liste Iterator<?> j = listLicense.iterator(); // on va parcourir tous les plugins while (j.hasNext()) { // On recre l'Element courant chaque tour de boucle afin de // pouvoir utiliser les mthodes propres aux Element comme : // selectionner un noeud fils, modifier du texte, etc... Element courant = (Element) j.next(); // on applique le texte du license courant.setText(getLicenseText()); // on change l'url du license courant.setAttribute("url", getlicenseURL()); } // Enregistrement du fichier try { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fileFeaturePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * Mthode qui retourne le contenu du fichier pass en paramtre * * @param f * Le fichier a retourner * @return Le contenu du fichier */ private static String loadFile(File f) { StringWriter out = null; try { BufferedInputStream in = new BufferedInputStream(new FileInputStream(f)); out = new StringWriter(); int b; while ((b = in.read()) != -1) out.write(b); out.flush(); out.close(); in.close(); return out.toString(); } catch (IOException ie) { ie.printStackTrace(); } return out.toString(); } /** * Return the current Date * * @return the current Date */ private static String getDate() { return new SimpleDateFormat("yyyyMMdd").format(new Date()); } /** * Return the current Date * * @return the current Date */ public static String getDate2() { return new SimpleDateFormat("dd/MM/yyyy").format(new Date()); } /** * Return the current Time * * @return the current Time */ public static String getTime() { return new SimpleDateFormat("HH:mm:ss").format(new Date()); } static boolean updateProduct(File product, File plugin_featureRepo) { System.out.println(" Product to update :" + product); System.out.println(" Pluginq/Features Repository :" + plugin_featureRepo); boolean changes = false; try { Document productDoc = buildJdomDocument(product); // search for features reference to update // product/features/feature XPath xpa = XPath.newInstance("//product/features/feature"); List<?> lmd = xpa.selectNodes(productDoc.getRootElement()); for (Object object : lmd) { Element el = (Element) object; String id = null; String version = ""; Attribute attId = el.getAttribute("id"); if (attId != null) { id = attId.getValue(); } Attribute attVersion = el.getAttribute("version"); if (attVersion != null) { version = attVersion.getValue(); } // search in repos this feature System.out.println("Utils.updateProduct() search included feature " + id); if (getProjects().contains(id)) { String projectPath = getPathToLocalCopy(id); File featureFile = new File(projectPath + File.separator + "feature.xml"); Document featureDoc = buildJdomDocument(featureFile); Element featureEl = featureDoc.getRootElement(); String id_ = null; String version_ = ""; Attribute att_ = featureEl.getAttribute("id"); if (att_ != null) { id_ = att_.getValue(); } att_ = featureEl.getAttribute("version"); if (att_ != null) { version_ = att_.getValue(); } System.out.println("\t oldVersion " + version + " newVersion " + version_); if (id_.equals(id)) { // feature found in repository if (!version_.equals(version)) { // update feature version in .product attVersion.setValue(version_); changes = true; } } } else { System.out .println("[-] the project could not be found, maybe it's provided by platform :" + id); } } if (changes) { Attribute version = productDoc.getRootElement().getAttribute("version"); String oldVersion = version.getValue(); String[] pattern = getNumVersionPattern(); String newversion = updatepom(version.getValue().split("\\."), pattern); version.setValue(newversion); System.out.println("sideProduct version :" + oldVersion); System.out.println("sideProduct new version :" + newversion); // save changes saveXMLFile(product, productDoc); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return changes; } private static void saveXMLFile(File xml, Document dom) throws FileNotFoundException, IOException { org.jdom.output.XMLOutputter out = new XMLOutputter(); Format format = Format.getPrettyFormat(); out.setFormat(format); FileOutputStream outStream = new FileOutputStream(xml); out.output(dom, outStream); outStream.close(); } private static Document buildJdomDocument(File xmlFile) throws Exception { Document doc; org.jdom.input.SAXBuilder builder = new SAXBuilder(); doc = builder.build(xmlFile); return doc; } public static void setRepositoryCopy(String repositoryCopy) { Utils.repositoryCopy = repositoryCopy; } public static String getRepositoryCopy() { return repositoryCopy; } public static void writeListInFile(File output, List<String> list) throws IOException { FileUtils.writeLines(output, list); } }