| /******************************************************************************* |
| * Copyright (c) 2000, 2016 IBM Corporation and others. All rights reserved. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v1.0 which accompanies this distribution, |
| * and is available at http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| /** |
| * This class finds the version of a plug-in, or fragment listed in a feature |
| * and writes <element>=<element>_<version> for each in a properties file. The |
| * file produced from this task can be loaded by an Ant script to find files in |
| * the binary versions of plugins and fragments. |
| */ |
| |
| package org.eclipse.releng.generators; |
| |
| import java.io.File; |
| import java.io.FileWriter; |
| import java.io.IOException; |
| import java.io.PrintWriter; |
| import java.util.Enumeration; |
| import java.util.Hashtable; |
| import java.util.Vector; |
| |
| import javax.xml.parsers.ParserConfigurationException; |
| import javax.xml.parsers.SAXParser; |
| import javax.xml.parsers.SAXParserFactory; |
| |
| import org.apache.tools.ant.Task; |
| import org.xml.sax.Attributes; |
| import org.xml.sax.SAXException; |
| import org.xml.sax.helpers.DefaultHandler; |
| |
| public class VersionTrackerTask extends Task { |
| |
| private class FeatureHandler extends DefaultHandler { |
| |
| // Start Element Event Handler |
| @Override |
| public void startElement(final String uri, final String local, final String qName, final Attributes atts) { |
| |
| final String element = atts.getValue("id"); |
| // need to parse the plugin.xml or fragment.xml for the correct |
| // version value since the 3.0 features may list these as "0.0.0" |
| if (qName.equals("plugin")) { |
| try { |
| allElements.add(getBuildDirectory() + File.separator + "plugins" + File.separator + element + File.separator |
| + "plugin.xml"); |
| } |
| catch (final Exception e) { |
| e.printStackTrace(); |
| |
| } |
| } else if (qName.equals("fragment")) { |
| allElements.add(getBuildDirectory() + File.separator + "plugins" + File.separator + element + File.separator |
| + "fragment.xml"); |
| } |
| } |
| } |
| |
| private class PluginHandler extends DefaultHandler { |
| |
| // Start Element Event Handler |
| @Override |
| public void startElement(final String uri, final String local, final String qName, final Attributes atts) { |
| |
| final String element = atts.getValue("id"); |
| final String version = atts.getValue("version"); |
| System.out.println("Examining " + element); |
| |
| if (qName.equals("plugin") || qName.equals("fragment")) { |
| System.out.println("Found plugin " + element); |
| elements.put(element, element + "_" + version); |
| } |
| } |
| } |
| |
| // test |
| public static void main(final String[] args) { |
| final VersionTrackerTask Tracker = new VersionTrackerTask(args[1]); |
| Tracker.parse(args[0], Tracker.new FeatureHandler()); |
| Tracker.parse(Tracker.new PluginHandler()); |
| Tracker.writeProperties(args[2], true); |
| } |
| |
| private String buildDirectory; |
| |
| private Hashtable<String, String> elements; |
| |
| private SAXParser parser; |
| |
| private Vector<String> allElements; |
| |
| // the feature to from which to collect version information |
| private String featurePath; |
| |
| // the path to the file in which to write the results |
| private String outputFilePath; |
| |
| public VersionTrackerTask() { |
| } |
| |
| public VersionTrackerTask(final String install) { |
| elements = new Hashtable<>(); |
| allElements = new Vector<>(); |
| |
| final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); |
| try { |
| parser = saxParserFactory.newSAXParser(); |
| } |
| catch (final ParserConfigurationException e) { |
| e.printStackTrace(); |
| } |
| catch (final SAXException e) { |
| e.printStackTrace(); |
| } |
| |
| // directory containing the source for a given build |
| buildDirectory = install; |
| } |
| |
| @Override |
| public void execute() { |
| final VersionTrackerTask tracker = new VersionTrackerTask(getBuildDirectory()); |
| tracker.parse(getFeaturePath(), new FeatureHandler()); |
| tracker.parse(new PluginHandler()); |
| tracker.writeProperties(getOutputFilePath(), true); |
| } |
| |
| /** |
| * @return Returns the installDirectory. |
| */ |
| public String getBuildDirectory() { |
| return buildDirectory; |
| } |
| |
| /** |
| * @return Returns the featurePath. |
| */ |
| public String getFeaturePath() { |
| return featurePath; |
| } |
| |
| /** |
| * @return Returns the outputFilePath. |
| */ |
| public String getOutputFilePath() { |
| return outputFilePath; |
| } |
| |
| private void parse(final DefaultHandler handler) { |
| for (int i = 0; i < allElements.size(); i++) { |
| parse(allElements.elementAt(i).toString(), handler); |
| } |
| } |
| |
| public void parse(final String xmlFile, final DefaultHandler handler) { |
| try { |
| parser.parse(xmlFile, handler); |
| } |
| catch (final SAXException e) { |
| System.err.println(e); |
| } |
| catch (final IOException e) { |
| System.err.println(e); |
| } |
| } |
| |
| /** |
| * @param installDirectory |
| * The installDirectory to set. |
| */ |
| public void setBuildDirectory(final String buildDirectory) { |
| this.buildDirectory = buildDirectory; |
| } |
| |
| /** |
| * @param featurePath |
| * The featurePath to set. |
| */ |
| public void setFeaturePath(final String featurePath) { |
| this.featurePath = featurePath; |
| } |
| |
| /** |
| * @param outputFilePath |
| * The outputFilePath to set. |
| */ |
| public void setOutputFilePath(final String outputFilePath) { |
| this.outputFilePath = outputFilePath; |
| } |
| |
| public void writeProperties(final String propertiesFile, final boolean append) { |
| try (final PrintWriter writer = new PrintWriter(new FileWriter(propertiesFile, append))){ |
| final Enumeration<String> keys = elements.keys(); |
| |
| while (keys.hasMoreElements()) { |
| final String key = keys.nextElement(); |
| writer.println(key + "=" + elements.get(key).toString()); |
| writer.flush(); |
| } |
| } |
| catch (final IOException e) { |
| System.out.println("Unable to write to file " + propertiesFile); |
| } |
| |
| } |
| |
| } |