You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ho...@apache.org on 2006/05/24 16:22:02 UTC

svn commit: r409174 - in /geronimo/sandbox/contrib/releasetools: ./ trunk/ trunk/src/ trunk/src/i-p/ trunk/src/java/ trunk/src/java/org/ trunk/src/java/org/apache/ trunk/src/java/org/apache/geroinimo/ trunk/src/java/org/apache/geroinimo/releasetools/ t...

Author: hogstrom
Date: Wed May 24 07:22:02 2006
New Revision: 409174

URL: http://svn.apache.org/viewvc?rev=409174&view=rev
Log:
Version Verifier searches Geronimo Tree and extracts package dependencies

Added:
    geronimo/sandbox/contrib/releasetools/
    geronimo/sandbox/contrib/releasetools/trunk/
    geronimo/sandbox/contrib/releasetools/trunk/src/
    geronimo/sandbox/contrib/releasetools/trunk/src/i-p/
    geronimo/sandbox/contrib/releasetools/trunk/src/java/
    geronimo/sandbox/contrib/releasetools/trunk/src/java/org/
    geronimo/sandbox/contrib/releasetools/trunk/src/java/org/apache/
    geronimo/sandbox/contrib/releasetools/trunk/src/java/org/apache/geroinimo/
    geronimo/sandbox/contrib/releasetools/trunk/src/java/org/apache/geroinimo/releasetools/
    geronimo/sandbox/contrib/releasetools/trunk/src/java/org/apache/geroinimo/releasetools/VersionVerifier.java
    geronimo/sandbox/contrib/releasetools/trunk/target/
    geronimo/sandbox/contrib/releasetools/trunk/target/classes/
    geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/
    geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/
    geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/
    geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/
    geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier$Dependency.class   (with props)
    geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier$MavenXMLHandler.class   (with props)
    geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier.class   (with props)

