1402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/******************************************************************************* 2402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Copyright (c) 2000, 2004 IBM Corporation and others. 3402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * All rights reserved. This program and the accompanying materials 4402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * are made available under the terms of the Eclipse Public License v1.0 5402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * which accompanies this distribution, and is available at 6402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * http://www.eclipse.org/legal/epl-v10.html 7402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 8402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Contributors: 9402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * IBM Corporation - initial API and implementation 10402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *******************************************************************************/ 11402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * This class finds the version of a feature, plugin, or fragment in a given 13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * build source tree. 14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.xml.sax.Attributes; 17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.xml.sax.helpers.DefaultHandler; 18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.xerces.parsers.SAXParser; 19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.xml.sax.SAXException; 20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.*; 21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Hashtable; 22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Enumeration; 23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic class TestVersionTracker extends DefaultHandler { 25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private String installDirectory; 27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private Hashtable elements; 28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private SAXParser parser; 29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private String xmlFile; 30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //test 32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public static void main(String[] args) { 33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll TestVersionTracker Tracker = 34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll new TestVersionTracker(args[1]); 35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Tracker.parse(args[0]); 36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Tracker.writeProperties(args[2], true); 37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public TestVersionTracker(String install, Hashtable elements) { 40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Create a Xerces SAX Parser 41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll parser = new SAXParser(); 42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Set Content Handler 44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll parser.setContentHandler (this); 45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // directory containing the source for a given build 47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll installDirectory = install; 48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // instantiate hashtable that will hold directory names with versions for elements 50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.elements = elements; 51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public TestVersionTracker(String install) { 54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this(install, new Hashtable()); 55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void parse(String xmlFile){ 58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.xmlFile = xmlFile; 59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Parse the Document 60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll parser.parse(this.xmlFile); 62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (SAXException e) { 63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.err.println (e); 64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (IOException e) { 65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.err.println (e); 66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Start Element Event Handler 71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void startElement( 72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String uri, 73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String local, 74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String qName, 75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Attributes atts) { 76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String element = atts.getValue("id"); 78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String version = atts.getValue("version"); 79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (local.equals("plugin") || local.equals("fragment")) { 81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll elements.put(element,element+"_"+version); 82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else if (local.equals("feature")) 83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll elements.put(element+"-feature",element+"_"+version); 84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll else if (local.equals("includes")) { 85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll File thisFile = new File(xmlFile); 86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String includeFile = thisFile.getParentFile().getParent() + '/' + element+"_"+version + "/feature.xml"; 87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll TestVersionTracker recurseTracker = new TestVersionTracker(installDirectory, elements); 88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll recurseTracker.parse(includeFile); 89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void writeProperties(String propertiesFile,boolean append){ 93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try{ 94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll PrintWriter writer = new PrintWriter(new FileWriter(propertiesFile,append)); 96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Enumeration keys = elements.keys(); 98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll while (keys.hasMoreElements()){ 100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Object key = keys.nextElement(); 101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll writer.println(key.toString()+"="+elements.get(key).toString()); 102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll writer.flush(); 103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll writer.close(); 105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (IOException e){ 107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println("Unable to write to file "+propertiesFile); 108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 114