blob: 68c1631c935c7c7a4bd56d7de9a651ec61dcc845 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 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 plug-in, or fragment listed in a feature
* and writes <element>=<element>_<version> for each in a properties file.
* The file produced from this task can be loaded by an Ant script to find files in the
* binary versions of plugins and fragments.
*/
package org.eclipse.releng.generators;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import java.io.*;
import java.util.Hashtable;
import java.util.Enumeration;
import org.apache.tools.ant.Task;
import java.util.Vector;
public class VersionTrackerTask extends Task {
private String buildDirectory;
private Hashtable elements;
private SAXParser parser;
private Vector allElements;
//the feature to from which to collect version information
private String featurePath;
//the path to the file in which to write the results
private String outputFilePath;
public void execute(){
VersionTrackerTask tracker =
new VersionTrackerTask(getBuildDirectory());
tracker.parse(getFeaturePath(),new FeatureHandler());
tracker.parse(new PluginHandler());
tracker.writeProperties(getOutputFilePath(), true);
}
//test
public static void main(String[] args) {
VersionTrackerTask Tracker =
new VersionTrackerTask(args[1]);
Tracker.parse(args[0],Tracker.new FeatureHandler());
Tracker.parse(Tracker.new PluginHandler());
Tracker.writeProperties(args[2], true);
}
public VersionTrackerTask(){
}
public VersionTrackerTask(String install) {
elements = new Hashtable();
allElements=new Vector();
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
parser = saxParserFactory.newSAXParser();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
// directory containing the source for a given build
buildDirectory = install;
}
private void parse (DefaultHandler handler){
for (int i=0; i<allElements.size();i++){
parse(allElements.elementAt(i).toString(), handler);
}
}
public void parse(String xmlFile,DefaultHandler handler){
try {
parser.parse(xmlFile,handler);
} catch (SAXException e) {
System.err.println (e);
} catch (IOException e) {
System.err.println (e);
}
}
private class FeatureHandler extends DefaultHandler{
// Start Element Event Handler
public void startElement(
String uri,
String local,
String qName,
Attributes atts) {
String element = atts.getValue("id");
//need to parse the plugin.xml or fragment.xml for the correct version value since the 3.0 features may list these as "0.0.0"
if (qName.equals("plugin")) {
try{
allElements.add(getBuildDirectory()+File.separator+"plugins"+File.separator+element+File.separator+"plugin.xml");
} catch (Exception e){
e.printStackTrace();
}
} else if (qName.equals("fragment")){
allElements.add(getBuildDirectory()+File.separator+"plugins"+File.separator+element+File.separator+"fragment.xml");
}
}
}
private class PluginHandler extends DefaultHandler{
// 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");
System.out.println("Examining "+element);
if (qName.equals("plugin") || qName.equals("fragment")){
System.out.println("Found plugin "+element);
elements.put(element,element+"_"+version);
}
}
}
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);
}
}
/**
* @return Returns the featurePath.
*/
public String getFeaturePath() {
return featurePath;
}
/**
* @param featurePath The featurePath to set.
*/
public void setFeaturePath(String featurePath) {
this.featurePath = featurePath;
}
/**
* @return Returns the installDirectory.
*/
public String getBuildDirectory() {
return buildDirectory;
}
/**
* @param installDirectory The installDirectory to set.
*/
public void setBuildDirectory(String buildDirectory) {
this.buildDirectory = buildDirectory;
}
/**
* @return Returns the outputFilePath.
*/
public String getOutputFilePath() {
return outputFilePath;
}
/**
* @param outputFilePath The outputFilePath to set.
*/
public void setOutputFilePath(String outputFilePath) {
this.outputFilePath = outputFilePath;
}
}