Added: geronimo/sandbox/contrib/releasetools/trunk/src/java/org/apache/geroinimo/releasetools/VersionVerifier.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/contrib/releasetools/trunk/src/java/org/apache/geroinimo/releasetools/VersionVerifier.java?rev=409174&view=auto
==============================================================================
--- geronimo/sandbox/contrib/releasetools/trunk/src/java/org/apache/geroinimo/releasetools/VersionVerifier.java (added)
+++ geronimo/sandbox/contrib/releasetools/trunk/src/java/org/apache/geroinimo/releasetools/VersionVerifier.java Wed May 24 07:22:02 2006
@@ -0,0 +1,346 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.geronimo.releasetools;
+
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+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.helpers.DefaultHandler;
+
+public class VersionVerifier {
+
+	File geronimoRoot = null;
+	static Properties p = null;
+	ArrayList projectXmls = null;
+	Dependency currentDependency = null;
+	ArrayList dependencyList = null;
+	boolean processingGroup = false;
+	boolean processingArtifact = false;
+	boolean processingVersion = false;
+	String currentXML = null;
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		VersionVerifier v = null;
+		v = new VersionVerifier();
+
+		v.init(args);
+		v.processProjectXMLs();
+		for (int x = 0; x < v.dependencyList.size(); x++) {
+			v.getJarInfo((Dependency)v.dependencyList.get(x));
+		}
+	}
+
+	private void processProjectXMLs() {
+		File cFile = null;
+		for (int x = 0; x < projectXmls.size(); x++) {
+			InputSource in = null;
+			try {
+				cFile = (File) projectXmls.get(x);
+				in = new InputSource(new FileInputStream(cFile));
+			} catch (FileNotFoundException e1) {
+				e1.printStackTrace();
+			}
+			DocumentBuilderFactory dfactory = DocumentBuilderFactory
+					.newInstance();
+			try {
+				Document doc = dfactory.newDocumentBuilder().parse(in);
+				Element root = doc.getDocumentElement();
+				NodeList configs = root.getElementsByTagName("dependency");
+				for (int i = 0; i < configs.getLength(); i++) {
+					Element dependencyElement = (Element) configs.item(i);
+					String project = cFile.getCanonicalPath();
+					String groupId = getString(dependencyElement, "groupId");
+					String artifactId = getString(dependencyElement, "artifactId");
+					String version = resolveVersion(getString( dependencyElement, "version"));
+					String type = getString(dependencyElement, "type");
+					if (type == null) {
+						type = "jar";
+					}
+					dependencyList.add(new Dependency(project,
+							groupId, artifactId, version, type));
+				}
+			} catch (IOException e) {
+				throw (IllegalStateException) new IllegalStateException(
+						"Unable to parse  file in "+cFile.getAbsoluteFile());
+			} catch (ParserConfigurationException e) {
+				throw (IllegalStateException) new IllegalStateException(
+						"Unable to parse  file in "+cFile.getAbsoluteFile());
+			} catch (SAXException e) {
+				throw (IllegalStateException) new IllegalStateException(
+						"Unable to parse  file in "+cFile.getAbsoluteFile());
+			}
+
+		}
+	}
+
+	/*
+	 * Resolves versions. I took the naive view that I took was that
+	 * ${pom.currentVersion} resolves to the Geronimo current version. This
+	 * should be fixed.
+	 */
+	private String resolveVersion(String version) {
+		if (!version.startsWith("${"))
+			return version;
+		if (version.startsWith("${pom.currentVersion}"))
+			return (String) p.get("geronimo_version");
+		String v = (String) p.get(version.substring(2, version.length() - 1));
+		if (v == null)
+			return version;
+		else
+			return v;
+	}
+
+	private String getString(Element dependencyElement, String childName) {
+		NodeList children = dependencyElement.getElementsByTagName(childName);
+		if (children == null || children.getLength() == 0) {
+			return null;
+		}
+		String value = "";
+		NodeList text = children.item(0).getChildNodes();
+		for (int t = 0; t < text.getLength(); t++) {
+			Node n = text.item(t);
+			if (n.getNodeType() == Node.TEXT_NODE) {
+				value += n.getNodeValue();
+			}
+		}
+		return value.trim();
+	}
+
+	/*
+	 * Argument 0 is the Geronimo Tree name to check versions on.
+	 */
+	private boolean init(String[] args) {
+		geronimoRoot = new File(args[0]);
+		projectXmls = new ArrayList(500);
+		dependencyList = new ArrayList(500);
+
+		// Get our properties
+		if (geronimoRoot.exists()) {
+			File etcProperties = new File(geronimoRoot.getAbsolutePath()
+					+ "/etc/project.properties");
+			p = new Properties();
+			try {
+				p.load(new FileInputStream(etcProperties));
+			} catch (Exception e) {
+				System.err.println("Unable to open file.  Message is "
+						+ e.getMessage());
+			}
+			getProjectXmlFiles(geronimoRoot);
+		}
+		return true;
+	}
+
+	// After this routeine returns we have a list of all project.xml files in
+	// the
+	// Geronimo Tree in the ArrayList projectXmls.
+	private void getProjectXmlFiles(File geronimoRoot) {
+		// get Module list
+		searchDirs(geronimoRoot);
+		// searchDirs(new File(geronimoRoot.getAbsoluteFile() + "/configs"));
+		for (int x = 0; x < projectXmls.size(); x++) {
+			System.out.println(((File) projectXmls.get(x)).getAbsolutePath());
+		}
+	}
+
+	private void searchDirs(File dirName) {
+		if (dirName.isDirectory()) {
+			// So far so good
+			File[] modList = dirName.listFiles();
+			for (int x = 0; x < modList.length; x++) {
+				File pFile = new File(modList[x].getAbsoluteFile()
+						+ "/project.xml");
+				if (pFile.exists() && pFile.isFile()) {
+					projectXmls.add(pFile);
+				} else {
+					if (modList[x].isDirectory())
+						searchDirs(modList[x]);
+				}
+			}
+		}
+	}
+
+	// Lifted this from org.apache.geronimo.system.repository.Maven1Repository (originally from Brett Porter)
+	private static final Pattern MAVEN_1_PATTERN = Pattern.compile("(.+)-([0-9].+)\\.*");
+	
+	private String[] getJarInfo(Dependency dependency) {
+		String mavenSiteUrl = "http://www.ibiblio.com/maven/";
+		URL compositeUrl = null;
+		String url = mavenSiteUrl;
+		Pattern aRefPattern = Pattern.compile("<A HREF=\".*\">", 	Pattern.CASE_INSENSITIVE);
+		Pattern artifactPattern = Pattern.compile("</A>.*", 	Pattern.CASE_INSENSITIVE);
+
+		try {
+			url += dependency.groupId + "/" + dependency.type + "s";
+			compositeUrl = new URL(url);
+		} catch (MalformedURLException e) {
+			System.out.println("Maven Site URL of: " + url);
+		}
+		URLConnection conn = null;
+		DataInputStream data = null;
+		String line;
+		StringBuffer buf = new StringBuffer();
+		try {
+			conn = compositeUrl.openConnection();
+			conn.connect();
+			System.out.println("Connection opened...");
+			data = new DataInputStream(new BufferedInputStream(conn
+					.getInputStream()));
+			
+			System.out.println("Reading data...");
+			while ((line = data.readLine()) != null) {
+				buf.append(line + "\n");
+			}
+		
+			String [] arefMatch = aRefPattern.split(buf);
+			
+			Matcher matcher = MAVEN_1_PATTERN.matcher("");
+			
+			for (int y=0; y< arefMatch.length; y++) {
+				if (arefMatch[y].startsWith(dependency.artifactId)) {
+					String [] t = artifactPattern.split(arefMatch[y]);
+					if (t[0].endsWith("sha1") || t[0].endsWith("md5") || t[0].endsWith("asc")) continue;
+					System.out.println(t[0]);
+					matcher.reset(t[0]);
+		             if (matcher.matches() && matcher.group(1).equals(dependency.artifactId)) {
+		            	     String m = matcher.group(2);
+		            	     for (int z=m.length()-1; z>0; z--) {
+		            	    	   if (m.charAt(z) == '.') { 
+		            	    		   m = m.substring(0,z);
+		            	    		   break;
+		            	    	   }
+		            	     }
+		            	     System.out.println(m);
+		             }
+				}
+			}
+			System.out.println();
+			data.close();
+		} catch (IOException e) {
+			System.out.println("IO Error:" + e.getMessage());
+		}
+		return new String[3];
+	}
+
+
+	class MavenXMLHandler extends DefaultHandler {
+		public void startDocument() throws SAXException {
+		}
+
+		public void startElement(String namespaceURI, String sName,
+				String qName, Attributes attrs) throws SAXException {
+			String eName = sName; // element name
+
+			if ("".equals(eName))
+				eName = qName; // namespaceAware = false
+
+			if (eName.equals("dependency")) {
+				if (currentDependency != null) {
+					dependencyList.add(currentDependency);
+				}
+				currentDependency = new Dependency();
+			}
+
+			if (eName.equals("groupId")) {
+				processingGroup = true;
+				return;
+			}
+			if (eName.equals("artifactId")) {
+				processingArtifact = true;
+				return;
+			}
+			if (eName.equals("version")) {
+				processingVersion = true;
+				return;
+			}
+		}
+
+		public void characters(char buf[], int offset, int len)
+				throws SAXException {
+			String s = new String(buf, offset, len);
+			if (processingGroup)
+				currentDependency.groupId = s;
+			if (processingArtifact)
+				currentDependency.artifactId = s;
+			if (processingVersion) {
+				if (s != null && s.startsWith("${") && s.length() > 3) {
+					if (s.equals("${pom.currentVersion}"))
+						s = "${geronimo_version}";
+					// System.out.println(currentXML+"
+					// "+s+"="+s.substring(2,s.length()-1)+"="+p.getProperty(s.substring(2,s.length()-1)));
+					currentDependency.version = p.getProperty(s.substring(2, s
+							.length() - 1));
+					// if (currentDependency.version == null)
+					// System.out.println("Version = \""+s+"\"");
+				} else {
+					currentDependency.version = s;
+				}
+			}
+			processingGroup = false;
+			processingArtifact = false;
+			processingVersion = false;
+		}
+
+		public void endDocument() throws SAXException {
+		}
+	}
+
+	class Dependency {
+		String groupId = null;
+		String artifactId = null;
+		String version = null;
+		String type = null;
+		String project = null;
+
+		Dependency() {
+		}
+
+		Dependency(String project, String groupId,
+				String artifactId, String version, String type) {
+			this.project = project;
+			this.groupId = groupId;
+			this.artifactId = artifactId;
+			this.version = version;
+			this.type = type;
+		}
+	}
+
+}

Added: geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier$Dependency.class
URL: http://svn.apache.org/viewvc/geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier%24Dependency.class?rev=409174&view=auto
==============================================================================
Binary file - no diff available.

Propchange: geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier$Dependency.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier$MavenXMLHandler.class
URL: http://svn.apache.org/viewvc/geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier%24MavenXMLHandler.class?rev=409174&view=auto
==============================================================================
Binary file - no diff available.

Propchange: geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier$MavenXMLHandler.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier.class
URL: http://svn.apache.org/viewvc/geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier.class?rev=409174&view=auto
==============================================================================
Binary file - no diff available.

Propchange: geronimo/sandbox/contrib/releasetools/trunk/target/classes/org/apache/geronimo/releasetools/VersionVerifier.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream