You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jo...@apache.org on 2008/03/11 05:07:31 UTC
svn commit: r635796 [1/7] - in /maven/sandbox/trunk/archiva/archiva-jarinfo:
./ archiva-jarinfo-bundles/ archiva-jarinfo-cli/ archiva-jarinfo-cli/src/
archiva-jarinfo-cli/src/assembly/ archiva-jarinfo-cli/src/main/
archiva-jarinfo-cli/src/main/java/ ar...
Author: joakime
Date: Mon Mar 10 21:07:17 2008
New Revision: 635796
URL: http://svn.apache.org/viewvc?rev=635796&view=rev
Log:
Work in progress / Proof of Concept of standalone index / search / identification component for use by Archiva + Archiva RepoMan WebStart GUI + Maven Plugin + Q4E.
Added:
maven/sandbox/trunk/archiva/archiva-jarinfo/ (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-bundles/ (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/ (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/pom.xml (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/bin.xml (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundler.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerCli.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerException.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/Launcher.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/LibLocator.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactException.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactRef.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/DefaultPathParser.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/resources/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/test/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/test/java/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/test/resources/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/ (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/pom.xml (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/JarInfoException.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/Hasher.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/IdentificationWeights.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/JarAnalysis.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/JarEntryVisitor.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/AbstractJarEntryVisitor.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/BCELImportVisitor.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/EntryClassAnalyzer.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/EntryHasher.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/EntryManifest.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/EntrySizer.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/IdentificationEmbeddedMavenProperties.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/IdentificationFilename.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/analysis/visitors/IdentificationTimestamps.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/AssignedId.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/BytecodeDetails.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/ClassDetail.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/EntryDetail.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/Generator.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/IdValue.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/InspectedIds.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/JarDetails.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/io/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/io/JarDetailsReader.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/io/JarDetailsWriter.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/xml/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/xml/AbstractJarDetailsXml.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/xml/JarDetailsXmlDeserializer.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/model/xml/JarDetailsXmlSerializer.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/remote/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/remote/JarInfoRemote.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/scanner/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/utils/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/utils/EmptyUtils.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/utils/EntryDetailComparator.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/utils/Hex.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/utils/IdValueComparator.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/utils/NaturalLanguageComparator.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/maven/archiva/jarinfo/utils/Timestamp.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/archiva/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/archiva/jarinfo/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/archiva/jarinfo/analysis/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/archiva/jarinfo/analysis/idweights.properties
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/archiva/jarinfo/model/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/archiva/jarinfo/model/xml/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/archiva/jarinfo/model/xml/jarinfo-v1_0_0.xsd (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/main/resources/org/apache/maven/archiva/jarinfo/model/xml/maven-v4.0.0.xsd (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/jars/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/jars/jxr.jar (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/jars/maven-shared-jar-1.0.jar (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/jars/mystery.jar (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/org/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/org/apache/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/org/apache/maven/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/org/apache/maven/archiva/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/org/apache/maven/archiva/jarinfo/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/org/apache/maven/archiva/jarinfo/model/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/org/apache/maven/archiva/jarinfo/model/xml/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/java/org/apache/maven/archiva/jarinfo/model/xml/JarDetailsXmlSerializerTest.java (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/resources/
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/resources/dummy-test.jardetails.xml (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/resources/jxr.jar-details.xml (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/resources/maven-shared.jar-details.xml (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lib/src/test/resources/mystery.jar-details.xml (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-lucene/ (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-maven-plugin/ (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/pom.xml (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/src/
maven/sandbox/trunk/archiva/archiva-jarinfo/src/site/
maven/sandbox/trunk/archiva/archiva-jarinfo/src/site/apt/
maven/sandbox/trunk/archiva/archiva-jarinfo/src/site/apt/features.apt (with props)
maven/sandbox/trunk/archiva/archiva-jarinfo/src/site/resources/
maven/sandbox/trunk/archiva/archiva-jarinfo/src/site/xdoc/
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Mar 10 21:07:17 2008
@@ -0,0 +1,21 @@
+target
+*~
+.*.swp
+*.log
+*.patch
+*.diff
+*.ipr
+*.iws
+*.iml
+.classpath
+.project
+.settings
+.m2eclipse
+.wtpmodules
+.xdoclet
+*.ipr
+*.iws
+*.iml
+CVS
+cobertura.ser
+jcoverage.ser
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-bundles/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Mar 10 21:07:17 2008
@@ -0,0 +1,21 @@
+target
+*~
+.*.swp
+*.log
+*.patch
+*.diff
+*.ipr
+*.iws
+*.iml
+.classpath
+.project
+.settings
+.m2eclipse
+.wtpmodules
+.xdoclet
+*.ipr
+*.iws
+*.iml
+CVS
+cobertura.ser
+jcoverage.ser
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Mar 10 21:07:17 2008
@@ -0,0 +1,21 @@
+target
+*~
+.*.swp
+*.log
+*.patch
+*.diff
+*.ipr
+*.iws
+*.iml
+.classpath
+.project
+.settings
+.m2eclipse
+.wtpmodules
+.xdoclet
+*.ipr
+*.iws
+*.iml
+CVS
+cobertura.ser
+jcoverage.ser
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/pom.xml?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/pom.xml (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/pom.xml Mon Mar 10 21:07:17 2008
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <parent>
+ <artifactId>archiva-jarinfo-parent</artifactId>
+ <groupId>org.apache.maven.archiva</groupId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-jarinfo-cli</artifactId>
+ <name>Archiva Jar Info :: Cli</name>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <mainClass>org.apache.maven.archiva.jarinfo.bundler.JarInfoBundler</mainClass>
+ <addClasspath>true</addClasspath>
+ <classpathPrefix>lib</classpathPrefix>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/bin.xml</descriptor>
+ </descriptors>
+ <finalName>archiva-jarinfo-cli-${version}</finalName>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-jarinfo-lib</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>1.4.3</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/pom.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/pom.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/bin.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/bin.xml?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/bin.xml (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/bin.xml Mon Mar 10 21:07:17 2008
@@ -0,0 +1,31 @@
+<assembly>
+ <id>bin</id>
+ <formats>
+ <format>tar.bz2</format>
+ <!-- format>tar.gz</format>
+ <format>tar.bz2</format>
+ <format>zip</format -->
+ </formats>
+ <fileSets>
+ <fileSet>
+ <includes>
+ <include>README*</include>
+ <include>LICENSE*</include>
+ <include>NOTICE*</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>target</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>archiva-jarinfo-cli-*.jar</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+ <dependencySets>
+ <dependencySet>
+ <outputDirectory>lib</outputDirectory>
+ <scope>runtime</scope>
+ </dependencySet>
+ </dependencySets>
+</assembly>
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/bin.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/bin.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/assembly/bin.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,130 @@
+package org.apache.maven.archiva.common.utils;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * DateUtil - some (not-so) common date utility methods.
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DateUtil
+{
+ public static String getDuration( long duration )
+ {
+ return getDuration( new Date( 0 ), new Date( duration ) );
+ }
+
+ public static String getDuration( long ms1, long ms2 )
+ {
+ return getDuration( new Date( ms1 ), new Date( ms2 ) );
+ }
+
+ public static String getDuration( Date d1, Date d2 )
+ {
+ Calendar cal1 = new GregorianCalendar();
+ cal1.setTime( d1 );
+
+ Calendar cal2 = new GregorianCalendar();
+ cal2.setTime( d2 );
+
+ return getDuration( cal1, cal2 );
+ }
+
+ public static String getDuration( Calendar cal1, Calendar cal2 )
+ {
+ int year1 = cal1.get( Calendar.YEAR );
+ int day1 = cal1.get( Calendar.DAY_OF_YEAR );
+ int hour1 = cal1.get( Calendar.HOUR_OF_DAY );
+ int min1 = cal1.get( Calendar.MINUTE );
+ int sec1 = cal1.get( Calendar.SECOND );
+ int ms1 = cal1.get( Calendar.MILLISECOND );
+
+ int year2 = cal2.get( Calendar.YEAR );
+ int day2 = cal2.get( Calendar.DAY_OF_YEAR );
+ int hour2 = cal2.get( Calendar.HOUR_OF_DAY );
+ int min2 = cal2.get( Calendar.MINUTE );
+ int sec2 = cal2.get( Calendar.SECOND );
+ int ms2 = cal2.get( Calendar.MILLISECOND );
+
+ int leftDays = ( day1 - day2 ) + ( year1 - year2 ) * 365;
+ int leftHours = hour2 - hour1;
+ int leftMins = min2 - min1;
+ int leftSeconds = sec2 - sec1;
+ int leftMilliSeconds = ms2 - ms1;
+
+ if ( leftMilliSeconds < 0 )
+ {
+ leftMilliSeconds += 1000;
+ --leftSeconds;
+ }
+
+ if ( leftSeconds < 0 )
+ {
+ leftSeconds += 60;
+ --leftMins;
+ }
+
+ if ( leftMins < 0 )
+ {
+ leftMins += 60;
+ --leftHours;
+ }
+
+ if ( leftHours < 0 )
+ {
+ leftHours += 24;
+ --leftDays;
+ }
+
+ StringBuffer interval = new StringBuffer();
+
+ appendInterval( interval, leftDays, "Day" );
+ appendInterval( interval, leftHours, "Hour" );
+ appendInterval( interval, leftMins, "Minute" );
+ appendInterval( interval, leftSeconds, "Second" );
+ appendInterval( interval, leftMilliSeconds, "Millisecond" );
+
+ return interval.toString();
+ }
+
+ private static void appendInterval( StringBuffer interval, int count, String type )
+ {
+ if ( count > 0 )
+ {
+ if ( interval.length() > 0 )
+ {
+ interval.append( " " );
+ }
+
+ interval.append( count );
+ interval.append( " " ).append( type );
+ if ( count > 1 )
+ {
+ interval.append( "s" );
+ }
+ }
+ }
+
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/DateUtil.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,260 @@
+package org.apache.maven.archiva.common.utils;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.math.NumberUtils;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * VersionComparator - compare the parts of two version strings.
+ * <p/>
+ * Technique.
+ * <p/>
+ * * Split the version strings into parts by splitting on <code>"-._"</code> first, then breaking apart words from numbers.
+ * <p/>
+ * <code>
+ * "1.0" = "1", "0"
+ * "1.0-alpha-1" = "1", "0", "alpha", "1"
+ * "2.0-rc2" = "2", "0", "rc", "2"
+ * "1.3-m2" = "1", "3", "m", "3"
+ * </code>
+ * <p/>
+ * compare each part individually, and when they do not match, perform the following test.
+ * <p/>
+ * Numbers are calculated per normal comparison rules.
+ * Words that are part of the "special word list" will be treated as their index within that heirarchy.
+ * Words that cannot be identified as special, are treated using normal case-insensitive comparison rules.
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class VersionComparator
+ implements Comparator<String>
+{
+ private static Comparator<String> INSTANCE = new VersionComparator();
+
+ private List<String> specialWords;
+
+ public VersionComparator()
+ {
+ specialWords = new ArrayList<String>();
+
+ // ids that refer to LATEST
+ specialWords.add( "final" );
+ specialWords.add( "release" );
+ specialWords.add( "current" );
+ specialWords.add( "latest" );
+ specialWords.add( "g" );
+ specialWords.add( "gold" );
+ specialWords.add( "fcs" );
+
+ // ids that are for a release cycle.
+ specialWords.add( "a" );
+ specialWords.add( "alpha" );
+ specialWords.add( "b" );
+ specialWords.add( "beta" );
+ specialWords.add( "pre" );
+ specialWords.add( "rc" );
+ specialWords.add( "m" );
+ specialWords.add( "milestone" );
+
+ // ids that are for dev / debug cycles.
+ specialWords.add( "dev" );
+ specialWords.add( "test" );
+ specialWords.add( "debug" );
+ specialWords.add( "unofficial" );
+ specialWords.add( "nightly" );
+ specialWords.add( "incubating" );
+ specialWords.add( "incubator" );
+ specialWords.add( "snapshot" );
+ }
+
+ public static Comparator<String> getInstance()
+ {
+ return INSTANCE;
+ }
+
+ public int compare( String o1, String o2 )
+ {
+ if ( o1 == null && o2 == null )
+ {
+ return 0;
+ }
+
+ if ( o1 == null )
+ {
+ return 1;
+ }
+
+ if ( o2 == null )
+ {
+ return -1;
+ }
+
+ String[] parts1 = toParts( o1 );
+ String[] parts2 = toParts( o2 );
+
+ int diff;
+ int partLen = Math.max( parts1.length, parts2.length );
+ for ( int i = 0; i < partLen; i++ )
+ {
+ diff = comparePart( safePart( parts1, i ), safePart( parts2, i ) );
+ if ( diff != 0 )
+ {
+ return diff;
+ }
+ }
+
+ diff = parts2.length - parts1.length;
+
+ if ( diff != 0 )
+ {
+ return diff;
+ }
+
+ return o1.compareToIgnoreCase( o2 );
+ }
+
+ private String safePart( String[] parts, int idx )
+ {
+ if ( idx < parts.length )
+ {
+ return parts[idx];
+ }
+
+ return "0";
+ }
+
+ private int comparePart( String s1, String s2 )
+ {
+ boolean is1Num = NumberUtils.isNumber( s1 );
+ boolean is2Num = NumberUtils.isNumber( s2 );
+
+ // (Special Case) Test for numbers both first.
+ if ( is1Num && is2Num )
+ {
+ int i1 = NumberUtils.toInt( s1 );
+ int i2 = NumberUtils.toInt( s2 );
+
+ return i1 - i2;
+ }
+
+ // Test for text both next.
+ if ( !is1Num && !is2Num )
+ {
+ int idx1 = specialWords.indexOf( s1.toLowerCase() );
+ int idx2 = specialWords.indexOf( s2.toLowerCase() );
+
+ // Only operate perform index based operation, if both strings
+ // are found in the specialWords index.
+ if ( idx1 >= 0 && idx2 >= 0 )
+ {
+ return idx1 - idx2;
+ }
+ }
+
+ // Comparing text to num
+ if ( !is1Num && is2Num )
+ {
+ return -1;
+ }
+
+ // Comparing num to text
+ if ( is1Num && !is2Num )
+ {
+ return 1;
+ }
+
+ // Return comparison of strings themselves.
+ return s1.compareToIgnoreCase( s2 );
+ }
+
+ public static String[] toParts( String version )
+ {
+ if ( StringUtils.isBlank( version ) )
+ {
+ return ArrayUtils.EMPTY_STRING_ARRAY;
+ }
+
+ int modeOther = 0;
+ int modeDigit = 1;
+ int modeText = 2;
+
+ List<String> parts = new ArrayList<String>();
+ int len = version.length();
+ int i = 0;
+ int start = 0;
+ int mode = modeOther;
+
+ while ( i < len )
+ {
+ char c = version.charAt( i );
+
+ if ( Character.isDigit( c ) )
+ {
+ if ( mode != modeDigit )
+ {
+ if ( mode != modeOther )
+ {
+ parts.add( version.substring( start, i ) );
+ }
+ mode = modeDigit;
+ start = i;
+ }
+ }
+ else if ( Character.isLetter( c ) )
+ {
+ if ( mode != modeText )
+ {
+ if ( mode != modeOther )
+ {
+ parts.add( version.substring( start, i ) );
+ }
+ mode = modeText;
+ start = i;
+ }
+ }
+ else
+ {
+ // Other.
+ if ( mode != modeOther )
+ {
+ parts.add( version.substring( start, i ) );
+ mode = modeOther;
+ }
+ }
+
+ i++;
+ }
+
+ // Add remainder
+ if ( mode != modeOther )
+ {
+ parts.add( version.substring( start, i ) );
+ }
+
+ return parts.toArray( new String[parts.size()] );
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionComparator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,206 @@
+package org.apache.maven.archiva.common.utils;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.lang.StringUtils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Version utility methods.
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class VersionUtil
+{
+ /**
+ * These are the version patterns found in the filenames of the various artifact's versions IDs.
+ * These patterns are all tackling lowercase version IDs.
+ */
+ private static final String versionPatterns[] = new String[] {
+ "([0-9][_.0-9a-z]*)",
+ "(snapshot)",
+ "(g?[_.0-9ab]*(pre|rc|g|m)[_.0-9]*)",
+ "(dev[_.0-9]*)",
+ "(alpha[_.0-9]*)",
+ "(beta[_.0-9]*)",
+ "(rc[_.0-9]*)",
+ "(test[_.0-9]*)",
+ "(debug[_.0-9]*)",
+ "(unofficial[_.0-9]*)",
+ "(current)",
+ "(latest)",
+ "(fcs)",
+ "(release[_.0-9]*)",
+ "(nightly)",
+ "(final)",
+ "(incubating)",
+ "(incubator)",
+ "([ab][_.0-9]+)" };
+
+ private static final String VersionMegaPattern = StringUtils.join( versionPatterns, '|' );
+
+ public static final String SNAPSHOT = "SNAPSHOT";
+
+ public static final Pattern UNIQUE_SNAPSHOT_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}\\.[0-9]{6})-([0-9]+)$" );
+
+ public static final Pattern TIMESTAMP_PATTERN = Pattern.compile( "^([0-9]{8})\\.([0-9]{6})$" );
+
+ public static final Pattern GENERIC_SNAPSHOT_PATTERN = Pattern.compile( "^(.*)-" + SNAPSHOT );
+
+ /**
+ * <p>
+ * Tests if the unknown string contains elements that identify it as a version string (or not).
+ * </p>
+ *
+ * <p>
+ * The algorithm tests each part of the string that is delimited by a '-' (dash) character.
+ * If 75% or more of the sections are identified as 'version' strings, the result is
+ * determined to be of a high probability to be version identifier string.
+ * </p>
+ *
+ * @param unknown the unknown string to test.
+ * @return true if the unknown string is likely a version string.
+ */
+ public static boolean isVersion( String unknown )
+ {
+ String versionParts[] = StringUtils.split( unknown, '-' );
+
+ Pattern pat = Pattern.compile( VersionMegaPattern, Pattern.CASE_INSENSITIVE );
+ Matcher mat;
+
+ int countValidParts = 0;
+
+ for ( int i = 0; i < versionParts.length; i++ )
+ {
+ String part = versionParts[i];
+ mat = pat.matcher( part );
+
+ if ( mat.matches() )
+ {
+ countValidParts++;
+ }
+ }
+
+ /* Calculate version probability as true if 3/4's of the input string has pieces of
+ * of known version identifier strings.
+ */
+ int threshold = (int) Math.floor( Math.max( (double) 1.0, (double) ( versionParts.length * 0.75 ) ) );
+
+ return ( countValidParts >= threshold );
+ }
+
+ /**
+ * <p>
+ * Tests if the identifier is a known simple version keyword.
+ * </p>
+ *
+ * <p>
+ * This method is different from {@link #isVersion(String)} in that it tests the whole input string in
+ * one go as a simple identifier. (eg "alpha", "1.0", "beta", "debug", "latest", "rc#", etc...)
+ * </p>
+ *
+ * @param identifier the identifier to test.
+ * @return true if the unknown string is likely a version string.
+ */
+ public static boolean isSimpleVersionKeyword( String identifier )
+ {
+ Pattern pat = Pattern.compile( VersionMegaPattern, Pattern.CASE_INSENSITIVE );
+ Matcher mat = pat.matcher( identifier );
+
+ return mat.matches();
+ }
+
+ public static boolean isSnapshot( String version )
+ {
+ Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( version );
+ if ( m.matches() )
+ {
+ return true;
+ }
+ else
+ {
+ return version.endsWith( SNAPSHOT );
+ }
+ }
+
+ public static String getBaseVersion( String version )
+ {
+ Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( version );
+ if ( m.matches() )
+ {
+ return m.group( 1 ) + "-" + SNAPSHOT;
+ }
+ else
+ {
+ return version;
+ }
+ }
+
+ /**
+ * <p>
+ * Get the release version of the snapshot version.
+ * </p>
+ *
+ * <p>
+ * If snapshot version is 1.0-SNAPSHOT, then release version would be 1.0
+ * And if snapshot version is 1.0-20070113.163208-1.jar, then release version would still be 1.0
+ * </p>
+ *
+ * @param snapshotVersion
+ * @return
+ */
+ public static String getReleaseVersion( String snapshotVersion )
+ {
+ Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( snapshotVersion );
+
+ if( isGenericSnapshot( snapshotVersion ) )
+ {
+ m = GENERIC_SNAPSHOT_PATTERN.matcher( snapshotVersion );
+ }
+
+ if ( m.matches() )
+ {
+ return m.group( 1 );
+ }
+ else
+ {
+ return snapshotVersion;
+ }
+ }
+
+ public static boolean isUniqueSnapshot( String version )
+ {
+ Matcher m = UNIQUE_SNAPSHOT_PATTERN.matcher( version );
+ if( m.matches() )
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public static boolean isGenericSnapshot( String version )
+ {
+ return version.endsWith( SNAPSHOT );
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundler.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundler.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundler.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundler.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,263 @@
+package org.apache.maven.archiva.jarinfo.bundler;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import org.apache.commons.io.DirectoryWalker;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.filefilter.IOFileFilter;
+import org.apache.maven.archiva.common.utils.DateUtil;
+import org.apache.maven.archiva.jarinfo.JarInfoException;
+import org.apache.maven.archiva.jarinfo.analysis.JarAnalysis;
+import org.apache.maven.archiva.jarinfo.model.JarDetails;
+import org.apache.maven.archiva.jarinfo.model.io.JarDetailsWriter;
+import org.apache.maven.archiva.repository.content.ArtifactException;
+import org.apache.maven.archiva.repository.content.ArtifactRef;
+import org.apache.maven.archiva.repository.content.DefaultPathParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Jar Info Bundler.
+ *
+ * Scan a repository root, creating a JarInfo bundle for the most recent
+ * timestamp'd jarinfo file.
+ */
+public class JarInfoBundler
+ extends DirectoryWalker
+{
+ private static final Logger LOG = LoggerFactory.getLogger( JarInfoBundler.class );
+
+ private File repoDir;
+
+ private String repoUrl;
+
+ private String repoId;
+
+ private File outputDir;
+
+ private File bundleJar;
+
+ private JarOutputStream jarOut;
+
+ private String timestamp;
+
+ private JarAnalysis jarAnalysis;
+
+ private long startTime;
+
+ private int analysisCount;
+
+ public JarInfoBundler()
+ {
+ super();
+ }
+
+ public JarInfoBundler( FileFilter filter, int depthLimit )
+ {
+ super( filter, depthLimit );
+ }
+
+ public JarInfoBundler( IOFileFilter directoryFilter, IOFileFilter fileFilter, int depthLimit )
+ {
+ super( directoryFilter, fileFilter, depthLimit );
+ }
+
+ public File getRepoDir()
+ {
+ return repoDir;
+ }
+
+ public void setRepoDir( File repoDir )
+ {
+ this.repoDir = repoDir;
+ }
+
+ public String getRepoUrl()
+ {
+ return repoUrl;
+ }
+
+ public void setRepoUrl( String repoUrl )
+ {
+ this.repoUrl = repoUrl;
+ }
+
+ public String getRepoId()
+ {
+ return repoId;
+ }
+
+ public void setRepoId( String repoId )
+ {
+ this.repoId = repoId;
+ }
+
+ public File getOutputDir()
+ {
+ return outputDir;
+ }
+
+ public void setOutputDir( File outputDir )
+ {
+ this.outputDir = outputDir;
+ }
+
+ public String getTimestamp()
+ {
+ return timestamp;
+ }
+
+ public void setTimestamp( String timestamp )
+ {
+ this.timestamp = timestamp;
+ }
+
+ public void begin()
+ throws JarInfoBundlerException, IOException
+ {
+ if ( !outputDir.exists() )
+ {
+ outputDir.mkdirs();
+ }
+ bundleJar = new File( outputDir, "jarinfo-bundle.jar" );
+ jarOut = new JarOutputStream( new FileOutputStream( bundleJar ) );
+
+ boolean performInspection = false;
+ jarAnalysis = new JarAnalysis( performInspection );
+ jarAnalysis.addDefaultVisitors();
+
+ walk( this.repoDir, Collections.emptyList() );
+
+ // TODO: Gather Statistics.
+ }
+
+ @Override
+ protected void handleStart( File startDirectory, Collection results )
+ throws IOException
+ {
+ LOG.info( "Starting Directory Walking for " + startDirectory.getAbsolutePath() );
+ startTime = System.currentTimeMillis();
+ analysisCount = 0;
+ }
+
+ @Override
+ protected void handleEnd( Collection results )
+ throws IOException
+ {
+ long endTime = System.currentTimeMillis();
+ LOG.info( "Reached end of Directory Walk: Analyzed " + analysisCount + " jars in "
+ + DateUtil.getDuration( startTime, endTime ) );
+
+ IOUtils.closeQuietly( jarOut );
+ }
+
+ @Override
+ protected void handleCancelled( File startDirectory, Collection results, CancelException cancel )
+ throws IOException
+ {
+ LOG.info( "Walk Cancelled: " + cancel.getMessage() );
+ IOUtils.closeQuietly( jarOut );
+ }
+
+ @Override
+ protected void handleFile( File file, int depth, Collection results )
+ throws IOException
+ {
+ LOG.info( "Handle File " + file.getAbsolutePath() + ", depth:" + depth );
+
+ try
+ {
+ ArtifactRef ref = toArtifactRef( file );
+ LOG.info( "Artifact: " + ref );
+ File outputFile = new File( file.getAbsolutePath() + "info" );
+
+ if ( !needsUpdating( outputFile ) )
+ {
+ LOG.info( "Skipping (up-to-date): " + outputFile.getName() );
+ return;
+ }
+
+ analysisCount++;
+
+ long start = System.nanoTime();
+ LOG.info( "Analyzing: " + file.getName() + " ... " );
+ JarDetails details = jarAnalysis.analyze( file );
+ if ( !details.getAssignedId().valid() )
+ {
+ // Inspected Ids have no value now.
+ details.getInspectedIds().clearAll();
+ // Set Assigned Ids.
+ details.getAssignedId().setGroupId( ref.getGroupId() );
+ details.getAssignedId().setArtifactId( ref.getArtifactId() );
+ details.getAssignedId().setVersion( ref.getVersion() );
+ }
+ long mid = System.nanoTime();
+ double seconds = ( ( (double) ( mid - start ) / 100000 ) / 1000 );
+ LOG.info( "Scan of " + file.getName() + " completed in " + seconds + " second(s)" );
+
+ ( new JarDetailsWriter() ).write( details, outputFile );
+ addToBundle( outputFile );
+ }
+ catch ( ArtifactException e )
+ {
+ LOG.warn( "Invalid Artifact [" + file.getAbsolutePath() + "]: " + e.getMessage() );
+ }
+ catch ( IOException e )
+ {
+ LOG.warn( "Unable to analyze jar file [" + file.getAbsolutePath() + "]: " + e.getMessage(), e );
+ }
+ catch ( JarInfoException e )
+ {
+ LOG.warn( "Unable to write jarinfo for file [" + file.getAbsolutePath() + "]: " + e.getMessage(), e );
+ }
+ }
+
+ private void addToBundle( File file )
+ throws IOException
+ {
+ FileInputStream stream = null;
+ try
+ {
+ jarOut.putNextEntry( new JarEntry( pathRelativeToRoot( file ) ) );
+ stream = new FileInputStream( file );
+ IOUtils.copy( stream, jarOut );
+ }
+ finally
+ {
+ jarOut.closeEntry();
+ IOUtils.closeQuietly( stream );
+ }
+ }
+
+ private String pathRelativeToRoot( File file )
+ {
+ String path = file.getAbsolutePath();
+ String root = repoDir.getAbsolutePath();
+
+ if ( path.startsWith( root ) )
+ {
+ path = path.substring( root.length() );
+ }
+
+ return path;
+ }
+
+ private ArtifactRef toArtifactRef( File file )
+ throws ArtifactException
+ {
+ return DefaultPathParser.toArtifactRef( pathRelativeToRoot( file ) );
+ }
+
+ private boolean needsUpdating( File outputFile )
+ {
+ return true;
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundler.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerCli.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerCli.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerCli.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerCli.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,142 @@
+package org.apache.maven.archiva.jarinfo.bundler;
+
+import java.io.File;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.GnuParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.MissingOptionException;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.io.filefilter.FileFilterUtils;
+import org.apache.commons.io.filefilter.HiddenFileFilter;
+import org.apache.commons.io.filefilter.IOFileFilter;
+import org.apache.commons.io.filefilter.NameFileFilter;
+import org.apache.commons.io.filefilter.SuffixFileFilter;
+
+/**
+ * JarInfoBundler command line client.
+ */
+public class JarInfoBundlerCli
+{
+ private static final String OPT_JARINFO_OUTPUT_DIR = "o";
+
+ private static final String OPT_REPO_DIR = "d";
+
+ private static final String OPT_REPO_URL = "u";
+
+ private static final String OPT_REPO_ID = "i";
+
+ private static final String OPT_TIMESTAMP = "t";
+
+ public static void main( String args[] )
+ {
+ ( new JarInfoBundlerCli() ).execute( args );
+ }
+
+ private Options options;
+
+ private Options getOptions()
+ {
+ if ( options != null )
+ {
+ return options;
+ }
+
+ Option outputDir = new Option( OPT_JARINFO_OUTPUT_DIR, "outputDir", true, "Jarinfo Output Directory." );
+ outputDir.setArgName( "dir" );
+ outputDir.setRequired( true );
+
+ Option repoDir = new Option( OPT_REPO_DIR, "repoDir", true, "Repository Root Directory." );
+ repoDir.setArgName( "dir" );
+ repoDir.setRequired( true );
+
+ Option repoUrl = new Option( OPT_REPO_URL, "repoUrl", true, "URL to Repository." );
+ repoUrl.setArgName( "url" );
+ repoUrl.setRequired( true );
+
+ Option repoId = new Option( OPT_REPO_ID, "repoId", true, "ID to Repository." );
+ repoId.setArgName( "id" );
+ repoId.setRequired( true );
+
+ Option timestamp = new Option( OPT_TIMESTAMP, "timestamp", true,
+ "Timestamp for repo-${id}-jarinfo-${timestamp}.jar files." );
+ timestamp.setArgName( "timestamp" );
+ timestamp.setRequired( false );
+
+ options = new Options();
+ options.addOption( outputDir );
+ options.addOption( repoId );
+ options.addOption( repoUrl );
+ options.addOption( repoDir );
+ options.addOption( timestamp );
+
+ return options;
+ }
+
+ private void showHelp( Options options )
+ {
+ HelpFormatter help = new HelpFormatter();
+ help.printHelp( "JarInfoBundler [options] -o <dir> -i <id> -u <url> -d <dir>", options );
+ }
+
+ private void execute( String[] args )
+ {
+ CommandLineParser parser = new GnuParser();
+ try
+ {
+ CommandLine cmdline = parser.parse( getOptions(), args );
+
+ /* Ignore Hidden Directories */
+ IOFileFilter ignoreHiddenFilter = FileFilterUtils.andFileFilter( FileFilterUtils.directoryFileFilter(),
+ HiddenFileFilter.VISIBLE );
+
+ /* Ignore SCM dirs */
+ IOFileFilter ignoreSCM = FileFilterUtils.notFileFilter( new NameFileFilter( new String[] {
+ ".svn",
+ "CVS",
+ "SCCS",
+ ".arch-ids",
+ ".bzr" } ) );
+
+ IOFileFilter directoryFilter = FileFilterUtils.andFileFilter( ignoreHiddenFilter, ignoreSCM );
+
+ /* Only interested in files ending in JAR */
+ IOFileFilter jarFilter = FileFilterUtils.suffixFileFilter( ".jar" );
+ IOFileFilter notJavadocOrSourceFilter = FileFilterUtils.notFileFilter( new SuffixFileFilter( new String[] {
+ "-sources.jar",
+ "-javadoc.jar" } ) );
+ IOFileFilter jarBinaryFilter = FileFilterUtils.andFileFilter( jarFilter, notJavadocOrSourceFilter );
+
+ JarInfoBundler bundler = new JarInfoBundler( directoryFilter, jarBinaryFilter, -1 );
+
+ // TODO: log output dir?
+ bundler.setOutputDir( new File( cmdline.getOptionValue( OPT_JARINFO_OUTPUT_DIR ) ) );
+ bundler.setRepoDir( new File( cmdline.getOptionValue( OPT_REPO_DIR ) ) );
+ bundler.setRepoId( cmdline.getOptionValue( OPT_REPO_ID ) );
+ bundler.setRepoUrl( cmdline.getOptionValue( OPT_REPO_URL ) );
+ if ( cmdline.hasOption( OPT_TIMESTAMP ) )
+ {
+ bundler.setTimestamp( cmdline.getOptionValue( OPT_TIMESTAMP ) );
+ }
+
+ bundler.begin();
+ }
+ catch ( MissingOptionException e )
+ {
+ System.err.println( "ERROR: " + e.getMessage() );
+ showHelp( options );
+ }
+ catch ( ParseException e )
+ {
+ showHelp( options );
+ e.printStackTrace( System.err );
+ }
+ catch ( Throwable t )
+ {
+ t.printStackTrace( System.err );
+ }
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerCli.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerCli.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerException.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerException.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerException.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,16 @@
+package org.apache.maven.archiva.jarinfo.bundler;
+
+public class JarInfoBundlerException
+ extends Exception
+{
+
+ public JarInfoBundlerException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public JarInfoBundlerException( String message )
+ {
+ super( message );
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/bundler/JarInfoBundlerException.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/Launcher.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/Launcher.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/Launcher.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/Launcher.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,143 @@
+package org.apache.maven.archiva.jarinfo.scanner;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Launcher
+{
+ private boolean debug;
+
+ private String mainClassName;
+
+ /**
+ * Main Launcher.
+ */
+ public Launcher( String mainClass )
+ {
+ super();
+ this.debug = false;
+ this.mainClassName = mainClass;
+ }
+
+ /**
+ * Launcher the code and start mergere-discovery.
+ *
+ * @param args the command line arguments.
+ */
+ public void bootstrap( String[] args )
+ {
+ List<String> argList = new ArrayList<String>();
+ List<String> libList = new ArrayList<String>();
+
+ /* Add args to argList */
+ try
+ {
+ for ( int i = 0; i < args.length; i++ )
+ {
+ if ( "--lib-debug".equals( args[i] ) )
+ {
+ this.debug = true;
+ LibLocator.debug = true;
+ }
+ else if ( "--lib".equals( args[i] ) )
+ {
+ i++;
+ libList.add( args[i] );
+ }
+ else
+ {
+ argList.add( args[i] );
+ }
+ }
+ }
+ catch ( ArrayIndexOutOfBoundsException e )
+ {
+ System.err.println( "Unable to load lib." );
+ System.exit( 2 );
+ }
+
+ /* Create locator */
+ LibLocator locator = new LibLocator();
+
+ /* Add command line libs */
+ for ( String lib : libList )
+ {
+ locator.addLib( lib );
+ }
+
+ /* Load class */
+ try
+ {
+ URLClassLoader loader = new URLClassLoader( locator.getUrls() );
+ Thread.currentThread().setContextClassLoader( loader );
+
+ debug( "Attempting to load " + this.mainClassName );
+ Class<?> mainClass = loader.loadClass( this.mainClassName );
+
+ debug( "Attempting to create a new instance of " + mainClass );
+ Object objmain = mainClass.newInstance();
+
+ debug( "Attempting to find main method of " + mainClass );
+ Class<?> argClass = Array.newInstance( String.class, 0 ).getClass();
+ Method mainMethod = mainClass.getMethod( "main", new Class[] { argClass } );
+
+ debug( "Attempting to execute main method of " + mainClass );
+ String arguments[] = argList.toArray( new String[0] );
+ mainMethod.invoke( objmain, new Object[] { arguments } );
+
+ }
+ catch ( ClassNotFoundException e )
+ {
+ error( "failed to load " + mainClassName + ".", e );
+ }
+ catch ( InstantiationException e )
+ {
+ error( "failed to instantiate " + mainClassName + ".", e );
+ }
+ catch ( IllegalAccessException e )
+ {
+ error( "failed to access " + mainClassName + ".", e );
+ }
+ catch ( SecurityException e )
+ {
+ error( "denied access to load " + mainClassName + ".", e );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ error( "passed invalid arguments to " + mainClassName + "#main(String[]).", e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ error( "unable find method " + mainClassName + "#main(String[]).", e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ if ( e.getCause() == null )
+ {
+ error( "unable execute " + mainClassName + "#main(String[]).", e );
+ }
+ else
+ {
+ error( "Unable to run app.", e.getCause() );
+ }
+ }
+ }
+
+ private void error( String msg, Throwable toss )
+ {
+ System.err.println( "[ERROR] " + Launcher.class.getName() + "\n[ERROR] " + msg );
+ toss.printStackTrace( System.err );
+ }
+
+ private void debug( String msg )
+ {
+ if ( debug )
+ {
+ System.out.println( "[DEBUG] " + msg );
+ }
+ }
+}
\ No newline at end of file
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/Launcher.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/Launcher.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/LibLocator.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/LibLocator.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/LibLocator.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/LibLocator.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,337 @@
+package org.apache.maven.archiva.jarinfo.scanner;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import java.util.ArrayList;
+import java.util.List;
+
+public class LibLocator
+{
+ private static final String APP_HOME_PROPERTY = "app.home";
+
+ /** Debug Flag. */
+ public static boolean debug = false;
+
+ private List<URL> classpathUrls;
+
+ private File appHomeDir;
+
+ /**
+ * Create <code>LibLocator</code>
+ */
+ public LibLocator()
+ {
+ this.classpathUrls = new ArrayList<URL>();
+ initAppHome();
+ addLib( "lib" ); // default lib entry.
+ }
+
+ /**
+ * Constructs a file path from a <code>file:</code> URI.
+ *
+ * <p>Will be an absolute path if the given URI is absolute.</p>
+ *
+ * <p>Swallows '%' that are not followed by two characters,
+ * doesn't deal with non-ASCII characters.</p>
+ *
+ * @param uri the URI designating a file in the local filesystem.
+ * @return the local file system path for the file.
+ * @since Ant 1.6
+ */
+ public String fromURI( String uri )
+ {
+ URL url = null;
+ try
+ {
+ url = new URL( uri );
+ }
+ catch ( MalformedURLException ignore )
+ {
+ /* ignore */
+ }
+ if ( url == null || !( "file".equals( url.getProtocol() ) ) )
+ {
+ throw new IllegalArgumentException( "Can only handle valid file: URIs" );
+ }
+ StringBuffer buf = new StringBuffer( url.getHost() );
+ if ( buf.length() > 0 )
+ {
+ buf.insert( 0, File.separatorChar ).insert( 0, File.separatorChar );
+ }
+
+ String file = url.getFile();
+ int queryPos = file.indexOf( '?' );
+ buf.append( ( queryPos < 0 ) ? file : file.substring( 0, queryPos ) );
+
+ String tmpUri = buf.toString().replace( '/', File.separatorChar );
+
+ if ( File.pathSeparatorChar == ';' && uri.startsWith( "\\" ) && uri.length() > 2
+ && Character.isLetter( uri.charAt( 1 ) ) && uri.lastIndexOf( ':' ) > -1 )
+ {
+ tmpUri = uri.substring( 1 );
+ }
+
+ String path = decodeUri( tmpUri );
+ return path;
+ }
+
+ /**
+ * Decodes an Uri with % characters.
+ * @param uri String with the uri possibly containing % characters.
+ * @return The decoded Uri
+ */
+ private String decodeUri( String uri )
+ {
+ if ( uri.indexOf( '%' ) == -1 )
+ {
+ return uri;
+ }
+ StringBuffer sb = new StringBuffer();
+ CharacterIterator iter = new StringCharacterIterator( uri );
+ for ( char c = iter.first(); c != CharacterIterator.DONE; c = iter.next() )
+ {
+ if ( c == '%' )
+ {
+ char c1 = iter.next();
+ if ( c1 != CharacterIterator.DONE )
+ {
+ int i1 = Character.digit( c1, 16 );
+ char c2 = iter.next();
+ if ( c2 != CharacterIterator.DONE )
+ {
+ int i2 = Character.digit( c2, 16 );
+ sb.append( (char) ( ( i1 << 4 ) + i2 ) );
+ }
+ }
+ }
+ else
+ {
+ sb.append( c );
+ }
+ }
+ String path = sb.toString();
+ return path;
+ }
+
+ /**
+ * Get the URLs being tracked.
+ *
+ * @return the URL array.
+ */
+ public URL[] getUrls()
+ {
+ // now update the class.path property
+ StringBuffer baseClassPath = new StringBuffer( System.getProperty( "java.class.path" ) );
+ if ( baseClassPath.charAt( baseClassPath.length() - 1 ) == File.pathSeparatorChar )
+ {
+ baseClassPath.setLength( baseClassPath.length() - 1 );
+ }
+
+ URL[] jars = this.classpathUrls.toArray( new URL[0] );
+
+ for ( int i = 0; i < jars.length; ++i )
+ {
+ baseClassPath.append( File.pathSeparatorChar );
+ baseClassPath.append( fromURI( jars[i].toString() ) );
+ }
+
+ System.setProperty( "java.class.path", baseClassPath.toString() );
+
+ return jars;
+ }
+
+ /**
+ * Initialize the app.home system property.
+ */
+ private void initAppHome()
+ {
+ /* Try System Property */
+ String sysPropHome = System.getProperty( APP_HOME_PROPERTY );
+ if ( ( sysPropHome != null ) && ( sysPropHome.trim().length() > 0 ) )
+ {
+ debug( "Found System Property." );
+ this.appHomeDir = new File( sysPropHome.trim() );
+ return;
+ }
+
+ /* Attempt to figgure out the classpath entry that this object was loaded from. */
+ String selfclass = "/" + this.getClass().getName();
+ selfclass = selfclass.replace( '.', '/' ) + ".class";
+ URL classURL = this.getClass().getResource( selfclass );
+ if ( classURL != null )
+ {
+ debug( "Found Class URL: " + classURL.toExternalForm() );
+ String protocol = classURL.getProtocol();
+
+ if ( "jar".equals( protocol ) )
+ {
+ debug( "Found in jar source: " + classURL.toExternalForm() );
+ String rawurl = classURL.toExternalForm();
+ if ( !rawurl.startsWith( "jar:file:/" ) )
+ {
+ throw new IllegalStateException( "Unknown jar file syntax: " + rawurl );
+ }
+
+ rawurl = rawurl.substring( "jar:file:".length() );
+ while ( rawurl.startsWith( "//" ) )
+ {
+ rawurl = rawurl.substring( 1 );
+ }
+
+ int idx = rawurl.indexOf( ".jar!/" );
+ if ( idx > 0 )
+ {
+ rawurl = rawurl.substring( 0, idx );
+ debug( "Raw url stripped of class: " + rawurl );
+ }
+
+ idx = rawurl.lastIndexOf( "/", idx );
+ if ( idx > 0 )
+ {
+ rawurl = rawurl.substring( 0, idx );
+ debug( "Raw url path stripped: " + rawurl );
+ }
+
+ debug( "Found in a jar file: " + rawurl );
+ this.appHomeDir = new File( rawurl );
+ }
+ else if ( "file".equals( protocol ) )
+ {
+ debug( "Found as file source: " + classURL.toExternalForm() );
+ String rawurl = classURL.toExternalForm().substring( 6 );
+ debug( "rawurl: " + rawurl );
+ debug( "Found in a classpath directory." );
+ this.appHomeDir = new File( rawurl.substring( 0, rawurl.length() - selfclass.length() ) );
+ }
+ else
+ {
+ throw new IllegalStateException( "Only jar and file sources ares supported by Launcher: "
+ + classURL.toExternalForm() );
+ }
+ }
+
+ if ( this.appHomeDir == null )
+ {
+ throw new IllegalStateException( "Unable to find app classes." );
+ }
+
+ System.setProperty( APP_HOME_PROPERTY, this.appHomeDir.getAbsolutePath() );
+ }
+
+ /**
+ * Add a file to the underlying classpath urls.
+ *
+ * @param file the file to add.
+ */
+ public void addFile( File file )
+ {
+ debug( ".addFile(" + file.getAbsolutePath() + ")" );
+ try
+ {
+ addURL( file.toURL() );
+ }
+ catch ( MalformedURLException e )
+ {
+ System.err.println( "Unable to add URL to classloader for file " + file.getAbsolutePath() );
+ }
+ }
+
+ /**
+ * Add a lib directory.
+ *
+ * @param lib the lib directory.
+ */
+ public void addLib( String lib )
+ {
+ debug( ".addLib((String)" + lib + ")" );
+ File libFile = new File( lib );
+ if ( libFile.isAbsolute() )
+ {
+ addLib( libFile );
+ }
+ else
+ {
+ addLib( new File( this.appHomeDir, lib ) );
+ }
+ }
+
+ /**
+ * Add all of the jar files in a lib.
+ *
+ * @param lib the lib to add.
+ */
+ public void addLib( File lib )
+ {
+ debug( ".addLib((File)" + lib.getAbsolutePath() + ")" );
+ if ( lib.isFile() )
+ {
+ addFile( lib );
+ }
+ else
+ {
+ addFiles( lib );
+ }
+ }
+
+ /**
+ * Add a URL to the list tracked by the ClassLoader.
+ *
+ * @param url the url to add.
+ */
+ public void addURL( URL url )
+ {
+ if ( !this.classpathUrls.contains( url ) )
+ {
+ // Add to parent URL Set if not added.
+ debug( "Added URL: " + url.toExternalForm() );
+ this.classpathUrls.add( url );
+ }
+ }
+
+ private void debug( String msg )
+ {
+ if ( debug )
+ {
+ System.out.println( "[DEBUG|LibLocator] " + msg );
+ }
+ }
+
+ private void addFiles( File dir )
+ {
+ File files[] = dir.listFiles();
+
+ if ( files == null )
+ {
+ debug( "No files in " + dir.getAbsolutePath() );
+ return;
+ }
+
+ for ( int i = 0; i < files.length; i++ )
+ {
+ if ( files[i].getName().startsWith( "." ) || files[i].isHidden() )
+ {
+ continue; // skip hidden files/dirs
+ }
+
+ if ( files[i].isDirectory() )
+ {
+ addFiles( files[i] ); // dive into dir.
+ }
+ else
+ {
+ int idx = files[i].getName().lastIndexOf( "." );
+ if ( idx > 0 )
+ {
+ String ext = files[i].getName().substring( idx );
+ if ( ".jar".equalsIgnoreCase( ext ) )
+ {
+ addFile( files[i] );
+ }
+ }
+ }
+ }
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/LibLocator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/jarinfo/scanner/LibLocator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactException.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactException.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactException.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,13 @@
+package org.apache.maven.archiva.repository.content;
+
+import java.io.IOException;
+
+public class ArtifactException extends IOException {
+ public ArtifactException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ArtifactException(String message) {
+ super(message);
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactException.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,129 @@
+package org.apache.maven.archiva.repository.content;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.lang.StringUtils;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * ArtifactExtensionMapping
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ArtifactExtensionMapping
+{
+ public static final String MAVEN_ARCHETYPE = "maven-archetype";
+
+ public static final String MAVEN_PLUGIN = "maven-plugin";
+
+ private static final Map<String, String> typeToExtensionMap;
+
+ private static final Pattern mavenPluginPattern = Pattern.compile( "^(maven-.*-plugin)|(.*-maven-plugin)$" );
+
+ static
+ {
+ typeToExtensionMap = new HashMap<String, String>();
+ typeToExtensionMap.put( "ejb-client", "jar" );
+ typeToExtensionMap.put( "ejb", "jar" );
+ typeToExtensionMap.put( "distribution-tgz", "tar.gz" );
+ typeToExtensionMap.put( "distribution-zip", "zip" );
+ typeToExtensionMap.put( "java-source", "jar" );
+ typeToExtensionMap.put( "javadoc.jar", "jar" );
+ typeToExtensionMap.put( "javadoc", "jar" );
+ typeToExtensionMap.put( "aspect", "jar" );
+ typeToExtensionMap.put( "uberjar", "jar" );
+ typeToExtensionMap.put( MAVEN_PLUGIN, "jar" );
+ typeToExtensionMap.put( MAVEN_ARCHETYPE, "jar" );
+ }
+
+ public static String getExtension( String type )
+ {
+ // Try specialized types first.
+ if ( typeToExtensionMap.containsKey( type ) )
+ {
+ return (String) typeToExtensionMap.get( type );
+ }
+
+ // Return type
+ return type.replace( '-', '.' );
+ }
+
+ public static String guessTypeFromFilename( File file )
+ {
+ return guessTypeFromFilename( file.getName() );
+ }
+
+ public static String guessTypeFromFilename( String filename )
+ {
+ if ( StringUtils.isBlank( filename ) )
+ {
+ return null;
+ }
+
+ String normalizedName = filename.toLowerCase().trim();
+ int idx = normalizedName.lastIndexOf( '.' );
+
+ if ( idx == ( -1 ) )
+ {
+ return null;
+ }
+
+ if ( normalizedName.endsWith( ".tar.gz" ) )
+ {
+ return "distribution-tgz";
+ }
+ if ( normalizedName.endsWith( ".tar.bz2" ) )
+ {
+ return "distribution-bzip";
+ }
+ else if ( normalizedName.endsWith( ".zip" ) )
+ {
+ return "distribution-zip";
+ }
+ else if ( normalizedName.endsWith( "-sources.jar" ) )
+ {
+ return "java-source";
+ }
+ else if ( normalizedName.endsWith( "-javadoc.jar" ) )
+ {
+ return "javadoc";
+ }
+ else
+ {
+ return normalizedName.substring( idx + 1 );
+ }
+ }
+
+ /**
+ * Determine if a given artifact Id conforms to the naming scheme for a maven plugin.
+ *
+ * @param artifactId the artifactId to test.
+ * @return true if this artifactId conforms to the naming scheme for a maven plugin.
+ */
+ public static boolean isMavenPlugin( String artifactId )
+ {
+ return mavenPluginPattern.matcher( artifactId ).matches();
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactRef.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactRef.java?rev=635796&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactRef.java (added)
+++ maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactRef.java Mon Mar 10 21:07:17 2008
@@ -0,0 +1,78 @@
+package org.apache.maven.archiva.repository.content;
+
+import org.apache.commons.lang.StringUtils;
+
+public class ArtifactRef
+{
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ private String classifier;
+
+ private String type;
+
+ public String toString()
+ {
+ StringBuilder buf = new StringBuilder();
+ buf.append( StringUtils.defaultString( groupId ) ).append( ':' );
+ buf.append( StringUtils.defaultString( artifactId ) ).append( ':' );
+ buf.append( StringUtils.defaultString( version ) ).append( ':' );
+ buf.append( StringUtils.defaultString( classifier ) ).append( ':' );
+ buf.append( StringUtils.defaultString( type ) );
+
+ return buf.toString();
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public String getClassifier()
+ {
+ return classifier;
+ }
+
+ public void setClassifier( String classifier )
+ {
+ this.classifier = classifier;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public void setType( String type )
+ {
+ this.type = type;
+ }
+}
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactRef.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/archiva/archiva-jarinfo/archiva-jarinfo-cli/src/main/java/org/apache/maven/archiva/repository/content/ArtifactRef.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"