/*******************************************************************************
* 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);
}
}
}