/* * Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU 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 General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see http://www.gnu.org/licenses/ */ package com.bc.ceres.site.util; import com.bc.ceres.site.SiteCreator; import org.jdom2.Element; import org.jdom2.Namespace; import org.jdom2.input.DOMBuilder; import org.w3c.dom.Document; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Basic helper class which allows to generate and extend a file (exclusion_list.csv). That file contains a number of * modules which are obtained by one or more given POMs, and are written in single row, comma separated. * * @author Thomas Storm * @version 1.0 */ public class ExclusionListBuilder { private static final String MODULE_NAME = "module"; private static final String MODULES_NODE = "modules"; public static final String EXCLUSION_LIST_FILENAME = "exclusion_list"; public static final char CSV_SEPARATOR = ','; public static final char[] CSV_SEPARATOR_ARRAY = new char[]{CSV_SEPARATOR}; private static final String POM_LIST_FILENAME = "pom_list"; /** * Usage: ExclusionListBuilder [output_directory version pom_list_filename] */ public static void main(String[] args) { File exclusionList; String pomListFileName; String version; if (args.length < 1) { version = "4.8"; exclusionList = new File(EXCLUSION_LIST_FILENAME + "_" + version + ".csv"); pomListFileName = POM_LIST_FILENAME; } else if (args.length == 3) { String outputDir = args[0]; version = args[1]; exclusionList = new File(outputDir + File.separator + EXCLUSION_LIST_FILENAME + "_" + version + ".csv"); pomListFileName = args[2]; } else { throw new IllegalArgumentException( "Usage: ExclusionListBuilder [output_directory version pom_list_filename]"); } try { generateExclusionList(exclusionList, ExclusionListBuilder.retrievePoms(pomListFileName)); System.out.println("Written exclusion list to " + exclusionList.getAbsolutePath() + "."); } catch (Exception ignored) { } } static void generateExclusionList(File exclusionList, List<URL> poms) throws Exception { for (URL pom : poms) { addPomToExclusionList(exclusionList, pom); } } static void addPomToExclusionList(File exclusionList, URL pom) throws Exception { try (BufferedWriter writer = new BufferedWriter(new FileWriter(exclusionList, true))) { final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); final Document w3cDoc = builder.parse(pom.openStream()); final DOMBuilder domBuilder = new DOMBuilder(); final org.jdom2.Document doc = domBuilder.build(w3cDoc); final Element root = doc.getRootElement(); final Namespace namespace = root.getNamespace(); final List<Element> modules = root.getChildren(MODULES_NODE, namespace); if (modules != null) { // hard-coded index 0 is ok because xml-schema allows only one <modules>-node final Element modulesNode = modules.get(0); final List<Element> modulesList = modulesNode.getChildren(MODULE_NAME, namespace); for (Element module : modulesList) { addModuleToExclusionList(exclusionList, writer, module.getText()); } } } catch (Exception e) { e.printStackTrace(); } } static void addModuleToExclusionList(File exclusionList, Writer writer, String moduleName) throws IOException { try (CsvReader reader = new CsvReader(new FileReader(exclusionList), CSV_SEPARATOR_ARRAY)) { final String[] records = reader.readRecord(); List<String> recordList = new ArrayList<>(); if (records != null) { recordList.addAll(Arrays.asList(records)); } if (!recordList.contains(moduleName)) { writer.write(moduleName); writer.write(CSV_SEPARATOR); } } } static List<URL> retrievePoms(String fileName) throws Exception { List<URL> pomList = new ArrayList<>(); final String pomListFile = SiteCreator.class.getResource(fileName).getFile(); try (BufferedReader reader = new BufferedReader(new FileReader(pomListFile))){ String line; while ((line = reader.readLine()) != null) { pomList.add(new URL(line)); } } return pomList; } }