aboutsummaryrefslogtreecommitdiff
path: root/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java
diff options
context:
space:
mode:
Diffstat (limited to 'basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java')
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java405
1 files changed, 405 insertions, 0 deletions
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java
new file mode 100644
index 0000000..7ed4ac3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java
@@ -0,0 +1,405 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+package org.eclipse.releng.generators;
+/**
+ * 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.
+ */
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.tools.ant.Task;
+import org.eclipse.osgi.framework.util.Headers;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class TestVersionTracker extends Task{
+
+ private Hashtable elements;
+
+ //fields to hold temporary values for parsing
+ private SAXParser parser;
+
+ //the feature to from which to collect version information
+ private String featureId;
+
+ //buildDirectory
+ private String buildDirectory;
+
+ //the path to the file in which to write the results
+ private String outputFile;
+
+ public static void main(String[] args) {
+ TestVersionTracker tracker =
+ new TestVersionTracker();
+ tracker.buildDirectory="D:/src";
+ tracker.featureId="org.eclipse.sdk.tests";
+ tracker.outputFile="d:/eclipse-testing/test.properties";
+ tracker.execute();
+
+ }
+
+ public TestVersionTracker(){
+ super();
+ }
+
+
+ public void execute() {
+ elements = new Hashtable();
+
+ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+ try {
+ parser = saxParserFactory.newSAXParser();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ }
+
+ parse(buildDirectory+"/features/"+featureId+"/build.xml",new FeatureHandler());
+ getTestPluginProperties();
+ writeProperties(outputFile, true);
+ }
+
+ 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 void getTestPluginProperties(){
+ //set prerequisites list for each test plugin
+ Enumeration keys=elements.keys();
+ while (keys.hasMoreElements()){
+ String id=keys.nextElement().toString();
+ TestPlugin testPlugin=(TestPlugin)elements.get(id);
+ testPlugin.getPrerequisitePlugins(id);
+ testPlugin.setHasPerformanceTarget();
+ }
+ }
+
+ private class FeatureHandler extends DefaultHandler{
+ // Start Element Event Handler
+ public void startElement(
+ String uri,
+ String local,
+ String qName,
+ Attributes atts) {
+
+ if (qName.equals("eclipse.idReplacer")) {
+ try{
+ String pluginIds = atts.getValue("pluginIds");
+
+ //get pluginIDs and versions from generated build.xml. Create TestPlugin objects
+ StringTokenizer tokenizer= new StringTokenizer(pluginIds,",");
+ while (tokenizer.hasMoreTokens()){
+ String idtmp=tokenizer.nextToken();
+ String id=idtmp.substring(0, idtmp.indexOf(":"));
+ String version=tokenizer.nextToken();
+ TestPlugin testPlugin=new TestPlugin(id,version);
+ elements.put(id,testPlugin);
+ }
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ private class TestPlugin {
+ String id;
+ String version;
+ boolean hasPerformanceTarget=false;
+ ArrayList prerequisitePlugins=new ArrayList();
+ File testXml;
+
+ TestPlugin(String id, String version){
+ this.id=id;
+ this.version=version;
+ this.testXml=new File(buildDirectory,"plugins/"+id+"/test.xml");
+ }
+
+ private void getPrerequisitePlugins(String id) {
+ Headers headers = null;
+ String value = null;
+ File manifest = new File(buildDirectory, "plugins/" + id + "/META-INF/MANIFEST.MF");
+ ManifestElement[] manifestElements=null;
+ if (manifest.exists()) {
+ try {
+ headers = Headers.parseManifest(new FileInputStream(manifest));
+ if (headers.get(Constants.REQUIRE_BUNDLE)==null)
+ return;
+ value = headers.get(Constants.REQUIRE_BUNDLE).toString();
+ manifestElements = ManifestElement.parseHeader(Constants.REQUIRE_BUNDLE, value);
+
+ } catch (BundleException e) {
+ e.printStackTrace();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ for (int i = 0; i < manifestElements.length; i++) {
+ String name = manifestElements[i].getValue();
+ if (elements.containsKey(name)){
+ if (!prerequisitePlugins.contains(name)){
+ boolean prereqAdded=prerequisitePlugins.add(name);
+ if (prereqAdded){
+ getPrerequisitePlugins(name);
+ }
+ }
+ }
+ }
+ }
+ getPrerequisitePluginsFromPluginXml(id);
+ }
+
+ /**
+ * Returns the required list of plug-ins from plugin.xml
+ */
+ private void getPrerequisitePluginsFromPluginXml(String id) {
+ File pluginXml = new File(buildDirectory, "/plugins/" + id + "/plugin.xml");
+ if (!pluginXml.exists())
+ return;
+
+ InputStream is = null;
+ Document doc = null;
+ try {
+ is = new BufferedInputStream(new FileInputStream(pluginXml));
+ InputSource inputSource = new InputSource(is);
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+
+ DocumentBuilder builder = null;
+
+ try {
+ builder = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e1) {
+ e1.printStackTrace();
+ }
+
+ try {
+ doc = builder.parse(inputSource);
+ } catch (SAXParseException e) {
+ e.printStackTrace();
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+ }
+ // Find the fragment's plugins's name, id and version
+ NodeList nodeList = doc.getElementsByTagName("import");
+ if (nodeList == null || nodeList.getLength() == 0) {
+ return;
+ }
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node node = nodeList.item(i);
+ NamedNodeMap map = node.getAttributes();
+ Node namedItem = map.getNamedItem("plugin");
+ String name = namedItem.getNodeValue();
+ if (namedItem == null) {
+ continue;
+ } else {
+ if (elements.containsKey(name)) {
+ if (!prerequisitePlugins.contains(name)) {
+ boolean prereqAdded = prerequisitePlugins.add(name);
+ if (prereqAdded) {
+ getPrerequisitePlugins(name);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the required list of plug-ins from plugin.xml
+ */
+ private void setHasPerformanceTarget() {
+ File testXml = new File(buildDirectory, "/plugins/" + id + "/test.xml");
+ if (!testXml.exists())
+ return;
+
+ InputStream is = null;
+ Document doc = null;
+ try {
+ is = new BufferedInputStream(new FileInputStream(testXml));
+ InputSource inputSource = new InputSource(is);
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+
+ DocumentBuilder builder = null;
+
+ try {
+ builder = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e1) {
+ e1.printStackTrace();
+ }
+
+ try {
+ doc = builder.parse(inputSource);
+ } catch (SAXParseException e) {
+ e.printStackTrace();
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+ }
+ // Find a target named "performance"
+ NodeList nodeList = doc.getElementsByTagName("target");
+ if (nodeList == null || nodeList.getLength() == 0) {
+ return;
+ }
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node node = nodeList.item(i);
+ NamedNodeMap map = node.getAttributes();
+ Node namedItem = map.getNamedItem("name");
+ String name = namedItem.getNodeValue();
+ if (namedItem == null) {
+ continue;
+ } else {
+ if (name.equals("performance")){
+ hasPerformanceTarget=true;
+ return;
+ }
+ }
+ }
+ }
+
+ public String toString(){
+ String keyPrefix=id+"_"+version;
+ String performanceProperty=hasPerformanceTarget?id+".has.performance.target="+hasPerformanceTarget+"\n":"";
+ return id+"="+keyPrefix+"\n"+
+ performanceProperty+
+ id+".prerequisite.testplugins="+getPrerequisiteList()+"\n";
+ }
+
+ private String getPrerequisiteList(){
+ String prerequisites="";
+ for (int i=0;i<prerequisitePlugins.size();i++){
+ prerequisites=prerequisites.concat("**/${"+prerequisitePlugins.get(i)+"}** ");
+ }
+ return prerequisites;
+ }
+ }
+
+ public void writeProperties(String propertiesFile,boolean append){
+
+ try{
+
+ PrintWriter writer = new PrintWriter(new FileWriter(propertiesFile,append));
+
+ Object[] keys = elements.keySet().toArray();
+ Arrays.sort(keys);
+ for (int i=0;i<keys.length;i++){
+ Object key = keys[i];
+ writer.println(((TestPlugin)elements.get(key)).toString());
+ writer.flush();
+ }
+ writer.close();
+
+ } catch (IOException e){
+ System.out.println("Unable to write to file "+propertiesFile);
+ }
+
+
+ }
+
+
+ /**
+ * @return Returns the outputFilePath.
+ */
+ public String getOutputFilePath() {
+ return outputFile;
+ }
+
+ /**
+ * @param outputFilePath The outputFilePath to set.
+ */
+ public void setOutputFilePath(String outputFilePath) {
+ this.outputFile = outputFilePath;
+ }
+
+ public String getBuildDirectory() {
+ return buildDirectory;
+ }
+
+ public void setBuildDirectory(String buildDirectory) {
+ this.buildDirectory = buildDirectory;
+ }
+
+ public String getFeatureId() {
+ return featureId;
+ }
+
+ public void setFeatureId(String featureId) {
+ this.featureId = featureId;
+ }
+
+ public String getOutputFile() {
+ return outputFile;
+ }
+
+ public void setOutputFile(String outputFile) {
+ this.outputFile = outputFile;
+ }
+
+
+
+
+}