You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ev...@apache.org on 2006/08/11 10:21:17 UTC
svn commit: r430718 [1/2] - in /maven/sandbox/maven-shared-jar: ./ src/
src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/maven/ src/main/java/org/apache/maven/shared/
src/main/java/org/apache/maven/shared/j...
Author: evenisse
Date: Fri Aug 11 01:21:11 2006
New Revision: 430718
URL: http://svn.apache.org/viewvc?rev=430718&view=rev
Log:
[MNG-2489] jar internals discovery component
Submitted by: Joakim Erdfelt
Added:
maven/sandbox/maven-shared-jar/ (with props)
maven/sandbox/maven-shared-jar/pom.xml (with props)
maven/sandbox/maven-shared-jar/src/
maven/sandbox/maven-shared-jar/src/main/
maven/sandbox/maven-shared-jar/src/main/java/
maven/sandbox/maven-shared-jar/src/main/java/org/
maven/sandbox/maven-shared-jar/src/main/java/org/apache/
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/Jar.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarEntryComparator.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarException.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/AbstractJarTaxonExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/EmptyRepositoryHashSearch.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxon.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonAnalyzer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/RepositoryHashSearch.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/EmbeddedMavenModelExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/FilenameExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/JarClassesExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/ManifestExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/RepositorySearchExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/StaticMainOutputExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/TextFileExposer.java (with props)
maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/TimestampExposer.java (with props)
maven/sandbox/maven-shared-jar/src/test/
maven/sandbox/maven-shared-jar/src/test/jars/
maven/sandbox/maven-shared-jar/src/test/jars/ant.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/codec.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/evil-sealed-regex-1.0.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.1-debug.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.1.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.2-debug.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.2.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.3-debug.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.3.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.4-debug.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.4.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.5-debug.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/helloworld-1.5.jar (with props)
maven/sandbox/maven-shared-jar/src/test/jars/jxr.jar (with props)
maven/sandbox/maven-shared-jar/src/test/java/
maven/sandbox/maven-shared-jar/src/test/java/org/
maven/sandbox/maven-shared-jar/src/test/java/org/apache/
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/AbstractJarTestCase.java (with props)
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/JarTest.java (with props)
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/classes/
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/classes/ImportVisitorTest.java (with props)
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java (with props)
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/taxon/
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/taxon/JarTaxonAnalyzerTest.java (with props)
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/taxon/exposers/
maven/sandbox/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/taxon/exposers/EmbeddedMavenModelExposerTest.java (with props)
Propchange: maven/sandbox/maven-shared-jar/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Aug 11 01:21:11 2006
@@ -0,0 +1,4 @@
+target
+*.iml
+*.ipr
+*.iws
Added: maven/sandbox/maven-shared-jar/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/pom.xml?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/pom.xml (added)
+++ maven/sandbox/maven-shared-jar/pom.xml Fri Aug 11 01:21:11 2006
@@ -0,0 +1,139 @@
+<?xml version="1.0" ?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-shared-components</artifactId>
+ <version>2</version>
+ </parent>
+
+ <artifactId>maven-shared-jar</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Shared Jar Utils</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>clean</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>changelog-maven-plugin</artifactId>
+ <!-- Changelog has been moved to org.apache.maven.plugins
+ Need to adjust this location in the future to point to
+ the finalized copy of this plugin.
+ <artifactId>maven-changelog-plugin</artifactId>
+ -->
+ </plugin>
+ <plugin>
+ <artifactId>maven-jxr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <configuration>
+ <linkXref>true</linkXref>
+ <rulesets>
+ <ruleset>rulesets/basic.xml</ruleset>
+ <ruleset>rulesets/codesize.xml</ruleset>
+ <ruleset>rulesets/controversial.xml</ruleset>
+ <ruleset>rulesets/coupling.xml</ruleset>
+ <ruleset>rulesets/finalizers.xml</ruleset>
+ <ruleset>rulesets/imports.xml</ruleset>
+ <ruleset>rulesets/junit.xml</ruleset>
+ <ruleset>rulesets/logging-jakarta-commons.xml</ruleset>
+ <ruleset>rulesets/naming.xml</ruleset>
+ <ruleset>rulesets/optimizations.xml</ruleset>
+ <ruleset>rulesets/strictexception.xml</ruleset>
+ <ruleset>rulesets/strings.xml</ruleset>
+ <ruleset>rulesets/sunsecure.xml</ruleset>
+ <ruleset>rulesets/unusedcode.xml</ruleset>
+ </rulesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>2.0.2</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.0.2</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.repository</groupId>
+ <artifactId>maven-repository-utils</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>bcel</groupId>
+ <artifactId>bcel</artifactId>
+ <version>5.1</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.1</version>
+ <scope>compile</scope>
+ </dependency>
+
+ </dependencies>
+
+</project>
Propchange: maven/sandbox/maven-shared-jar/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/pom.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/Jar.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/Jar.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/Jar.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/Jar.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,296 @@
+package org.apache.maven.shared.jar;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.repository.digest.Digester;
+import org.apache.maven.repository.digest.DigesterException;
+import org.apache.maven.repository.digest.StreamingDigester;
+import org.apache.maven.shared.jar.classes.JarClasses;
+import org.apache.maven.shared.jar.taxon.JarTaxon;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * A Jar Toolbox for working with Jar Files.
+ */
+public class Jar
+ extends AbstractLogEnabled
+{
+ private List entries;
+
+ private JarFile jarfile;
+
+ private File file;
+
+ private JarClasses classes;
+
+ private JarTaxon taxon;
+
+ private boolean isSealed;
+
+ /**
+ * Create a Jar Tool.
+ *
+ * @param file
+ * @throws JarException
+ */
+ public Jar( File file )
+ throws JarException
+ {
+ if ( file == null )
+ {
+ throw new JarException( "Null jar File." );
+ }
+
+ init( file );
+ }
+
+ /**
+ * @param filename
+ * @throws JarException
+ */
+ public Jar( String filename )
+ throws JarException
+ {
+ if ( StringUtils.isEmpty( filename ) )
+ {
+ throw new JarException( "Empty jar filename." );
+ }
+
+ init( new File( filename ) );
+ }
+
+ /**
+ * Compute the HashCode for this Jar File.
+ *
+ * @return the hashcode, or null if not able to be computed.
+ */
+ public String computeFileHash( Digester digester )
+ {
+ try
+ {
+ return digester.calc( new File( getFilename() ) );
+ }
+ catch ( DigesterException e )
+ {
+ getLogger().warn( "Unable to calculate the hashcode.", e );
+ return null;
+ }
+ }
+
+ /**
+ * Compute the HashCode for the Bytecode within this Jar File.
+ * <p/>
+ * Useful to see thru a recompile, recompression, or timestamp change.
+ *
+ * @return the hashcode, or null if not able to be computed.
+ */
+ public String computeBytecodeHash( StreamingDigester digester )
+ {
+ Iterator it = entries.iterator();
+ InputStream is;
+
+ try
+ {
+ digester.reset();
+ while ( it.hasNext() )
+ {
+ JarEntry entry = (JarEntry) it.next();
+
+ if ( entry.getName().endsWith( ".class" ) )
+ {
+ is = jarfile.getInputStream( entry );
+
+ digester.update( is );
+ }
+ }
+ return digester.calc();
+ }
+ catch ( DigesterException e )
+ {
+ getLogger().warn( "Unable to calculate the hashcode.", e );
+ return null;
+ }
+ catch ( IOException e )
+ {
+ getLogger().warn( "Unable to calculate the hashcode.", e );
+ return null;
+ }
+
+ }
+
+ public InputStream getEntryInputStream( JarEntry entry )
+ {
+ try
+ {
+ return jarfile.getInputStream( entry );
+ }
+ catch ( IOException e )
+ {
+ getLogger().error( "Unable to get input stream for entry " + entry.getName() + ": " + e.getMessage() );
+ return null;
+ }
+ }
+
+ public File getFile()
+ {
+ return file;
+ }
+
+ public String getFilename()
+ {
+ return jarfile.getName();
+ }
+
+ public Manifest getManifest()
+ {
+ try
+ {
+ return jarfile.getManifest();
+ }
+ catch ( IOException e )
+ {
+ getLogger().error( "Unable to get manifest on " + this + ": " + e.getMessage() );
+ return null;
+ }
+ }
+
+ public List getNameRegexEntryList( String regex )
+ {
+ List ret = new ArrayList();
+
+ Pattern pat = Pattern.compile( regex );
+ Matcher mat;
+
+ Iterator it = entries.iterator();
+ while ( it.hasNext() )
+ {
+ JarEntry entry = (JarEntry) it.next();
+
+ mat = pat.matcher( entry.getName() );
+ if ( mat.find() )
+ {
+ ret.add( entry );
+ }
+ }
+
+ return ret;
+ }
+
+ private void init( File jfile )
+ throws JarException
+ {
+ if ( !jfile.exists() )
+ {
+ throw new JarException( "File " + jfile.getAbsolutePath() + " does not exist." );
+ }
+
+ if ( !jfile.canRead() )
+ {
+ throw new JarException( "No read access to file " + jfile.getAbsolutePath() + "." );
+ }
+
+ try
+ {
+ this.jarfile = new JarFile( jfile );
+ this.file = jfile;
+ }
+ catch ( IOException e )
+ {
+ throw new JarException( "Unable to open artifact " + jfile.getAbsolutePath(), e );
+ }
+
+ // Obtain entries list.
+
+ entries = new ArrayList();
+ Enumeration jarentries = jarfile.entries();
+ while ( jarentries.hasMoreElements() )
+ {
+ JarEntry entry = (JarEntry) jarentries.nextElement();
+ entries.add( entry );
+ }
+
+ // Sorting of list is done to ensure a proper Bytecode Hash.
+ Collections.sort( entries, new JarEntryComparator() );
+
+ Manifest manifest = getManifest();
+ String sval = manifest.getMainAttributes().getValue( Attributes.Name.SEALED );
+ if ( StringUtils.isEmpty( sval ) )
+ {
+ isSealed = false;
+ }
+ else
+ {
+ isSealed = sval.trim().equalsIgnoreCase( "true" );
+ }
+ }
+
+ public String toString()
+ {
+ return "<Jar:" + jarfile.getName() + ">";
+ }
+
+ public boolean isSealed()
+ {
+ return isSealed;
+ }
+
+ public void setSealed( boolean isSealed )
+ {
+ this.isSealed = isSealed;
+ }
+
+ public JarClasses getClasses()
+ {
+ return classes;
+ }
+
+ public void setClasses( JarClasses classes )
+ {
+ this.classes = classes;
+ }
+
+ public JarTaxon getTaxon()
+ {
+ return taxon;
+ }
+
+ public void setTaxon( JarTaxon taxon )
+ {
+ this.taxon = taxon;
+ }
+
+ public List getEntries()
+ {
+ return entries;
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/Jar.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/Jar.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,27 @@
+package org.apache.maven.shared.jar;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+/**
+ * Jar Analyzer Interface.
+ */
+public interface JarAnalyzer
+{
+ static final String ROLE = JarAnalyzer.class.getName();
+
+ public void analyze( Jar jar );
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarEntryComparator.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarEntryComparator.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarEntryComparator.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarEntryComparator.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,29 @@
+/**
+ *
+ */
+package org.apache.maven.shared.jar;
+
+import java.util.Comparator;
+import java.util.jar.JarEntry;
+
+class JarEntryComparator
+ implements Comparator
+{
+
+ public int compare( Object o1, Object o2 )
+ {
+ if ( !( o1 instanceof JarEntry ) )
+ {
+ return 0;
+ }
+ if ( !( o2 instanceof JarEntry ) )
+ {
+ return 0;
+ }
+ JarEntry j1 = (JarEntry) o1;
+ JarEntry j2 = (JarEntry) o2;
+
+ return j1.getName().compareTo( j2.getName() );
+ }
+
+}
\ No newline at end of file
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarEntryComparator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarEntryComparator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarException.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarException.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarException.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,44 @@
+package org.apache.maven.shared.jar;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+/**
+ * Exceptions that occur during Jar utility methods.
+ */
+public class JarException
+ extends Exception
+{
+ public JarException()
+ {
+ super();
+ }
+
+ public JarException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public JarException( String message )
+ {
+ super( message );
+ }
+
+ public JarException( Throwable cause )
+ {
+ super( cause );
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarException.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,172 @@
+package org.apache.maven.shared.jar.classes;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.bcel.classfile.ConstantClass;
+import org.apache.bcel.classfile.ConstantUtf8;
+import org.apache.bcel.classfile.EmptyVisitor;
+import org.apache.bcel.classfile.JavaClass;
+import org.apache.commons.collections.list.SetUniqueList;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * ImportVisitor
+ */
+public class ImportVisitor
+ extends EmptyVisitor
+{
+ private List imports;
+
+ private JavaClass javaClass;
+
+ private Pattern qualifiedPat;
+
+ private Pattern validUtfPat;
+
+ /**
+ * Create an Import visitor.
+ *
+ * @param javaClass the javaclass to work off of.
+ */
+ public ImportVisitor( JavaClass javaClass )
+ {
+ this.javaClass = javaClass;
+ this.imports = SetUniqueList.decorate( new ArrayList() );
+ this.qualifiedPat = Pattern.compile( "L([a-zA-Z][a-zA-Z0-9\\.]+);" );
+ this.validUtfPat = Pattern.compile( "^[\\(\\)\\[A-Za-z0-9;/]+$" );
+ }
+
+ /**
+ * Get the list of discovered imports.
+ *
+ * @return Returns the imports.
+ */
+ public List getImports()
+ {
+ return imports;
+ }
+
+ /**
+ * Find any formally declared import in the Constant Pool.
+ *
+ * @see org.apache.bcel.classfile.EmptyVisitor#visitConstantClass(org.apache.bcel.classfile.ConstantClass)
+ */
+ public void visitConstantClass( ConstantClass constantClass )
+ {
+ String name = constantClass.getBytes( javaClass.getConstantPool() );
+
+ // only strings with '/' character are to be considered.
+ if ( name.indexOf( '/' ) == ( -1 ) )
+ {
+ return;
+ }
+
+ name = name.replace( '/', '.' );
+
+ if ( name.endsWith( ".class" ) )
+ {
+ name = name.substring( 0, name.length() - 6 );
+ }
+
+ Matcher mat = qualifiedPat.matcher( name );
+ if ( mat.find() )
+ {
+ this.imports.add( mat.group( 1 ) );
+ }
+ else
+ {
+ this.imports.add( name );
+ }
+ }
+
+ /**
+ * Find any package class Strings in the UTF8 String Pool.
+ *
+ * @see org.apache.bcel.classfile.EmptyVisitor#visitConstantUtf8(org.apache.bcel.classfile.ConstantUtf8)
+ */
+ public void visitConstantUtf8( ConstantUtf8 constantUtf8 )
+ {
+ String ret = constantUtf8.getBytes().trim();
+
+ // empty strings are not class names.
+ if ( ret.length() <= 0 )
+ {
+ return;
+ }
+
+ // Only valid characters please.
+ if ( !validUtfPat.matcher( ret ).matches() )
+ {
+ return;
+ }
+
+ // only strings with '/' character are to be considered.
+ if ( ret.indexOf( '/' ) == ( -1 ) )
+ {
+ return;
+ }
+
+ // Strings that start with '/' are bad too
+ // Seen when Pool has regex patterns.
+ if ( ret.charAt( 0 ) == '/' )
+ {
+ return;
+ }
+
+ // Make string more class-like.
+ ret = ret.replace( '/', '.' );
+
+ // Double ".." indicates a bad class fail-fast.
+ // Seen when ConstantUTF8 Pool has regex patterns.
+ if ( ret.indexOf( ".." ) != ( -1 ) )
+ {
+ return;
+ }
+
+ Matcher mat = qualifiedPat.matcher( ret );
+ char prefix = ret.charAt( 0 );
+
+ if ( prefix == '(' )
+ {
+ // A Method Declaration.
+
+ // Loop for each Qualified Class found.
+ while ( mat.find() )
+ {
+ this.imports.add( mat.group( 1 ) );
+ }
+ }
+ else
+ {
+ // A Variable Declaration.
+ if ( mat.find() )
+ {
+ // Add a UTF8 Qualified Class reference.
+ this.imports.add( mat.group( 1 ) );
+ }
+ else
+ {
+ // Add a simple Class reference.
+ this.imports.add( ret );
+ }
+ }
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,136 @@
+package org.apache.maven.shared.jar.classes;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.commons.collections.list.SetUniqueList;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Facts about the classes within a Jar File.
+ */
+public class JarClasses
+{
+ private List imports;
+
+ private List packages;
+
+ private List classNames;
+
+ private boolean isDebugPresent;
+
+ private String jdkRevision;
+
+ /**
+ * Create Empty JarFacts.
+ */
+ public JarClasses()
+ {
+ super();
+ imports = SetUniqueList.decorate( new ArrayList() );
+ packages = SetUniqueList.decorate( new ArrayList() );
+ classNames = SetUniqueList.decorate( new ArrayList() );
+ }
+
+ public void addClassName( String name )
+ {
+ this.classNames.add( name );
+ }
+
+ /**
+ * Add an Import.
+ *
+ * @param iname the import name
+ */
+ public void addImport( String iname )
+ {
+ this.imports.add( iname );
+ }
+
+ /**
+ * Add a Package name.
+ *
+ * @param pname the package name
+ */
+ public void addPackage( String pname )
+ {
+ this.packages.add( pname );
+ }
+
+ public List getClassNames()
+ {
+ return classNames;
+ }
+
+ /**
+ * @return Returns the imports.
+ */
+ public List getImports()
+ {
+ return imports;
+ }
+
+ /**
+ * @return Returns the packages.
+ */
+ public List getPackages()
+ {
+ return packages;
+ }
+
+ public void setClassNames( List classes )
+ {
+ this.classNames = classes;
+ }
+
+ /**
+ * @param imports The imports to set.
+ */
+ public void setImports( List imports )
+ {
+ this.imports = imports;
+ }
+
+ /**
+ * @param packages The packages to set.
+ */
+ public void setPackages( List packages )
+ {
+ this.packages = packages;
+ }
+
+ public boolean isDebugPresent()
+ {
+ return isDebugPresent;
+ }
+
+ public void setDebugPresent( boolean hasDebugSymbols )
+ {
+ this.isDebugPresent = hasDebugSymbols;
+ }
+
+ public String getJdkRevision()
+ {
+ return jdkRevision;
+ }
+
+ public void setJdkRevision( String jdkRevision )
+ {
+ this.jdkRevision = jdkRevision;
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,160 @@
+package org.apache.maven.shared.jar.classes;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.bcel.classfile.ClassParser;
+import org.apache.bcel.classfile.DescendingVisitor;
+import org.apache.bcel.classfile.JavaClass;
+import org.apache.bcel.classfile.LineNumberTable;
+import org.apache.bcel.classfile.Method;
+import org.apache.maven.shared.jar.Jar;
+import org.apache.maven.shared.jar.JarAnalyzer;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.jar.JarEntry;
+
+/**
+ * Jar Classes Analyzer
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.JarAnalyzer" role-hint="classes"
+ */
+public class JarClassesAnalyzer
+ extends AbstractLogEnabled
+ implements JarAnalyzer
+{
+ /**
+ * Analyze and populate the <code>jar.information.classes</code> object.
+ */
+ public void analyze( Jar jar )
+ {
+ try
+ {
+ String jarfilename = jar.getFile().getAbsolutePath();
+ JarClasses classes = new JarClasses();
+
+ List classList = jar.getNameRegexEntryList( "[A-Za-z0-9]*\\.class$" );
+
+ classes.setDebugPresent( false );
+
+ double maxVersion = 0.0;
+
+ Iterator it = classList.iterator();
+ while ( it.hasNext() )
+ {
+ JarEntry entry = (JarEntry) it.next();
+ String classname = entry.getName();
+
+ ClassParser classParser = new ClassParser( jarfilename, classname );
+ JavaClass javaClass = classParser.parse();
+
+ if ( !classes.isDebugPresent() )
+ {
+ if ( hasDebugSymbols( javaClass ) )
+ {
+ classes.setDebugPresent( true );
+ }
+ }
+
+ double classVersion = javaClass.getMajor();
+ if ( javaClass.getMinor() > 0 )
+ {
+ classVersion = classVersion + ( 1 / (double) javaClass.getMinor() );
+ }
+
+ if ( classVersion > maxVersion )
+ {
+ maxVersion = classVersion;
+ }
+
+ String classPackageName = javaClass.getPackageName();
+
+ classes.addClassName( javaClass.getClassName() );
+ classes.addPackage( classPackageName );
+
+ ImportVisitor importVisitor = new ImportVisitor( javaClass );
+ DescendingVisitor descVisitor = new DescendingVisitor( javaClass, importVisitor );
+ javaClass.accept( descVisitor );
+
+ addImports( classes, importVisitor.getImports() );
+ }
+
+ if ( maxVersion >= 50.0 )
+ {
+ classes.setJdkRevision( "1.6" );
+ }
+ else if ( maxVersion >= 49.0 )
+ {
+ classes.setJdkRevision( "1.5" );
+ }
+ else if ( maxVersion > 47.0 )
+ {
+ classes.setJdkRevision( "1.4" );
+ }
+ else if ( maxVersion > 46.0 )
+ {
+ classes.setJdkRevision( "1.3" );
+ }
+ else if ( maxVersion > 45.65536 )
+ {
+ classes.setJdkRevision( "1.2" );
+ }
+ else if ( maxVersion > 45.3 )
+ {
+ classes.setJdkRevision( "1.1" );
+ }
+ else
+ {
+ classes.setJdkRevision( "1.0" );
+ }
+
+ jar.setClasses( classes );
+ }
+ catch ( IOException e )
+ {
+ getLogger().warn( "Unable to process Jar File " + jar.getFile(), e );
+ }
+ }
+
+ private boolean hasDebugSymbols( JavaClass javaClass )
+ {
+ boolean ret = false;
+ Method methods[] = javaClass.getMethods();
+ for ( int i = 0; i < methods.length; i++ )
+ {
+ LineNumberTable linenumbers = methods[i].getLineNumberTable();
+ if ( ( linenumbers != null ) && ( linenumbers.getLength() > 0 ) )
+ {
+ ret = true;
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+ private void addImports( JarClasses facts, List imports )
+ {
+ Iterator it = imports.iterator();
+ while ( it.hasNext() )
+ {
+ facts.addImport( (String) it.next() );
+ }
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/AbstractJarTaxonExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/AbstractJarTaxonExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/AbstractJarTaxonExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/AbstractJarTaxonExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,141 @@
+package org.apache.maven.shared.jar.taxon;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.shared.jar.Jar;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.console.ConsoleLogger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Abstract Jar Taxon Exposer.
+ */
+public abstract class AbstractJarTaxonExposer
+ extends AbstractLogEnabled
+ implements JarTaxonExposer
+{
+ private Jar jar;
+
+ private List groupIds = null;
+
+ private List artifactIds = null;
+
+ private List versions = null;
+
+ private List names = null;
+
+ private List vendors = null;
+
+ public Jar getJar()
+ {
+ return jar;
+ }
+
+ public void setJar( Jar jar )
+ {
+ this.jar = jar;
+ }
+
+ private List addUnique( List list, String id )
+ {
+ if ( id == null )
+ {
+ return list;
+ }
+
+ if ( list == null )
+ {
+ list = new ArrayList();
+ }
+
+ if ( !list.contains( id ) )
+ {
+ list.add( id );
+ }
+
+ return list;
+ }
+
+ protected void addGroupId( String id )
+ {
+ this.groupIds = addUnique( groupIds, id );
+ }
+
+ protected void addArtifactId( String id )
+ {
+ this.artifactIds = addUnique( artifactIds, id );
+ }
+
+ protected void addVersion( String id )
+ {
+ this.versions = addUnique( versions, id );
+ }
+
+ protected void addName( String id )
+ {
+ this.names = addUnique( names, id );
+ }
+
+ protected void addVendor( String id )
+ {
+ this.vendors = addUnique( vendors, id );
+ }
+
+ public List getGroupIds()
+ {
+ return groupIds;
+ }
+
+ public List getArtifactIds()
+ {
+ return artifactIds;
+ }
+
+ public List getVersions()
+ {
+ return versions;
+ }
+
+ public List getNames()
+ {
+ return names;
+ }
+
+ public List getVendors()
+ {
+ return vendors;
+ }
+
+ private Logger log;
+
+ protected Logger getLogger()
+ {
+ if ( log == null )
+ {
+ log = super.getLogger();
+ if ( log == null )
+ {
+ log = new ConsoleLogger( Logger.LEVEL_DEBUG, AbstractJarTaxonExposer.class.getName() );
+ }
+ }
+
+ return log;
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/AbstractJarTaxonExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/AbstractJarTaxonExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/EmptyRepositoryHashSearch.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/EmptyRepositoryHashSearch.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/EmptyRepositoryHashSearch.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/EmptyRepositoryHashSearch.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,47 @@
+package org.apache.maven.shared.jar.taxon;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Empty Repository Hash Search. Always returns an empty list.
+ * Used for local only implementation of a RepositoryHashSearch.
+ * It is expected for the users of this library to provide an implementation
+ * of a RepositoryHashSearch against a real repository.
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.taxon.RepositoryHashSearch"
+ */
+public class EmptyRepositoryHashSearch
+ implements RepositoryHashSearch
+{
+ public boolean isValid()
+ {
+ return false;
+ }
+
+ public List searchBytecodeHash( String hash )
+ {
+ return Collections.EMPTY_LIST;
+ }
+
+ public List searchFileHash( String hash )
+ {
+ return Collections.EMPTY_LIST;
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/EmptyRepositoryHashSearch.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/EmptyRepositoryHashSearch.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxon.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxon.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxon.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxon.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,191 @@
+package org.apache.maven.shared.jar.taxon;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Jar Taxon, the set of Maven dependency information both found and potential.
+ */
+public class JarTaxon
+{
+ private boolean wellKnown = false;
+
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ private String name;
+
+ private String vendor;
+
+ private List potentials;
+
+ public JarTaxon()
+ {
+ potentials = new ArrayList();
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName( String name )
+ {
+ this.name = name;
+ }
+
+ public List getPotentials()
+ {
+ return potentials;
+ }
+
+ public void setPotentials( List potentials )
+ {
+ this.potentials = potentials;
+ }
+
+ public String getVendor()
+ {
+ return vendor;
+ }
+
+ public void setVendor( String vendor )
+ {
+ this.vendor = vendor;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public boolean isWellKnown()
+ {
+ return wellKnown;
+ }
+
+ public void setWellKnown( boolean wellKnown )
+ {
+ this.wellKnown = wellKnown;
+ }
+
+ public List getGroupIds()
+ {
+ List ret = new ArrayList();
+ Iterator it = potentials.iterator();
+ while ( it.hasNext() )
+ {
+ AbstractJarTaxonExposer exposer = (AbstractJarTaxonExposer) it.next();
+ if ( exposer.getGroupIds() != null )
+ {
+ ret.addAll( exposer.getGroupIds() );
+ }
+ }
+ return ret;
+ }
+
+ public List getArtifactIds()
+ {
+ List ret = new ArrayList();
+ Iterator it = potentials.iterator();
+ while ( it.hasNext() )
+ {
+ AbstractJarTaxonExposer exposer = (AbstractJarTaxonExposer) it.next();
+ if ( exposer.getArtifactIds() != null )
+ {
+ ret.addAll( exposer.getArtifactIds() );
+ }
+ }
+ return ret;
+ }
+
+ public List getVersions()
+ {
+ List ret = new ArrayList();
+ Iterator it = potentials.iterator();
+ while ( it.hasNext() )
+ {
+ AbstractJarTaxonExposer exposer = (AbstractJarTaxonExposer) it.next();
+ if ( exposer.getVersions() != null )
+ {
+ ret.addAll( exposer.getVersions() );
+ }
+ }
+ return ret;
+ }
+
+ public List getNames()
+ {
+ List ret = new ArrayList();
+ Iterator it = potentials.iterator();
+ while ( it.hasNext() )
+ {
+ AbstractJarTaxonExposer exposer = (AbstractJarTaxonExposer) it.next();
+ if ( exposer.getNames() != null )
+ {
+ ret.addAll( exposer.getNames() );
+ }
+ }
+ return ret;
+ }
+
+ public List getVendors()
+ {
+ List ret = new ArrayList();
+ Iterator it = potentials.iterator();
+ while ( it.hasNext() )
+ {
+ AbstractJarTaxonExposer exposer = (AbstractJarTaxonExposer) it.next();
+ if ( exposer.getVendors() != null )
+ {
+ ret.addAll( exposer.getVendors() );
+ }
+ }
+ return ret;
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxon.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxon.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonAnalyzer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonAnalyzer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonAnalyzer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonAnalyzer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,180 @@
+package org.apache.maven.shared.jar.taxon;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.shared.jar.Jar;
+import org.apache.maven.shared.jar.JarAnalyzer;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Jar Taxon Analyzer
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.JarAnalyzer" role-hint="taxon"
+ */
+public class JarTaxonAnalyzer
+ implements JarAnalyzer
+{
+ /**
+ * @plexus.requirement role="org.apache.maven.shared.jar.taxon.JarTaxonExposer"
+ */
+ private List exposers;
+
+ public void analyze( Jar jar )
+ {
+ JarTaxon taxon = new JarTaxon();
+
+ for ( Iterator i = exposers.iterator(); i.hasNext(); )
+ {
+ JarTaxonExposer exposer = (JarTaxonExposer) i.next();
+ exposer.setJar( jar );
+ addExposer( taxon, exposer );
+ }
+
+ normalize( taxon );
+
+ jar.setTaxon( taxon );
+ }
+
+ private void addExposer( JarTaxon taxon, JarTaxonExposer exposer )
+ {
+ taxon.getPotentials().add( exposer );
+ exposer.expose();
+
+ if ( exposer.isAuthoritative() )
+ {
+ if ( StringUtils.isEmpty( taxon.getGroupId() ) && isNotEmpty( exposer.getGroupIds() ) )
+ {
+ taxon.setGroupId( (String) exposer.getGroupIds().get( 0 ) );
+ }
+
+ if ( StringUtils.isEmpty( taxon.getArtifactId() ) && isNotEmpty( exposer.getArtifactIds() ) )
+ {
+ taxon.setArtifactId( (String) exposer.getArtifactIds().get( 0 ) );
+ }
+
+ if ( StringUtils.isEmpty( taxon.getVersion() ) && isNotEmpty( exposer.getVersions() ) )
+ {
+ taxon.setVersion( (String) exposer.getVersions().get( 0 ) );
+ }
+
+ if ( StringUtils.isEmpty( taxon.getName() ) && isNotEmpty( exposer.getNames() ) )
+ {
+ taxon.setName( (String) exposer.getNames().get( 0 ) );
+ }
+
+ if ( StringUtils.isEmpty( taxon.getVendor() ) && isNotEmpty( exposer.getVendors() ) )
+ {
+ taxon.setVendor( (String) exposer.getVendors().get( 0 ) );
+ }
+ }
+ }
+
+ private void normalize( JarTaxon taxon )
+ {
+ if ( StringUtils.isEmpty( taxon.getGroupId() ) )
+ {
+ taxon.setGroupId( pickSmallest( taxon.getGroupIds() ) );
+ }
+
+ if ( StringUtils.isEmpty( taxon.getArtifactId() ) )
+ {
+ taxon.setArtifactId( pickLargest( taxon.getArtifactIds() ) );
+ }
+
+ if ( StringUtils.isEmpty( taxon.getVersion() ) )
+ {
+ taxon.setVersion( pickSmallest( taxon.getVersions() ) );
+ }
+
+ if ( StringUtils.isEmpty( taxon.getName() ) )
+ {
+ taxon.setName( pickLargest( taxon.getNames() ) );
+ }
+
+ if ( StringUtils.isEmpty( taxon.getVendor() ) )
+ {
+ taxon.setVendor( pickLargest( taxon.getVendors() ) );
+ }
+ }
+
+ private String pickSmallest( List list )
+ {
+ if ( isEmpty( list ) )
+ {
+ return null;
+ }
+
+ int size = Integer.MAX_VALUE;
+ String smallest = null;
+ Iterator it = list.iterator();
+ while ( it.hasNext() )
+ {
+ String val = (String) it.next();
+
+ if ( StringUtils.isNotEmpty( val ) )
+ {
+ if ( val.length() < size )
+ {
+ smallest = val;
+ size = val.length();
+ }
+ }
+ }
+
+ return smallest;
+ }
+
+ private String pickLargest( List list )
+ {
+ if ( isEmpty( list ) )
+ {
+ return null;
+ }
+
+ int size = Integer.MIN_VALUE;
+ String largest = null;
+ Iterator it = list.iterator();
+ while ( it.hasNext() )
+ {
+ String val = (String) it.next();
+ if ( StringUtils.isNotEmpty( val ) )
+ {
+ if ( val.length() > size )
+ {
+ largest = val;
+ size = val.length();
+ }
+ }
+ }
+
+ return largest;
+ }
+
+ private boolean isEmpty( Collection coll )
+ {
+ return ( ( coll == null ) || coll.isEmpty() );
+ }
+
+ private boolean isNotEmpty( Collection coll )
+ {
+ return ( ( coll != null ) && !coll.isEmpty() );
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonAnalyzer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonAnalyzer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,48 @@
+package org.apache.maven.shared.jar.taxon;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.shared.jar.Jar;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public interface JarTaxonExposer
+{
+ static final String ROLE = JarTaxonExposer.class.getName();
+
+ void setJar( Jar jar );
+
+ void expose();
+
+ boolean isAuthoritative();
+
+ String getExposerName();
+
+ List getGroupIds();
+
+ List getArtifactIds();
+
+ List getVersions();
+
+ List getNames();
+
+ List getVendors();
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/JarTaxonExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/RepositoryHashSearch.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/RepositoryHashSearch.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/RepositoryHashSearch.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/RepositoryHashSearch.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,33 @@
+package org.apache.maven.shared.jar.taxon;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import java.util.List;
+
+/**
+ * Interface for Repository Hash Searches.
+ */
+public interface RepositoryHashSearch
+{
+ public static final String ROLE = RepositoryHashSearch.class.getName();
+
+ public boolean isValid();
+
+ public List searchFileHash( String hash );
+
+ public List searchBytecodeHash( String hash );
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/RepositoryHashSearch.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/RepositoryHashSearch.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/EmbeddedMavenModelExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/EmbeddedMavenModelExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/EmbeddedMavenModelExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/EmbeddedMavenModelExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,86 @@
+package org.apache.maven.shared.jar.taxon.exposers;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Organization;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.shared.jar.taxon.AbstractJarTaxonExposer;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.List;
+import java.util.jar.JarEntry;
+
+
+/**
+ * Jar Taxon Exposer for the Embedded Maven Model.
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.taxon.JarTaxonExposer" role-hint="embeddedMavenModel"
+ */
+public class EmbeddedMavenModelExposer
+ extends AbstractJarTaxonExposer
+{
+ public void expose()
+ {
+ List entries = getJar().getNameRegexEntryList( "META-INF/maven/.*/pom\\.xml$" ); //$NON-NLS-1$
+ if ( entries.isEmpty() )
+ {
+ return;
+ }
+
+ JarEntry pom = (JarEntry) entries.get( 0 );
+ MavenXpp3Reader pomreader = new MavenXpp3Reader();
+ try
+ {
+ InputStream istream = getJar().getEntryInputStream( pom );
+ InputStreamReader isreader = new InputStreamReader( istream );
+ Model model = pomreader.read( isreader );
+
+ addGroupId( model.getGroupId() );
+ addArtifactId( model.getArtifactId() );
+ addVersion( model.getVersion() );
+ addName( model.getName() );
+
+ Organization org = model.getOrganization();
+ if ( org != null )
+ {
+ addVendor( org.getName() );
+ }
+ }
+ catch ( IOException e )
+ {
+ getLogger().error( "Unable to read model " + pom.getName() + " in " + getJar().getFilename() + ".", e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ getLogger().error( "Unable to parse model " + pom.getName() + " in " + getJar().getFilename() + ".", e );
+ }
+ }
+
+ public String getExposerName()
+ {
+ return "Embedded Model";
+ }
+
+ public boolean isAuthoritative()
+ {
+ return true;
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/EmbeddedMavenModelExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/EmbeddedMavenModelExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/FilenameExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/FilenameExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/FilenameExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/FilenameExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,62 @@
+package org.apache.maven.shared.jar.taxon.exposers;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.shared.jar.taxon.AbstractJarTaxonExposer;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+/**
+ * Jar Taxon Exposer based on Filename patterns.
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.taxon.JarTaxonExposer" role-hint="filename"
+ */
+public class FilenameExposer
+ extends AbstractJarTaxonExposer
+{
+ public String getExposerName()
+ {
+ return "Filename";
+ }
+
+ public boolean isAuthoritative()
+ {
+ return false;
+ }
+
+ public void expose()
+ {
+ String fname = FileUtils.removeExtension( getJar().getFile().getName() );
+ Pattern verSplit = Pattern.compile( "-[0-9]" ); //$NON-NLS-1$
+ Matcher mat = verSplit.matcher( fname );
+ if ( mat.find() )
+ {
+ String prefix = fname.substring( 0, mat.start() );
+ addArtifactId( prefix );
+ addName( prefix );
+ addVersion( fname.substring( mat.end() - 1 ) );
+ }
+ else
+ {
+ addArtifactId( fname );
+ addName( fname );
+ }
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/FilenameExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/FilenameExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/JarClassesExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/JarClassesExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/JarClassesExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/JarClassesExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,68 @@
+package org.apache.maven.shared.jar.taxon.exposers;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.shared.jar.classes.JarClasses;
+import org.apache.maven.shared.jar.classes.JarClassesAnalyzer;
+import org.apache.maven.shared.jar.taxon.AbstractJarTaxonExposer;
+
+import java.util.Iterator;
+
+
+/**
+ * Jar Taxon Exposer for the information from JarClasses.
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.taxon.JarTaxonExposer" role-hint="jarClasses"
+ */
+public class JarClassesExposer
+ extends AbstractJarTaxonExposer
+{
+ public String getExposerName()
+ {
+ return "Jar Classes";
+ }
+
+ public boolean isAuthoritative()
+ {
+ return false;
+ }
+
+ public void expose()
+ {
+ JarClasses jarclasses = getJar().getClasses();
+
+ if ( jarclasses == null )
+ {
+ JarClassesAnalyzer analyzer = new JarClassesAnalyzer();
+ analyzer.analyze( getJar() );
+ jarclasses = getJar().getClasses();
+ }
+
+ if ( jarclasses == null )
+ {
+ getLogger().error( "Unable to process null JarClasses on " + getJar().getFilename() );
+ return;
+ }
+
+ Iterator it = jarclasses.getPackages().iterator();
+ while ( it.hasNext() )
+ {
+ String packagename = (String) it.next();
+ addGroupId( packagename );
+ }
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/JarClassesExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/JarClassesExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/ManifestExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/ManifestExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/ManifestExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/ManifestExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,76 @@
+package org.apache.maven.shared.jar.taxon.exposers;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.shared.jar.taxon.AbstractJarTaxonExposer;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+
+/**
+ * Jar Taxon Exposer for the Manifest.mf contents.
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.taxon.JarTaxonExposer" role-hint="manifest"
+ */
+public class ManifestExposer
+ extends AbstractJarTaxonExposer
+{
+ public String getExposerName()
+ {
+ return "Manifest.mf";
+ }
+
+ public boolean isAuthoritative()
+ {
+ return false;
+ }
+
+ public void expose()
+ {
+ Manifest manifest = getJar().getManifest();
+ if ( manifest != null )
+ {
+ addManifestAttributeValues( manifest.getMainAttributes() );
+
+ Map entries = manifest.getEntries();
+ Iterator itentries = entries.entrySet().iterator();
+ while ( itentries.hasNext() )
+ {
+ Map.Entry entry = (Map.Entry) itentries.next();
+ Attributes attribs = (Attributes) entry.getValue();
+
+ addManifestAttributeValues( attribs );
+ }
+ }
+ }
+
+ private void addManifestAttributeValues( Attributes attribs )
+ {
+ addName( attribs.getValue( Attributes.Name.IMPLEMENTATION_TITLE ) );
+ addVersion( attribs.getValue( Attributes.Name.IMPLEMENTATION_VERSION ) );
+ addVendor( attribs.getValue( Attributes.Name.IMPLEMENTATION_VENDOR ) );
+
+ addName( attribs.getValue( Attributes.Name.SPECIFICATION_TITLE ) );
+ addVersion( attribs.getValue( Attributes.Name.SPECIFICATION_VERSION ) );
+ addVendor( attribs.getValue( Attributes.Name.SPECIFICATION_VENDOR ) );
+
+ addGroupId( attribs.getValue( Attributes.Name.EXTENSION_NAME ) );
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/ManifestExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/ManifestExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/RepositorySearchExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/RepositorySearchExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/RepositorySearchExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/RepositorySearchExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,92 @@
+package org.apache.maven.shared.jar.taxon.exposers;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.repository.digest.Digester;
+import org.apache.maven.repository.digest.StreamingDigester;
+import org.apache.maven.shared.jar.taxon.AbstractJarTaxonExposer;
+import org.apache.maven.shared.jar.taxon.RepositoryHashSearch;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Jar Taxon Exposer for the hashcode hits within a repository.
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.taxon.JarTaxonExposer" role-hint="repositorySearch"
+ */
+public class RepositorySearchExposer
+ extends AbstractJarTaxonExposer
+{
+ /**
+ * @plexus.requirement role="org.apache.maven.repository.digest.Digester" role-hint="sha1"
+ */
+ private Digester digester;
+
+ /**
+ * @plexus.requirement role-hint="sha1"
+ */
+ private StreamingDigester streamingDigester;
+
+ /**
+ * @plexus.requirement
+ */
+ private RepositoryHashSearch repositoryHashSearch;
+
+ public String getExposerName()
+ {
+ return "Repository Hashcode Hit";
+ }
+
+ public boolean isAuthoritative()
+ {
+ return true;
+ }
+
+ public RepositoryHashSearch getRepositoryHashSearch()
+ {
+ return repositoryHashSearch;
+ }
+
+ public void setRepositoryHashSearch( RepositoryHashSearch repo )
+ {
+ this.repositoryHashSearch = repo;
+ }
+
+ public void expose()
+ {
+ String hash = getJar().computeFileHash( digester );
+ String bytecodehash = getJar().computeBytecodeHash( streamingDigester );
+ List repohits = new ArrayList();
+ repohits.addAll( repositoryHashSearch.searchFileHash( hash ) );
+ repohits.addAll( repositoryHashSearch.searchBytecodeHash( bytecodehash ) );
+ if ( !repohits.isEmpty() )
+ {
+ // Found hits in the repository.
+ Iterator it = repohits.iterator();
+ while ( it.hasNext() )
+ {
+ Artifact artifact = (Artifact) it.next();
+ addGroupId( artifact.getGroupId() );
+ addArtifactId( artifact.getArtifactId() );
+ addVersion( artifact.getVersion() );
+ }
+ }
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/RepositorySearchExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/RepositorySearchExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/StaticMainOutputExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/StaticMainOutputExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/StaticMainOutputExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/StaticMainOutputExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,63 @@
+package org.apache.maven.shared.jar.taxon.exposers;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.shared.jar.taxon.AbstractJarTaxonExposer;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+
+/**
+ * Jar Taxon Exposer - Static Main Class Output
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.taxon.JarTaxonExposer" role-hint="staticMainOutput"
+ */
+public class StaticMainOutputExposer
+ extends AbstractJarTaxonExposer
+{
+ public String getExposerName()
+ {
+ return "Static Main Output";
+ }
+
+ public boolean isAuthoritative()
+ {
+ return false;
+ }
+
+ public void expose()
+ {
+ List staticMains = findStaticMainVersions();
+ if ( !staticMains.isEmpty() )
+ {
+ Iterator itvers = staticMains.iterator();
+ while ( itvers.hasNext() )
+ {
+ String ver = (String) itvers.next();
+ addVersion( ver );
+ }
+ }
+ }
+
+ private List findStaticMainVersions()
+ {
+ // TODO: Execute the static main methods of classes with 'Version' in their name.
+ return Collections.EMPTY_LIST;
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/StaticMainOutputExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/StaticMainOutputExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/TextFileExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/TextFileExposer.java?rev=430718&view=auto
==============================================================================
--- maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/TextFileExposer.java (added)
+++ maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/TextFileExposer.java Fri Aug 11 01:21:11 2006
@@ -0,0 +1,106 @@
+package org.apache.maven.shared.jar.taxon.exposers;
+
+/*
+ * Copyright 2001-2006 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.
+ */
+
+import org.apache.maven.shared.jar.taxon.AbstractJarTaxonExposer;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.jar.JarEntry;
+
+
+/**
+ * Jar Taxon Exposer based on Text File contents.
+ *
+ * @plexus.component role="org.apache.maven.shared.jar.taxon.JarTaxonExposer" role-hint="textFile"
+ */
+public class TextFileExposer
+ extends AbstractJarTaxonExposer
+{
+ public String getExposerName()
+ {
+ return "Text File";
+ }
+
+ public boolean isAuthoritative()
+ {
+ return false;
+ }
+
+ public void expose()
+ {
+ List textFiles = findTextFileVersions();
+ if ( !textFiles.isEmpty() )
+ {
+ Iterator ithits = textFiles.iterator();
+ while ( ithits.hasNext() )
+ {
+ String ver = (String) ithits.next();
+ addVersion( ver );
+ }
+ }
+ }
+
+ private List findTextFileVersions()
+ {
+ List textVersions = new ArrayList();
+ List hits = getJar().getNameRegexEntryList( "[Vv][Ee][Rr][Ss][Ii][Oo][Nn]" ); //$NON-NLS-1$
+
+ int hitcount = 0;
+
+ Iterator it = hits.iterator();
+ while ( it.hasNext() )
+ {
+ JarEntry entry = (JarEntry) it.next();
+
+ if ( entry.getName().endsWith( ".class" ) ) //$NON-NLS-1$
+ {
+ // skip this entry. as it's a class file.
+ continue;
+ }
+
+ getLogger().debug( "Version Hit: " + entry.getName() );
+ InputStream is = getJar().getEntryInputStream( entry );
+ BufferedReader br = new BufferedReader( new InputStreamReader( is ) );
+ try
+ {
+ String line = br.readLine();
+ // TODO: check for key=value pair.
+ // TODO: maybe even for groupId entries.
+
+ getLogger().debug( line );
+ if ( StringUtils.isNotEmpty( line ) )
+ {
+ textVersions.add( line );
+ }
+ hitcount++;
+ }
+ catch ( IOException e )
+ {
+ getLogger().warn( "Unable to read line from " + entry.getName(), e );
+ }
+ }
+
+ return textVersions;
+ }
+}
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/TextFileExposer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/taxon/exposers/TextFileExposer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"