/******************************************************************************* * Copyright (c) 2000, 2004 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 feature, plugin, or fragment in a given * build source tree. */ import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; import org.apache.xerces.parsers.SAXParser; import org.xml.sax.SAXException; import java.io.*; import java.util.Hashtable; import java.util.Enumeration; public class TestVersionTracker extends DefaultHandler { private String installDirectory; private Hashtable elements; private SAXParser parser; private String xmlFile; //test public static void main(String[] args) { TestVersionTracker Tracker = new TestVersionTracker(args[1]); Tracker.parse(args[0]); Tracker.writeProperties(args[2], true); } public TestVersionTracker(String install, Hashtable elements) { // Create a Xerces SAX Parser parser = new SAXParser(); // Set Content Handler parser.setContentHandler (this); // directory containing the source for a given build installDirectory = install; // instantiate hashtable that will hold directory names with versions for elements this.elements = elements; } public TestVersionTracker(String install) { this(install, new Hashtable()); } public void parse(String xmlFile){ this.xmlFile = xmlFile; // Parse the Document try { parser.parse(this.xmlFile); } catch (SAXException e) { System.err.println (e); } catch (IOException e) { System.err.println (e); } } // Start Element Event Handler public void startElement( String uri, String local, String qName, Attributes atts) { String element = atts.getValue("id"); String version = atts.getValue("version"); if (local.equals("plugin") || local.equals("fragment")) { elements.put(element,element+"_"+version); } else if (local.equals("feature")) elements.put(element+"-feature",element+"_"+version); else if (local.equals("includes")) { File thisFile = new File(xmlFile); String includeFile = thisFile.getParentFile().getParent() + '/' + element+"_"+version + "/feature.xml"; TestVersionTracker recurseTracker = new TestVersionTracker(installDirectory, elements); recurseTracker.parse(includeFile); } } public void writeProperties(String propertiesFile,boolean append){ try{ PrintWriter writer = new PrintWriter(new FileWriter(propertiesFile,append)); Enumeration keys = elements.keys(); while (keys.hasMoreElements()){ Object key = keys.nextElement(); writer.println(key.toString()+"="+elements.get(key).toString()); writer.flush(); } writer.close(); } catch (IOException e){ System.out.println("Unable to write to file "+propertiesFile); } } }