Home | History | Annotate | Download | only in tools
      1 /*******************************************************************************
      2  * Copyright (c) 2000, 2004 IBM Corporation and others.
      3  * All rights reserved. This program and the accompanying materials
      4  * are made available under the terms of the Eclipse Public License v1.0
      5  * which accompanies this distribution, and is available at
      6  * http://www.eclipse.org/legal/epl-v10.html
      7  *
      8  * Contributors:
      9  *     IBM Corporation - initial API and implementation
     10  *******************************************************************************/
     11 /**
     12  * This class finds the version of a feature, plugin, or fragment in a given
     13  * build source tree.
     14  */
     15 
     16 import org.xml.sax.Attributes;
     17 import org.xml.sax.helpers.DefaultHandler;
     18 import org.apache.xerces.parsers.SAXParser;
     19 import org.xml.sax.SAXException;
     20 import java.io.*;
     21 import java.util.Hashtable;
     22 import java.util.Enumeration;
     23 
     24 public class TestVersionTracker extends DefaultHandler {
     25 
     26 	private String installDirectory;
     27 	private Hashtable elements;
     28 	private SAXParser parser;
     29 	private String xmlFile;
     30 
     31 	//test
     32 	public static void main(String[] args) {
     33 		TestVersionTracker Tracker =
     34 			new TestVersionTracker(args[1]);
     35 		Tracker.parse(args[0]);
     36 		Tracker.writeProperties(args[2], true);
     37 	}
     38 
     39 	public TestVersionTracker(String install, Hashtable elements) {
     40 		//  Create a Xerces SAX Parser
     41 		parser = new SAXParser();
     42 
     43 		//  Set Content Handler
     44 		parser.setContentHandler (this);
     45 
     46 		// directory containing the source for a given build
     47 		installDirectory = install;
     48 
     49 		//  instantiate hashtable that will hold directory names with versions for elements
     50 		this.elements = elements;
     51 	}
     52 
     53 	public TestVersionTracker(String install) {
     54 		this(install, new Hashtable());
     55 	}
     56 
     57 	public void parse(String xmlFile){
     58 		this.xmlFile = xmlFile;
     59 		//  Parse the Document
     60 		try {
     61 			parser.parse(this.xmlFile);
     62 		} catch (SAXException e) {
     63 			System.err.println (e);
     64 		} catch (IOException e) {
     65 			System.err.println (e);
     66 
     67 		}
     68 	}
     69 
     70 	//  Start Element Event Handler
     71 	public void startElement(
     72 		String uri,
     73 		String local,
     74 		String qName,
     75 		Attributes atts) {
     76 
     77 		String element = atts.getValue("id");
     78 		String version = atts.getValue("version");
     79 
     80 		if (local.equals("plugin") || local.equals("fragment")) {
     81 				elements.put(element,element+"_"+version);
     82 		} else if (local.equals("feature"))
     83 				elements.put(element+"-feature",element+"_"+version);
     84 		else if (local.equals("includes")) {
     85 			File thisFile = new File(xmlFile);
     86 			String includeFile = thisFile.getParentFile().getParent() + '/' + element+"_"+version + "/feature.xml";
     87 			TestVersionTracker recurseTracker = new TestVersionTracker(installDirectory, elements);
     88 			recurseTracker.parse(includeFile);
     89 		}
     90 	}
     91 
     92 	public void writeProperties(String propertiesFile,boolean append){
     93 		try{
     94 
     95 		PrintWriter writer = new PrintWriter(new FileWriter(propertiesFile,append));
     96 
     97 			Enumeration keys = elements.keys();
     98 
     99 			while (keys.hasMoreElements()){
    100 				Object key = keys.nextElement();
    101 				writer.println(key.toString()+"="+elements.get(key).toString());
    102 				writer.flush();
    103 			}
    104 			writer.close();
    105 
    106 		} catch (IOException e){
    107 			System.out.println("Unable to write to file "+propertiesFile);
    108 		}
    109 
    110 
    111 	}
    112 
    113 }
    114