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
16import org.xml.sax.Attributes;
17import org.xml.sax.helpers.DefaultHandler;
18import org.apache.xerces.parsers.SAXParser;
19import org.xml.sax.SAXException;
20import java.io.*;
21import java.util.Hashtable;
22import java.util.Enumeration;
23
24public 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