You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/08/23 03:07:50 UTC
svn commit: r688235 - in /maven/sandbox/trunk/mercury: mercury-it/
mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/
mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/
mercury...
Author: ogusakov
Date: Fri Aug 22 18:07:49 2008
New Revision: 688235
URL: http://svn.apache.org/viewvc?rev=688235&view=rev
Log:
joint local/remote tests for repository reader and writer in it project, metadata is now fully included into signature generation. Added standalone utility for signing file hierarchies
Added:
maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtilException.java
maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties
maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java
Removed:
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java
Modified:
maven/sandbox/trunk/mercury/mercury-it/pom.xml
maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java
maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java
maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/RemoveVersionOperation.java
maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java
maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
maven/sandbox/trunk/mercury/mercury-pom/pom.xml
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties
maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployResponse.java
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeployResponse.java
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java
maven/sandbox/trunk/mercury/mercury-util/pom.xml
maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java
Modified: maven/sandbox/trunk/mercury/mercury-it/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-it/pom.xml?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-it/pom.xml (original)
+++ maven/sandbox/trunk/mercury/mercury-it/pom.xml Fri Aug 22 18:07:49 2008
@@ -10,4 +10,69 @@
<name>Mercury Integration Tests: ${project.version}</name>
<description>Mercury Integration Tests</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-api</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-digester</groupId>
+ <artifactId>commons-digester</artifactId>
+ <version>1.8</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-md-shared</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-util</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-crypto-basic</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-local-m2</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-local-m2</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-remote-m2</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-transport-http</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-digester</groupId>
+ <artifactId>commons-digester</artifactId>
+ <version>1.8</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
</project>
\ No newline at end of file
Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java (original)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java Fri Aug 22 18:07:49 2008
@@ -2,6 +2,7 @@
import java.util.List;
+import org.apache.maven.mercury.util.TimeUtil;
import org.codehaus.plexus.i18n.DefaultLanguage;
import org.codehaus.plexus.i18n.Language;
@@ -68,7 +69,7 @@
}
vs.addVersion( version );
- vs.setLastUpdated( MetadataBuilder.getUTCTimestamp() );
+ vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
return true;
}
Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java (original)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java Fri Aug 22 18:07:49 2008
@@ -6,12 +6,12 @@
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
import org.apache.maven.mercury.artifact.Artifact;
import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Writer;
+import org.apache.maven.mercury.util.TimeUtil;
/**
* utility class to help with de/serializing metadata from/to XML
@@ -44,6 +44,29 @@
}
/**
+ * instantiate Metadata from a byte array
+ *
+ * @param in
+ * @return
+ * @throws MetadataException
+ */
+ public static Metadata getMetadata( byte [] in )
+ throws MetadataException
+ {
+ if( in == null || in.length < 10 )
+ return null;
+
+ try
+ {
+ return new MetadataXpp3Reader().read( new ByteArrayInputStream(in) );
+ }
+ catch( Exception e )
+ {
+ throw new MetadataException(e);
+ }
+ }
+
+ /**
* serialize metadata into xml
*
* @param metadata to serialize
@@ -84,6 +107,8 @@
return metadataBytes;
Metadata metadata;
+ boolean changed = false;
+
if( metadataBytes == null || metadataBytes.length < 10 )
{
metadata = new Metadata();
@@ -96,9 +121,25 @@
for( MetadataOperation op : mutators )
{
- boolean changed = op.perform( metadata );
+ changed = changed || op.perform( metadata );
}
+ if( !changed )
+ return metadataBytes;
+
+ return getBytes( metadata );
+ }
+
+ /**
+ * marshall metadata into a byte array
+ *
+ * @param metadata
+ * @return
+ * @throws MetadataException
+ */
+ public static byte [] getBytes( Metadata metadata )
+ throws MetadataException
+ {
ByteArrayOutputStream out = new ByteArrayOutputStream();
write( metadata, out );
@@ -118,6 +159,8 @@
throws MetadataException
{
+ boolean changed = false;
+
if( metadata == null )
{
metadata = new Metadata();
@@ -126,7 +169,7 @@
if( mutators != null && mutators.size() > 0 )
for( MetadataOperation op : mutators )
{
- boolean changed = op.perform( metadata );
+ changed = changed || op.perform( metadata );
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -162,7 +205,7 @@
*/
public static void updateTimestamp( Snapshot target )
{
- target.setTimestamp( getUTCTimestamp() );
+ target.setTimestamp( TimeUtil.getUTCTimestamp() );
}
/**
@@ -172,29 +215,7 @@
*/
public static void updateTimestamp( Versioning target )
{
- target.setLastUpdated( getUTCTimestamp() );
- }
-
- /**
- *
- * @return current UTC timestamp by yyyyMMddHHmmss mask
- */
- public static String getUTCTimestamp( )
- {
- return getUTCTimestamp( new Date() );
- }
-
- /**
- *
- * @param date
- * @return current date converted to UTC timestamp by yyyyMMddHHmmss mask
- */
- public static String getUTCTimestamp( Date date )
- {
- java.util.TimeZone timezone = java.util.TimeZone.getTimeZone( "UTC" );
- java.text.DateFormat fmt = new java.text.SimpleDateFormat( "yyyyMMddHHmmss" );
- fmt.setTimeZone( timezone );
- return fmt.format( date );
+ target.setLastUpdated( TimeUtil.getUTCTimestamp() );
}
public static Snapshot createSnapshot( String version )
@@ -204,7 +225,7 @@
if( version == null || version.length() < 3 )
return sn;
- String utc = MetadataBuilder.getUTCTimestamp();
+ String utc = TimeUtil.getUTCTimestamp();
sn.setTimestamp( utc );
if( version.endsWith( Artifact.SNAPSHOT_VERSION ))
Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/RemoveVersionOperation.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/RemoveVersionOperation.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/RemoveVersionOperation.java (original)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/RemoveVersionOperation.java Fri Aug 22 18:07:49 2008
@@ -2,6 +2,7 @@
import java.util.List;
+import org.apache.maven.mercury.util.TimeUtil;
import org.codehaus.plexus.i18n.DefaultLanguage;
import org.codehaus.plexus.i18n.Language;
@@ -66,7 +67,7 @@
}
vs.removeVersion( version );
- vs.setLastUpdated( MetadataBuilder.getUTCTimestamp() );
+ vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
return true;
}
Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java (original)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java Fri Aug 22 18:07:49 2008
@@ -1,5 +1,6 @@
package org.apache.maven.mercury.repository.metadata;
+import org.apache.maven.mercury.util.TimeUtil;
import org.codehaus.plexus.i18n.DefaultLanguage;
import org.codehaus.plexus.i18n.Language;
@@ -58,7 +59,7 @@
}
vs.setSnapshot( snapshot );
- vs.setLastUpdated( MetadataBuilder.getUTCTimestamp() );
+ vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
return true;
}
Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java (original)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java Fri Aug 22 18:07:49 2008
@@ -12,6 +12,7 @@
import junit.framework.TestCase;
import org.apache.maven.mercury.util.FileUtil;
+import org.apache.maven.mercury.util.TimeUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
/**
@@ -203,7 +204,7 @@
Snapshot sn = new Snapshot();
sn.setLocalCopy( false );
sn.setBuildNumber( 35 );
- String ts = MetadataBuilder.getUTCTimestamp();
+ String ts = TimeUtil.getUTCTimestamp();
sn.setTimestamp( ts );
byte [] resBytes = MetadataBuilder.changeMetadata( targetBytes, new SetSnapshotOperation( new SnapshotOperand(sn) ) );
Modified: maven/sandbox/trunk/mercury/mercury-pom/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-pom/pom.xml?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-pom/pom.xml (original)
+++ maven/sandbox/trunk/mercury/mercury-pom/pom.xml Fri Aug 22 18:07:49 2008
@@ -6,6 +6,7 @@
<version>1-alpha-1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Mercury parent POM: ${project.version}</name>
+
<developers>
<developer>
<name>Jan Bartel</name>
@@ -34,6 +35,7 @@
<mercuryVersionMd>1.0.0.-alpha-1-SNAPSHOT</mercuryVersionMd>
<mercuryVersionRepo>1.0.0.-alpha-1-SNAPSHOT</mercuryVersionRepo>
<mercuryVersionTransport>1.0.0.-alpha-1-SNAPSHOT</mercuryVersionTransport>
+
</properties>
<distributionManagement>
@@ -275,8 +277,7 @@
<artifactId>plexus-i18n</artifactId>
<version>1.0-beta-10</version>
</dependency>
+
</dependencies>
-
-
</project>
Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java Fri Aug 22 18:07:49 2008
@@ -66,6 +66,8 @@
protected RepositoryWriter writer;
protected Server server;
+
+ protected String metadataName = "maven-metadata.xml";
//---------------------------------------------------------------------------
public AbstractRepository( String id, String type )
{
@@ -178,7 +180,7 @@
return rf.getReader( repo, mdProcessor );
}
//---------------------------------------------------------------------------
- public static RepositoryWriter getWriter( String type, Repository repo, MetadataProcessor mdProcessor )
+ public static RepositoryWriter getWriter( String type, Repository repo )
throws IllegalArgumentException, RepositoryException
{
if( type == null || type.length() < 1 )
@@ -192,7 +194,7 @@
if( wf == null )
throw new RepositoryException( lang.getMessage( "null.writer.factory.found" ) );
- return wf.getWriter( repo, mdProcessor );
+ return wf.getWriter( repo );
}
//---------------------------------------------------------------------------
public boolean isSnapshots()
@@ -220,5 +222,10 @@
return server;
}
//---------------------------------------------------------------------------
+ public String getMetadataName()
+ {
+ return metadataName;
+ }
+ //---------------------------------------------------------------------------
//---------------------------------------------------------------------------
}
Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java Fri Aug 22 18:07:49 2008
@@ -117,4 +117,18 @@
*/
boolean hasServer();
Server getServer();
+
+ /**
+ * maven-metadata.xml file name for this repository. This is internal to repository and should never be used
+ * outside of readers and wrters
+ *
+ * @return server
+ */
+ String getMetadataName();
+
+
+ /**
+ * @param releasesOnly
+ */
+ void setRepositoryQualityRange( QualityRange releasesOnly );
}
Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryWriterFactory.java Fri Aug 22 18:07:49 2008
@@ -1,9 +1,16 @@
package org.apache.maven.mercury.repository.api;
-import org.apache.maven.mercury.builder.api.MetadataProcessor;
+/**
+ *
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
public interface RepositoryWriterFactory
{
- public RepositoryWriter getWriter( Repository repo, MetadataProcessor mdProcessor )
+ public RepositoryWriter getWriter( Repository repo )
throws RepositoryException;
}
Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java Fri Aug 22 18:07:49 2008
@@ -16,24 +16,30 @@
implements LocalRepository
{
private File directory;
+
+ private static final String METADATA_NAME = "maven-metadata-local.xml";
+
//----------------------------------------------------------------------------------
public LocalRepositoryM2( Server server )
{
super( server.getId(), DEFAULT_REPOSITORY_TYPE );
this.directory = new File( server.getURL().getFile() );
this.server = server;
+ this.metadataName = METADATA_NAME;
}
//----------------------------------------------------------------------------------
public LocalRepositoryM2( String id, File directory )
{
super( id, DEFAULT_REPOSITORY_TYPE );
this.directory = directory;
+ this.metadataName = METADATA_NAME;
}
//----------------------------------------------------------------------------------
public LocalRepositoryM2( String id, File directory, String type )
{
super( id, type );
this.directory = directory;
+ this.metadataName = METADATA_NAME;
}
//----------------------------------------------------------------------------------
public File getDirectory()
Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java Fri Aug 22 18:07:49 2008
@@ -168,14 +168,14 @@
if( !isPom )
{
// first - take care of the binary
- writeFile( in, vFacs , fName );
+ FileUtil.writeAndSign( fName, in, vFacs );
// if classier - nothing else to do :)
if( artifact.hasClassifier() )
return;
// GA metadata
- File mdFile = new File( _repoDir, relGroupPath+'/'+"maven-metadata-local.xml");
+ File mdFile = new File( _repoDir, relGroupPath+'/'+_repo.getMetadataName() );
Metadata localMd = null;
if( mdFile.exists() )
@@ -200,10 +200,10 @@
byte [] resBytes = MetadataBuilder.changeMetadata( localMd, mdOp );
- FileUtil.writeRawData( mdFile, resBytes );
+ FileUtil.writeAndSign( mdFile.getAbsolutePath(), resBytes, vFacs );
// now - GAV metadata
- mdFile = new File( _repoDir, relVersionPath+'/'+"maven-metadata-local.xml");
+ mdFile = new File( _repoDir, relVersionPath+'/'+_repo.getMetadataName() );
localMd = null;
if( mdFile.exists() )
@@ -217,13 +217,14 @@
}
resBytes = MetadataBuilder.changeMetadata( localMd, mdOp );
-
- FileUtil.writeRawData( mdFile, resBytes );
+ FileUtil.writeAndSign( mdFile.getAbsolutePath(), resBytes, vFacs );
}
if( hasPomBlob )
{
- writeFile( pomBlob, vFacs , _repoDir.getAbsolutePath()+'/'+relVersionPath+'/'+artifact.getBaseName()+".pom" );
+ FileUtil.writeAndSign( _repoDir.getAbsolutePath()+'/'+relVersionPath
+ +'/'+artifact.getArtifactId()+'-'+artifact.getVersion()+".pom", pomBlob, vFacs
+ );
}
}
@@ -234,53 +235,5 @@
}
//---------------------------------------------------------------------------------------------------------------
- private static void writeFile( byte [] bytes, Set<StreamVerifierFactory> vFacs, String fName )
- throws IOException, StreamObserverException
- {
- ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
- writeFile( bais, vFacs, fName );
- }
- //---------------------------------------------------------------------------------------------------------------
- private static void writeFile( InputStream in, Set<StreamVerifierFactory> vFacs, String fName )
- throws IOException, StreamObserverException
- {
- byte [] buf = new byte[ 10240 ];
- int n = -1;
- HashSet<StreamVerifier> vSet = new HashSet<StreamVerifier>( vFacs.size() );
-
- for( StreamVerifierFactory vf : vFacs )
- vSet.add( vf.newInstance() );
-
- FileOutputStream fout = null;
-
- try
- {
- File f = new File( fName );
- f.getParentFile().mkdirs();
-
- fout = new FileOutputStream( f );
-
- while( (n = in.read( buf )) != -1 )
- {
- for( StreamVerifier sv : vSet )
- sv.bytesReady( buf, 0, n );
-
- fout.write( buf, 0, n );
- }
-
- for( StreamVerifier sv : vSet )
- {
- String sig = sv.getSignature();
- FileUtil.writeRawData( new File( fName+sv.getAttributes().getExtension() ), sig );
- }
-
- }
- finally
- {
- if( fout != null ) try { fout.close(); } catch( Exception any ) {}
- }
-
- }
- //---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
}
Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Factory.java Fri Aug 22 18:07:49 2008
@@ -1,17 +1,16 @@
package org.apache.maven.mercury.repository.local.m2;
-import org.apache.maven.mercury.builder.api.MetadataProcessor;
import org.apache.maven.mercury.repository.api.AbstractRepository;
import org.apache.maven.mercury.repository.api.LocalRepository;
import org.apache.maven.mercury.repository.api.Repository;
import org.apache.maven.mercury.repository.api.RepositoryException;
-import org.apache.maven.mercury.repository.api.RepositoryReader;
-import org.apache.maven.mercury.repository.api.RepositoryReaderFactory;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
+import org.apache.maven.mercury.repository.api.RepositoryWriterFactory;
import org.codehaus.plexus.i18n.DefaultLanguage;
import org.codehaus.plexus.i18n.Language;
public class LocalRepositoryWriterM2Factory
-implements RepositoryReaderFactory
+implements RepositoryWriterFactory
{
private static final Language lang = new DefaultLanguage( LocalRepositoryWriterM2Factory.class );
private static final LocalRepositoryWriterM2Factory factory = new LocalRepositoryWriterM2Factory();
@@ -21,13 +20,13 @@
AbstractRepository.register( AbstractRepository.DEFAULT_REPOSITORY_TYPE, factory );
}
- public RepositoryReader getReader( Repository repo, MetadataProcessor mdProcessor)
+ public RepositoryWriter getWriter( Repository repo )
throws RepositoryException
{
if( repo == null || !(repo instanceof LocalRepository) )
throw new RepositoryException( lang.getMessage( "bad.repository.type", repo == null ? "null" : repo.getClass().getName() ) );
- return new LocalRepositoryReaderM2( (LocalRepository)repo, mdProcessor );
+ return new LocalRepositoryWriterM2( (LocalRepository)repo );
}
}
Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties Fri Aug 22 18:07:49 2008
@@ -1,6 +1,17 @@
-bad.repository.type=repository should implement LocalRepository, instead got {0}
+bad.repository.type=repository should implement RemoteRepository, instead got {0}
bad.repository.null=repository cannot be null
bad.repository.server.null=remote repository server cannot be null
bad.repository.server.url.null=remote repository server URL cannot be null
maven.metadata.xml.exception=Exception {0} during processing maven-metadata.xml from {1} in repository {2}
+no.group.md=No group metadata found at {0}/{1}
+group.md.no.versions=Group level metadata {0}/{1} at does not have any versions
+
+no.gav.md=No artifact metadata found at {0}/{1}
+gav.md.no.versions=Artifact level metadata {0}/{1} at does not have any versions
+
+snapshot.not.found=No snapshot found in artifact-level metadata at {0}/{1}
+
+no.pom.in.primary.artifact=Primary artifact {0} does not have a POM blob set, something is wrong with the client program.
+artifact.no.stream=non-POM artifact {0} does not have neither file nor stream associated with it. Nothing to upload.
+artifact.no.file=Artifact {0} - cannot open file {1} for reading, error: {2}
\ No newline at end of file
Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java Fri Aug 22 18:07:49 2008
@@ -1,17 +1,23 @@
package org.apache.maven.mercury.repository.remote.m2;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
+import java.security.acl.Group;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import org.apache.maven.mercury.artifact.Artifact;
import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
import org.apache.maven.mercury.artifact.ArtifactMetadata;
import org.apache.maven.mercury.artifact.DefaultArtifact;
+import org.apache.maven.mercury.artifact.Quality;
+import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
import org.apache.maven.mercury.artifact.version.VersionException;
import org.apache.maven.mercury.artifact.version.VersionRange;
import org.apache.maven.mercury.builder.api.MetadataProcessingException;
@@ -25,12 +31,17 @@
import org.apache.maven.mercury.repository.api.RepositoryOperationResult;
import org.apache.maven.mercury.repository.api.RepositoryReader;
import org.apache.maven.mercury.repository.metadata.Metadata;
+import org.apache.maven.mercury.repository.metadata.MetadataBuilder;
+import org.apache.maven.mercury.repository.metadata.MetadataException;
import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.apache.maven.mercury.spi.http.client.HttpClientException;
import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetrievalRequest;
import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetriever;
import org.apache.maven.mercury.spi.http.client.retrieve.RetrievalResponse;
import org.apache.maven.mercury.transport.api.Binding;
+import org.apache.maven.mercury.transport.api.Server;
+import org.apache.maven.mercury.transport.api.TransportTransaction;
+import org.apache.maven.mercury.util.FileUtil;
import org.codehaus.plexus.i18n.DefaultLanguage;
import org.codehaus.plexus.i18n.Language;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -84,6 +95,9 @@
// TODO 2008-07-29 og: here I should analyze Server protocol
// and come with appropriate Transport implementation
_transport = new DefaultRetriever();
+ HashSet<Server> servers = new HashSet<Server>(1);
+ servers.add( repo.getServer() );
+ _transport.setServers( servers );
}
catch( HttpClientException e )
{
@@ -100,8 +114,243 @@
throws RepositoryException,
IllegalArgumentException
{
- // TODO Auto-generated method stub
- return null;
+ if( query == null || query.size() < 1 )
+ return null;
+
+ RepositoryOperationResult<DefaultArtifact> res = new RepositoryOperationResult<DefaultArtifact>();
+
+ for( ArtifactBasicMetadata bmd : query )
+ {
+ try
+ {
+ DefaultArtifact da = readArtifact( bmd );
+ res.add( da );
+ }
+ catch( Exception e )
+ {
+ res.add( e );
+ }
+ }
+
+ return res;
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ private String findLatestSnapshot( String gavPath, String version, DefaultArtifact da )
+ throws RepositoryException, MetadataProcessingException, MetadataException
+ {
+ String ver = version;
+ DefaultArtifactVersion dav = new DefaultArtifactVersion( ver );
+
+ byte [] mdBytes = readRawData( gavPath+'/'+ver+'/'+_repo.getMetadataName() );
+ if( mdBytes == null )
+ throw new RepositoryException( _lang.getMessage( "no.gav.md", _repo.getServer().getURL().toString(), gavPath+'/'+ver+'/'+_repo.getMetadataName() ) );
+
+ Metadata gavMd = MetadataBuilder.read( new ByteArrayInputStream(mdBytes) );
+ if( gavMd == null || gavMd.getVersioning() == null )
+ throw new RepositoryException( _lang.getMessage( "gav.md.no.versions", _repo.getServer().getURL().toString(), gavPath+'/'+ver+'/'+_repo.getMetadataName() ) );
+
+
+ List<String> versions = gavMd.getVersioning().getVersions();
+ if( versions == null || versions.size() < 1 )
+ throw new RepositoryException( _lang.getMessage( "gav.md.no.versions", _repo.getServer().getURL().toString(), gavPath+'/'+ver+'/'+_repo.getMetadataName() ) );
+
+ if( versions.contains( ver ) )
+ {
+ da.setVersion( ver );
+
+ return gavPath+'/'+ dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION
+ + '/'+da.getArtifactId()+'-'+dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION
+ + ( da.hasClassifier() ? '-'+da.getClassifier() : "" )
+ + '.'+da.getType()
+ ;
+ }
+
+ ver = null;
+ DefaultArtifactVersion tempDav = null;
+ DefaultArtifactVersion tempDav2 = null;
+
+ // find latest
+ for( String vn : versions )
+ {
+ // no snapshots any more
+ if( vn.endsWith( Artifact.SNAPSHOT_VERSION ))
+ continue;
+
+ if( ver == null )
+ {
+ ver = vn;
+ tempDav = new DefaultArtifactVersion( vn );
+ continue;
+ }
+
+ tempDav2 = new DefaultArtifactVersion( vn );
+ if( tempDav2.compareTo( tempDav ) > 0 )
+ {
+ ver = vn;
+ tempDav = tempDav2;
+ }
+
+ }
+
+ if( ver == null )
+ {
+ throw new RepositoryException( _lang.getMessage( "snapshot.not.found", _repo.getServer().getURL().toString(), gavPath+'/'+ver+'/'+_repo.getMetadataName() ) );
+ }
+
+ da.setVersion( ver );
+
+ return gavPath + '/' + dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION
+ + '/'+da.getArtifactId()+'-'+ver
+ + ( da.hasClassifier() ? '-'+da.getClassifier() : "" )
+ + '.'+da.getType()
+;
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public DefaultArtifact readArtifact( ArtifactBasicMetadata bmd )
+ throws IOException, RepositoryException, MetadataProcessingException, MetadataException
+ {
+ DefaultArtifact da = bmd instanceof DefaultArtifact ? (DefaultArtifact)bmd : new DefaultArtifact( bmd );
+
+ String version = bmd.getVersion();
+ DefaultArtifactVersion dav = new DefaultArtifactVersion( version );
+ Quality vq = dav.getQuality();
+
+ String relGaPath = bmd.getGroupId().replace( '.', '/' ) + '/' + bmd.getArtifactId();
+
+ byte [] mdBytes = readRawData( relGaPath+'/'+_repo.getMetadataName() );
+ if( mdBytes == null )
+ throw new RepositoryException( _lang.getMessage( "no.group.md", _repo.getServer().getURL().toString(), relGaPath ) );
+
+ Metadata groupMd = MetadataBuilder.read( new ByteArrayInputStream(mdBytes) );
+ if( groupMd == null || groupMd.getVersioning() == null )
+ throw new RepositoryException( _lang.getMessage( "group.md.no.versions", _repo.getServer().getURL().toString(), relGaPath ) );
+
+ List<String> versions = groupMd.getVersioning().getVersions();
+ if( versions == null || versions.size() < 1 )
+ throw new RepositoryException( _lang.getMessage( "group.md.no.versions", _repo.getServer().getURL().toString(), relGaPath ) );
+
+ String relBinaryPath = null;
+
+ // merge RELEASE and LATEST, should be no difference
+ if( Artifact.RELEASE_VERSION.equals( version )
+ ||
+ Artifact.LATEST_VERSION.equals( version )
+ )
+ {
+ boolean noSnapshots = Artifact.RELEASE_VERSION.equals( version );
+ version = null;
+ DefaultArtifactVersion tempDav = null;
+ DefaultArtifactVersion tempDav2 = null;
+
+ // find latest
+ for( String vn : versions )
+ {
+ // RELEASE?
+ if( noSnapshots && vn.endsWith( Artifact.SNAPSHOT_VERSION ))
+ continue;
+
+ if( version == null )
+ {
+ version = vn;
+ tempDav = new DefaultArtifactVersion( vn );
+ continue;
+ }
+
+ tempDav2 = new DefaultArtifactVersion( vn );
+ if( tempDav2.compareTo( tempDav ) > 0 )
+ {
+ version = vn;
+ tempDav = tempDav2;
+ }
+
+ }
+
+ if( version == null )
+ throw new RepositoryException( _lang.getMessage( "gav.not.found", bmd.toString(), relGaPath ) );
+
+ // LATEST is a SNAPSHOT :(
+ if( version.endsWith( Artifact.SNAPSHOT_VERSION ) )
+ {
+ relBinaryPath = findLatestSnapshot( relGaPath, version, da );
+
+ if( relBinaryPath == null )
+ throw new RepositoryException( _lang.getMessage( "gav.not.found", bmd.toString(), relGaPath ) );
+ }
+ else
+ {
+ relBinaryPath = relGaPath+'/'+version+'/'+bmd.getArtifactId()+'-'+version
+ + ( bmd.hasClassifier() ? '-'+bmd.getClassifier() : "" )+'.'+bmd.getType()
+ ;
+ da.setVersion( version );
+ }
+ }
+ // regular snapshot requested
+ else if( version.endsWith( Artifact.SNAPSHOT_VERSION ) )
+ {
+ relBinaryPath = findLatestSnapshot( relGaPath, version, da );
+
+ if( relBinaryPath == null )
+ throw new RepositoryException( _lang.getMessage( "gav.not.found", bmd.toString(), relGaPath ) );
+ }
+ // time stamped snapshot requested
+ else if( vq.equals( Quality.SNAPSHOT_TS_QUALITY ))
+ {
+ relBinaryPath = relGaPath
+ + '/'+dav.getBase()+'-'+Artifact.SNAPSHOT_VERSION
+ + '/' + bmd.getArtifactId() + '-' + bmd.getVersion() + ( bmd.hasClassifier() ? '-'+bmd.getClassifier() : "" )
+ + '.' + bmd.getType()
+ ;
+ }
+ else
+ {
+ relBinaryPath = relGaPath + '/'+version
+ + '/'+bmd.getArtifactId()+'-'+version
+ + ( bmd.hasClassifier() ? '-'+bmd.getClassifier() : "" )
+ + '.'+bmd.getType()
+ ;
+ }
+
+ // binary calculated
+
+ File binFile = File.createTempFile( "remote-repo-", bmd.getArtifactId()+bmd.getVersion()+'.'+bmd.getType() );
+ File pomFile = null;
+
+ Binding binBinding = new Binding( new URL(_repo.getServer().getURL().toString() + '/'+ relBinaryPath) , binFile );
+
+ DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+ request.addBinding( binBinding );
+
+ if( !"pom".equals( bmd.getType() ) )
+ {
+ String relPomPath = relGaPath + '/'+version
+ + '/'+bmd.getArtifactId()+'-'+version
+ + ".pom"
+ ;
+
+ pomFile = File.createTempFile( "remote-repo-", bmd.getArtifactId()+bmd.getVersion()+'.'+bmd.getType() );
+ Binding pomBinding = new Binding( new URL(_repo.getServer().getURL().toString() + '/'+ relPomPath) , pomFile );
+ request.addBinding( binBinding );
+ }
+
+ RetrievalResponse response = _transport.retrieve( request );
+
+ if( response.hasExceptions() )
+ {
+ throw new RepositoryException( response.getExceptions().toString() );
+ }
+
+ da.setFile( binFile );
+
+ if( pomFile != null )
+ {
+ da.setPomBlob( FileUtil.readRawData( pomFile ) );
+ }
+ else
+ {
+ da.setPomBlob( FileUtil.readRawData( binFile ) );
+ }
+
+ return da;
}
//---------------------------------------------------------------------------------------------------------------
/**
@@ -152,7 +401,7 @@
String gaPath = null;
for( ArtifactBasicMetadata bmd : query )
{
- gaPath = bmd.getGroupId().replace( '.', '/' )+'/'+bmd.getArtifactId()+"/maven-metadata.xml";
+ gaPath = bmd.getGroupId().replace( '.', '/' )+'/'+bmd.getArtifactId()+'/'+_repo.getMetadataName();
byte[] mavenMetadata;
try
@@ -188,7 +437,7 @@
VersionRange versionQuery;
try
{
- versionQuery = new VersionRange( bmd.getVersion() );
+ versionQuery = new VersionRange( bmd.getVersion(), _repo.getVersionRangeQualityRange() );
}
catch( VersionException e )
{
@@ -203,6 +452,10 @@
String v = (String)vo;
+ Quality q = new Quality( v );
+ if( ! _repo.isAcceptedQuality( q ) )
+ continue;
+
if( !versionQuery.includes( v ) )
continue;
@@ -242,32 +495,24 @@
return null;
FileInputStream fis = null;
- File tempFile = null;
try
{
- // transport workaround - until it can do in-memory Bindings
- tempFile = File.createTempFile( "mercury", "readraw" );
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(10240);
String separator = "/";
if( path.startsWith( separator ))
separator = "";
- Binding binding = new Binding( new URL(_repo.getServer().getURL().toString() + separator + path) , tempFile );
+ Binding binding = new Binding( new URL(_repo.getServer().getURL().toString() + separator + path) , baos );
DefaultRetrievalRequest request = new DefaultRetrievalRequest();
request.addBinding( binding );
RetrievalResponse response = _transport.retrieve( request );
if( response.hasExceptions() )
- {
throw new MetadataProcessingException( response.getExceptions().toString() );
- }
-
- fis = new FileInputStream( tempFile );
- int len = (int)tempFile.length();
- byte [] pom = new byte [ len ];
- fis.read( pom );
- return pom;
+
+ return baos.toByteArray();
}
catch( IOException e )
{
@@ -276,7 +521,6 @@
finally
{
if( fis != null ) try { fis.close(); } catch( Exception any ) {}
- if( tempFile != null ) try { if(tempFile.exists()) tempFile.delete(); } catch( Exception any ) {}
}
}
//---------------------------------------------------------------------------------------------------------------
Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java (original)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java Fri Aug 22 18:07:49 2008
@@ -86,6 +86,18 @@
this.localIS = is;
}
+ /**
+ * inbound constructor - read contents of the remoteUrl to the stream
+ *
+ * @param remoteUrl
+ * @param is
+ */
+ public Binding( URL remoteUrl, ByteArrayOutputStream os )
+ {
+ this.remoteResource = remoteUrl;
+ this.localOS = os;
+ }
+
public URL getRemoteResource()
{
return remoteResource;
@@ -139,4 +151,16 @@
return localFile;
}
+ @Override
+ public String toString()
+ {
+ return '['
+ + (remoteResource == null ? "null URL" : remoteResource.toString() )+" <=> "
+ + (localFile == null ? ( localIS == null ? (localOS == null ? "null local Res" : localOS) : "localIS" ) : localFile.getAbsolutePath() )
+ +']'
+ ;
+ }
+
+
+
}
Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployResponse.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployResponse.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployResponse.java (original)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployResponse.java Fri Aug 22 18:07:49 2008
@@ -25,7 +25,8 @@
import org.apache.maven.mercury.spi.http.client.HttpClientException;
-public class DefaultDeployResponse implements DeployResponse
+public class DefaultDeployResponse
+implements DeployResponse
{
private Set<HttpClientException> _exceptions = Collections.synchronizedSet( new HashSet<HttpClientException>() );
@@ -48,4 +49,9 @@
return _exceptions.toString();
}
+ public boolean hasExceptions()
+ {
+ return _exceptions != null && _exceptions.size() > 0;
+ }
+
}
Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java (original)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java Fri Aug 22 18:07:49 2008
@@ -328,14 +328,17 @@
return server;
}
- private Set<StreamObserver> createStreamObservers (Server server)
+ private Set<StreamObserver> createStreamObservers( Server server )
throws StreamVerifierException
{
HashSet<StreamObserver> observers = new HashSet<StreamObserver>();
- Set<StreamVerifierFactory> factories = server.getWriterStreamVerifierFactories();
- for (StreamVerifierFactory f:factories)
+ if( server != null && server.hasWriterStreamVerifierFactories() )
{
- observers.add( f.newInstance() );
+ Set<StreamVerifierFactory> factories = server.getWriterStreamVerifierFactories();
+ for (StreamVerifierFactory f:factories)
+ {
+ observers.add( f.newInstance() );
+ }
}
return observers;
}
Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeployResponse.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeployResponse.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeployResponse.java (original)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeployResponse.java Fri Aug 22 18:07:49 2008
@@ -39,4 +39,6 @@
* @return
*/
public Set<HttpClientException> getExceptions();
+
+ public boolean hasExceptions();
}
Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java (original)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java Fri Aug 22 18:07:49 2008
@@ -312,7 +312,7 @@
throws StreamVerifierException
{
HashSet<StreamObserver> observers = new HashSet<StreamObserver>();
- if (server != null)
+ if (server != null && server.hasReaderStreamVerifierFactories() )
{
Set<StreamVerifierFactory> factories = server.getReaderStreamVerifierFactories();
for( StreamVerifierFactory f:factories )
Modified: maven/sandbox/trunk/mercury/mercury-util/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/pom.xml?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/pom.xml (original)
+++ maven/sandbox/trunk/mercury/mercury-util/pom.xml Fri Aug 22 18:07:49 2008
@@ -9,4 +9,77 @@
<version>1.0.0-alpha-1-SNAPSHOT</version>
<name>Mercury Shared Utilities: ${project.version}</name>
+ <build>
+ <plugins>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addClasspath>true</addClasspath>
+ <classpathPrefix>lib/</classpathPrefix>
+ <mainClass>org.apache.maven.mercury.util.FileUtil</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <finalName>${project.artifactId}-all</finalName>
+ <keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope>
+ <createDependencyReducedPom>true</createDependencyReducedPom>
+ <artifactSet>
+ <excludes>
+ <exclude>org.codehaus.plexus:plexus-component-api</exclude>
+ <exclude>bouncycastle:bcprov-jdk15</exclude>
+ <exclude>obouncycastle:bcpg-jdk15</exclude>
+ </excludes>
+ </artifactSet>
+ <filters>
+ <filter>
+ <excludes>
+ <exclude>/META-INF/BCKEY.DSA</exclude>
+ <exclude>/META-INF/BCKEY.SF</exclude>
+ </excludes>
+ </filter>
+ </filters>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-crypto-api</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-crypto-basic</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>1.1</version>
+ </dependency>
+ </dependencies>
+
</project>
\ No newline at end of file
Modified: maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java?rev=688235&r1=688234&r2=688235&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java (original)
+++ maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java Fri Aug 22 18:07:49 2008
@@ -1,13 +1,37 @@
package org.apache.maven.mercury.util;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+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.Option;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.maven.mercury.crypto.api.StreamObserverException;
+import org.apache.maven.mercury.crypto.api.StreamVerifier;
+import org.apache.maven.mercury.crypto.api.StreamVerifierAttributes;
+import org.apache.maven.mercury.crypto.api.StreamVerifierException;
+import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
+import org.apache.maven.mercury.crypto.pgp.PgpStreamVerifierFactory;
+import org.apache.maven.mercury.crypto.sha.SHA1VerifierFactory;
+import org.codehaus.plexus.i18n.DefaultLanguage;
+import org.codehaus.plexus.i18n.Language;
/**
*
@@ -19,6 +43,11 @@
public class FileUtil
{
public static final String DEFAULT_CHARSET = "utf-8";
+ public static final int K = 1024;
+ public static final int DEFAULT_BUFFER_SIZE = 10 * K;
+ //---------------------------------------------------------------------------------------------------------------
+ private static final org.slf4j.Logger _log = org.slf4j.LoggerFactory.getLogger( FileUtil.class );
+ private static final Language _lang = new DefaultLanguage( FileUtil.class );
//---------------------------------------------------------------------------------------------------------------
public static void delete( File f )
{
@@ -103,10 +132,103 @@
}
}
//---------------------------------------------------------------------------------------------------------------
+ public static byte[] readRawData( File file, Collection<StreamVerifierFactory> vFacs )
+ throws IOException, FileUtilException, StreamVerifierException
+ {
+ if( file == null || ! file.exists() )
+ return null;
+
+ boolean verify = vFacs != null && vFacs.size() > 0;
+
+ String fileName = file.getAbsolutePath();
+
+ HashSet<StreamVerifier> vs = new HashSet<StreamVerifier>( verify ? vFacs.size() : 1 );
+
+ for( StreamVerifierFactory svf : vFacs )
+ {
+ StreamVerifier sv = svf.newInstance();
+ String ext = sv.getAttributes().getExtension();
+ String sigFileName = fileName+(ext.startsWith( "." )?"":".")+ext;
+ File sigFile = new File( sigFileName );
+ if( sigFile.exists() )
+ {
+ try
+ {
+ sv.initSignature( FileUtil.readRawDataAsString( sigFile ) );
+ }
+ catch( IOException e )
+ {
+ throw new FileUtilException( _lang.getMessage( "cannot.read.signature.file", sigFileName, e.getMessage() ) );
+ }
+ vs.add( sv );
+ }
+ else if( ! sv.getAttributes().isLenient() )
+ {
+ throw new FileUtilException( _lang.getMessage( "no.signature.file", ext, sigFileName ) );
+ }
+ // otherwise ignore absence of signature file, if verifier is lenient
+ }
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ FileInputStream fin = null;
+ try
+ {
+ fin = new FileInputStream( file );
+ byte [] buf = new byte[ DEFAULT_BUFFER_SIZE ];
+ int n = -1;
+ while( (n = fin.read( buf )) != -1 )
+ {
+ if( verify )
+ {
+ for( StreamVerifier sv : vs )
+ try
+ {
+ sv.bytesReady( buf, 0, n );
+ }
+ catch( StreamObserverException e )
+ {
+ if( ! sv.getAttributes().isLenient() )
+ throw new FileUtilException(e);
+ }
+ }
+
+ baos.write( buf, 0, n );
+ }
+
+ if( verify )
+ {
+ for( StreamVerifier sv : vs )
+ {
+ if( sv.verifySignature() )
+ {
+ if( sv.getAttributes().isSufficient() )
+ break;
+ }
+ else
+ {
+ if( !sv.getAttributes().isLenient() )
+ throw new StreamVerifierException( _lang.getMessage( "signature.failed", sv.getAttributes().getExtension(), fileName ) );
+ }
+ }
+ }
+
+ return baos.toByteArray();
+ }
+ catch( IOException e )
+ {
+ throw new FileUtilException(e);
+ }
+ finally
+ {
+ if( fin != null ) try { fin.close(); } catch( Exception any ) {}
+ }
+ }
+ //---------------------------------------------------------------------------------------------------------------
public static byte[] readRawData( InputStream in )
throws IOException
{
- byte [] bytes = new byte [ 10240 ];
+ byte [] bytes = new byte [ DEFAULT_BUFFER_SIZE ];
int n = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -127,7 +249,7 @@
{
OutputStream out = new FileOutputStream( f );
- byte [] buf = new byte[ 10240 ];
+ byte [] buf = new byte[ DEFAULT_BUFFER_SIZE ];
int n;
while( (n = in.read(buf)) > 0 )
@@ -161,5 +283,236 @@
}
}
//---------------------------------------------------------------------------------------------------------------
+ public static void writeAndSign( String fName, byte [] bytes, Set<StreamVerifierFactory> vFacs )
+ throws IOException, StreamObserverException
+ {
+ ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
+ writeAndSign( fName, bais, vFacs );
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public static void writeAndSign( String fName, InputStream in, Set<StreamVerifierFactory> vFacs )
+ throws IOException, StreamObserverException
+ {
+ byte [] buf = new byte[ DEFAULT_BUFFER_SIZE ];
+ int n = -1;
+ HashSet<StreamVerifier> vSet = new HashSet<StreamVerifier>( vFacs.size() );
+
+ for( StreamVerifierFactory vf : vFacs )
+ vSet.add( vf.newInstance() );
+
+ FileOutputStream fout = null;
+
+ try
+ {
+ File f = new File( fName );
+ f.getParentFile().mkdirs();
+
+ fout = new FileOutputStream( f );
+
+ while( (n = in.read( buf )) != -1 )
+ {
+ for( StreamVerifier sv : vSet )
+ sv.bytesReady( buf, 0, n );
+
+ fout.write( buf, 0, n );
+ }
+
+ for( StreamVerifier sv : vSet )
+ {
+ String sig = sv.getSignature();
+ FileUtil.writeRawData( new File( fName+sv.getAttributes().getExtension() ), sig );
+ }
+
+ }
+ finally
+ {
+ if( fout != null ) try { fout.close(); } catch( Exception any ) {}
+ }
+
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public static void sign( File f, Set<StreamVerifierFactory> vFacs, boolean force )
+ throws IOException, StreamObserverException
+ {
+ if( vFacs == null || vFacs.size() < 1 )
+ return;
+
+ if( f.isDirectory() )
+ {
+ File [] kids = f.listFiles();
+ for( File kid : kids )
+ sign( kid, vFacs, force );
+ return;
+ }
+
+ String fName = f.getAbsolutePath();
+
+ HashSet<StreamVerifier> vs = new HashSet<StreamVerifier>( vFacs.size() );
+ for( StreamVerifierFactory vf : vFacs )
+ {
+ StreamVerifier sv = vf.newInstance();
+ String ext = sv.getAttributes().getExtension();
+
+ // don't sign signature files
+ if( fName.endsWith( ext ) )
+ return;
+
+ File sf = new File( fName+ext );
+ if( sf.exists() )
+ {
+ if( force )
+ sf.delete();
+ else
+ continue;
+ }
+ vs.add( sv );
+ }
+
+ byte [] buf = new byte[ DEFAULT_BUFFER_SIZE ];
+ FileInputStream fis = null;
+ try
+ {
+ fis = new FileInputStream( f );
+ int n = -1;
+
+ while( (n=fis.read( buf )) != -1 )
+ {
+ for( StreamVerifier sv : vs )
+ {
+ sv.bytesReady( buf, 0, n );
+ }
+ }
+
+ for( StreamVerifier sv : vs )
+ {
+ String sig = sv.getSignature();
+ String ext = sv.getAttributes().getExtension();
+ File sf = new File( fName+ext );
+ writeRawData( sf, sig );
+ }
+ }
+ finally
+ {
+ if( fis != null ) try { fis.close(); } catch( Exception any ) {}
+ }
+
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ @SuppressWarnings("static-access")
+ public static void main( String[] args )
+ throws IOException, StreamObserverException
+ {
+ Option recurce = new Option( "r", _lang.getMessage( "option.r" ) );
+ Option force = new Option( "force", _lang.getMessage( "option.force" ) );
+ Option sha1 = new Option( "sha1", _lang.getMessage( "option.sha1" ) );
+ Option pgp = new Option( "pgp", _lang.getMessage( "option.pgp" ) );
+ Option keyring = OptionBuilder.withArgName( "file" )
+ .hasArg()
+ .withType( java.io.File.class )
+ .withDescription( _lang.getMessage( "option.keyring" ) )
+ .create( "keyring" )
+ ;
+ Option keyid = OptionBuilder.withArgName( "hexstring" )
+ .hasArg()
+ .withDescription( _lang.getMessage( "option.keyid" ) )
+ .create( "keyid" )
+ ;
+ Option keypass = OptionBuilder.withArgName( "string" )
+ .hasArg()
+ .withDescription( _lang.getMessage( "option.keypass" ) )
+ .create( "keypass" )
+ ;
+
+ Options options = new Options();
+ options.addOption( recurce );
+ options.addOption( force );
+ options.addOption( sha1 );
+ options.addOption( pgp );
+ options.addOption( keyring );
+ options.addOption( keyid );
+ options.addOption( keypass );
+
+ CommandLine commandLine = null;
+ CommandLineParser parser = new GnuParser();
+
+ if( args == null || args.length < 2 )
+ {
+ HelpFormatter formatter = new HelpFormatter();
+ formatter.printHelp( "mercury-util", options );
+ return;
+ }
+
+ try
+ {
+ commandLine = parser.parse( options, args );
+ }
+ catch( ParseException e )
+ {
+ System.err.println( "Command line parsing eror: " + e.getMessage() );
+ return;
+ }
+
+ Set<StreamVerifierFactory> vFacs = new HashSet<StreamVerifierFactory>(4);
+
+ if( commandLine.hasOption("pgp") )
+ {
+ if( commandLine.hasOption("keyring") && commandLine.hasOption("keyid") )
+ {
+ BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
+ String pass = commandLine.hasOption( "keypass" ) ? commandLine.getOptionValue( "keypass" ) : r.readLine();
+
+ vFacs.add(
+ new PgpStreamVerifierFactory(
+ new StreamVerifierAttributes( PgpStreamVerifierFactory.DEFAULT_EXTENSION, false, true )
+ , new FileInputStream( commandLine.getOptionValue( "keyring" ) )
+ , commandLine.getOptionValue( "keyid" )
+ , pass
+ )
+ );
+ }
+ else
+ {
+ System.err.println( _lang.getMessage( "bad.pgp.args" ) );
+ return;
+ }
+ }
+
+ if( commandLine.hasOption("sha1") )
+ {
+ vFacs.add( new SHA1VerifierFactory(true,false) );
+ }
+
+ signAll( commandLine.getArgList(), vFacs, commandLine.hasOption( "r" ), commandLine.hasOption( "force" ) );
+
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ private static void signAll( List<String> fileNames, Set<StreamVerifierFactory> vFacs, boolean recurse, boolean force )
+ throws IOException, StreamObserverException
+ {
+ if( vFacs == null || vFacs.size() < 1 )
+ {
+ System.err.println("no.verifiers");
+ return;
+ }
+
+ File f = null;
+
+ for( String fName : fileNames )
+ {
+ f = new File( fName );
+ if( ! f.exists() )
+ {
+ System.out.println( _lang.getMessage( "file.not.exists", fName ));
+ continue;
+ }
+ if( f.isDirectory() && ! recurse )
+ {
+ System.out.println( _lang.getMessage( "file.is.directory", fName ));
+ continue;
+ }
+ sign( f, vFacs, force );
+ }
+ }
+ //---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
}
Added: maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtilException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtilException.java?rev=688235&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtilException.java (added)
+++ maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtilException.java Fri Aug 22 18:07:49 2008
@@ -0,0 +1,54 @@
+package org.apache.maven.mercury.util;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class FileUtilException
+ extends Exception
+{
+
+ /**
+ *
+ */
+ public FileUtilException()
+ {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ */
+ public FileUtilException(
+ String message )
+ {
+ super( message );
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param cause
+ */
+ public FileUtilException(
+ Throwable cause )
+ {
+ super( cause );
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public FileUtilException(
+ String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ // TODO Auto-generated constructor stub
+ }
+
+}
Added: maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties?rev=688235&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties (added)
+++ maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties Fri Aug 22 18:07:49 2008
@@ -0,0 +1,14 @@
+signature.failed=Signature "{0}": verification failed for file {1}
+no.signature.file=Verifier for {0} is mandatory, but file {1} does not exist
+cannot.read.signature.file=Cannot read signature file {0}, error: {1}
+option.sha1=produce SHA1 signatures
+option.pgp=produce PGP signatures, requires -keyring and -keyid options
+option.keyring=full path of the secret keyring file
+option.keyid=id of the key in the secret keyring file to be used in the signature
+option.keypass=key password
+option.r=recursevly sign all unsigned files
+option.force=overwrite existing signatures
+bad.pgp.args=pgp option requires both -keyring and -keyid to be specified
+no.verifiers=No signature generators requested - exiting
+file.not.exists=File "{0}" does not exist. Skipping ..
+file.is.directory=File "{0}" is a folder and no recursive option is specified. Skipping ..
\ No newline at end of file
Added: maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java?rev=688235&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java (added)
+++ maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java Fri Aug 22 18:07:49 2008
@@ -0,0 +1,37 @@
+package org.apache.maven.mercury.util;
+
+import java.util.Date;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class TimeUtil
+{
+
+ /**
+ *
+ * @return current UTC timestamp by yyyyMMddHHmmss mask
+ */
+ public static String getUTCTimestamp( )
+ {
+ return getUTCTimestamp( new Date() );
+ }
+
+ /**
+ *
+ * @param date
+ * @return current date converted to UTC timestamp by yyyyMMddHHmmss mask
+ */
+ public static String getUTCTimestamp( Date date )
+ {
+ java.util.TimeZone timezone = java.util.TimeZone.getTimeZone( "UTC" );
+ java.text.DateFormat fmt = new java.text.SimpleDateFormat( "yyyyMMddHHmmss" );
+ fmt.setTimeZone( timezone );
+ return fmt.format( date );
+ }
+
+}