You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ja...@apache.org on 2008/07/31 00:14:39 UTC
svn commit: r681222 - in /maven/sandbox/trunk/mercury/src:
main/java/org/apache/maven/mercury/spi/http/client/deploy/
main/java/org/apache/maven/mercury/spi/http/client/retrieve/
main/java/org/apache/maven/mercury/transport/api/ test/java/org/apache/ma...
Author: janb
Date: Wed Jul 30 15:14:38 2008
New Revision: 681222
URL: http://svn.apache.org/viewvc?rev=681222&view=rev
Log:
Implement deployment and retrieval from local memory.
Modified:
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java
maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java
Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java?rev=681222&r1=681221&r2=681222&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DeploymentTarget.java Wed Jul 30 15:14:38 2008
@@ -52,6 +52,7 @@
protected Set<StreamObserver> _observers = new HashSet<StreamObserver>();
protected List<Verifier> _verifiers = new ArrayList<Verifier>();
protected int _index = -1;
+
public abstract void onComplete();
@@ -138,9 +139,11 @@
_observers.add(o);
}
- if ( _binding == null || _binding.getLocalFile() == null || !_binding.getLocalFile().exists() )
+ if ( _binding == null ||
+ (_binding.isFile() && (_binding.getLocalFile() == null || !_binding.getLocalFile().exists())) ||
+ (_binding.isInMemory() && _binding.getLocalInputStream() == null))
{
- throw new IllegalArgumentException( "No local file to deploy" );
+ throw new IllegalArgumentException( "Nothing to deploy" );
}
_targetState = new TargetState();
_checksumState = new TargetState();
@@ -223,7 +226,10 @@
url = new URL( url.toString() + v.getExtension());
}
- file = File.createTempFile( _binding.getLocalFile().getName() + v.getExtension(), ".tmp" );
+ String localFileName = getFileName(url);
+
+ file = File.createTempFile( localFileName, ".tmp" );
+ file.deleteOnExit();
OutputStreamWriter fw = new OutputStreamWriter( new FileOutputStream( file ), "UTF-8" );
fw.write( v.getSignature() );
fw.close();
@@ -273,6 +279,22 @@
{
return ( _checksumState.isReady() && _targetState.isReady() );
}
+
+ public String getFileName (URL url)
+ {
+ if (url==null)
+ return "";
+ String localFileName = url.getFile();
+ int i = localFileName.indexOf('?');
+ if (i > 0)
+ localFileName = localFileName.substring(0, i);
+ if (localFileName.endsWith("/"))
+ localFileName = localFileName.substring(0, localFileName.length()-1);
+ i = localFileName.lastIndexOf('/');
+ if (i >= 0)
+ localFileName = localFileName.substring(i+1);
+ return localFileName;
+ }
public String toString()
{
Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java?rev=681222&r1=681221&r2=681222&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java Wed Jul 30 15:14:38 2008
@@ -79,7 +79,9 @@
{
setMethod( HttpMethods.PUT );
setRequestHeader( "Content-Type", "application/octet-stream" );
- setRequestHeader( "Content-Length", String.valueOf( _localFile.length() ) );
+ if (_binding.isFile())
+ setRequestHeader( "Content-Length", String.valueOf( _localFile.length() ) );
+
setRequestContentSource( getInputStream() );
setRequestHeader( __BATCH_HEADER, _batchId );
super.send();
@@ -145,7 +147,12 @@
{
if ( _inputStream == null )
{
- ObservableInputStream ois = new ObservableInputStream( new FileInputStream( _localFile ));
+ InputStream is = null;
+ if (_binding.isFile())
+ is = new FileInputStream( _localFile );
+ else if (_binding.isInMemory())
+ is = _binding.getLocalInputStream();
+ ObservableInputStream ois = new ObservableInputStream( is );
_inputStream = ois;
ois.addObservers(_observers);
}
Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java?rev=681222&r1=681221&r2=681222&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java Wed Jul 30 15:14:38 2008
@@ -136,11 +136,16 @@
{
if ( _outputStream == null )
{
- ObservableOutputStream oos = new ObservableOutputStream( new FileOutputStream( _localFile ));
+ OutputStream os = null;
+ if (_binding.isFile())
+ os = new FileOutputStream( _localFile );
+ else if (_binding.isInMemory())
+ os = _binding.getLocalOutputStream();
+
+ ObservableOutputStream oos = new ObservableOutputStream( os );
oos.addObservers(_observers);
_outputStream = oos;
}
-
return _outputStream;
}
}
Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java?rev=681222&r1=681221&r2=681222&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java Wed Jul 30 15:14:38 2008
@@ -84,9 +84,12 @@
*/
public RetrievalTarget( DefaultRetriever retriever, Binding binding, Set<Validator> validators, Set<StreamObserver> observers )
{
- if ( binding == null || binding.getRemoteResource() == null || binding.getLocalFile() == null )
+ if ( binding == null ||
+ (binding.getRemoteResource() == null) ||
+ (binding.isFile() && (binding.getLocalFile() == null)) ||
+ (binding.isInMemory() && (binding.getLocalOutputStream() == null)))
{
- throw new IllegalArgumentException( "No file to retrieve" );
+ throw new IllegalArgumentException( "Nothing to retrieve" );
}
_retriever = retriever;
_binding = binding;
@@ -101,24 +104,25 @@
_observers.add(o);
}
- _tempFile = new File( _binding.getLocalFile().getParentFile(),
- __PREFIX + _binding.getLocalFile().getName() + __TEMP_SUFFIX );
- _tempFile.deleteOnExit();
-
- // Create the directory if it doesn't exist
- if ( !_tempFile.getParentFile().exists() )
+ if (_binding.isFile())
{
- _tempFile.getParentFile().mkdirs();
- }
-
- if ( _tempFile.exists() )
- {
- onError( new HttpClientException( binding, "File exists " + _tempFile.getAbsolutePath() ) );
- }
- else if ( !_tempFile.getParentFile().canWrite() )
- {
- onError( new HttpClientException( binding,
- "Unable to write to dir " + _tempFile.getParentFile().getAbsolutePath() ) );
+ _tempFile = new File( _binding.getLocalFile().getParentFile(),
+ __PREFIX + _binding.getLocalFile().getName() + __TEMP_SUFFIX );
+ _tempFile.deleteOnExit();
+ if ( !_tempFile.getParentFile().exists() )
+ {
+ _tempFile.getParentFile().mkdirs();
+ }
+
+ if ( _tempFile.exists() )
+ {
+ onError( new HttpClientException( binding, "File exists " + _tempFile.getAbsolutePath() ) );
+ }
+ else if ( !_tempFile.getParentFile().canWrite() )
+ {
+ onError( new HttpClientException( binding,
+ "Unable to write to dir " + _tempFile.getParentFile().getAbsolutePath() ) );
+ }
}
}
@@ -155,7 +159,10 @@
/** Move the temporary file to its final location */
public boolean move()
{
- return _tempFile.renameTo( _binding.getLocalFile() );
+ if (_binding.isFile())
+ return _tempFile.renameTo( _binding.getLocalFile() );
+ else
+ return true;
}
/** Cleanup temp files */
@@ -263,7 +270,10 @@
return true;
}
- String ext = ( _binding.getLocalFile() == null ? null : _binding.getLocalFile().getName() );
+ String ext = _binding.getRemoteResource().toString();
+ if (ext.endsWith("/"))
+ ext = ext.substring(0, ext.length()-1);
+
int i = ext.lastIndexOf( "." );
ext = ( i > 0 ? ext.substring( i + 1 ) : "" );
@@ -274,9 +284,17 @@
{
try
{
- if ( !v.validate( _tempFile.getCanonicalPath(), errors ) )
+ if (_binding.isFile())
+ {
+ if ( !v.validate( _tempFile.getCanonicalPath(), errors ) )
+ {
+ return false;
+ }
+ }
+ else if (_binding.isInMemory())
{
- return false;
+ //TODO ????
+ //v.validate(_binding.getInboundContent())
}
}
catch ( IOException e )
Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java?rev=681222&r1=681221&r2=681222&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/transport/api/Binding.java Wed Jul 30 15:14:38 2008
@@ -22,6 +22,7 @@
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
+import java.io.OutputStream;
import java.net.URL;
import org.apache.maven.mercury.repository.api.RepositoryException;
@@ -125,6 +126,16 @@
return null;
}
+ public OutputStream getLocalOutputStream()
+ {
+ return localOS;
+ }
+
+ public InputStream getLocalInputStream()
+ {
+ return localIS;
+ }
+
public File getLocalFile ()
{
return localFile;
Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java?rev=681222&r1=681221&r2=681222&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java Wed Jul 30 15:14:38 2008
@@ -19,8 +19,13 @@
package org.apache.maven.mercury.spi.http.client;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStream;
@@ -392,4 +397,49 @@
Thread.sleep(500);
}
+ public void testMemoryDeployment () throws Exception
+ {
+ factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient
+ remoteServerType.setStreamObserverFactories(factories);
+ HashSet<Binding> bindings = new HashSet<Binding>();
+ DeployRequestImpl request = new DeployRequestImpl();
+
+ String s0 = "memory contents0";
+ InputStream is0 = new ByteArrayInputStream(s0.getBytes());
+ Binding binding0 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), is0);
+ bindings.add(binding0);
+
+ String s5 = "memory contents5";
+ InputStream is5 = new ByteArrayInputStream(s5.getBytes());
+ Binding binding5 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), is5);
+ bindings.add(binding5);
+
+ request.setBindings(bindings);
+ request.setFailFast(true);
+ DeployResponse response = _deployer.deploy(request);
+
+ //for (MercuryException t:response.getExceptions())
+ // t.printStackTrace();
+
+
+ assertEquals(0, response.getExceptions().size());
+
+
+ File f0 = new File(_putServer.getPutDir(), "file0.txt");
+ File f0cs = new File (_putServer.getPutDir(), "file0.txt.sha1");
+ assertTrue (f0.exists());
+ BufferedReader reader = new BufferedReader(new FileReader(f0));
+ String s = reader.readLine();
+ assertEquals(s0, s.trim());
+ assertTrue (f0cs.exists());
+
+ File f5 = new File(_putServer.getPutDir(), "file5.jpg");
+ File f5cs = new File (_putServer.getPutDir(), "file5.jpg.sha1");
+ assertTrue (f5.exists());
+ reader = new BufferedReader(new FileReader(f5));
+ s = reader.readLine();
+ assertEquals(s5, s.trim());
+ assertTrue (f5cs.exists());
+ }
+
}
Modified: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java?rev=681222&r1=681221&r2=681222&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java (original)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java Wed Jul 30 15:14:38 2008
@@ -19,7 +19,9 @@
package org.apache.maven.mercury.spi.http.client;
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.InputStream;
import java.net.URL;
import java.util.HashSet;
import java.util.List;
@@ -35,6 +37,7 @@
import org.apache.maven.mercury.transport.api.Binding;
import org.apache.maven.mercury.transport.api.Server;
import org.apache.maven.mercury.transport.api.StreamObserverFactory;
+import org.mortbay.util.IO;
public class JettyRetrieverTest extends TestCase
{
@@ -47,12 +50,6 @@
File file3;
File file4;
File file5;
- Binding binding0 = new Binding();
- Binding binding1 = new Binding();
- Binding binding2 = new Binding();
- Binding binding3 = new Binding();
- Binding binding4 = new Binding();
- Binding binding5 = new Binding();
DefaultRetriever retriever;
SimpleTestServer server;
Server remoteServerType;
@@ -450,4 +447,46 @@
assertTrue(!file4.exists());
assertTrue(!file5.exists());
}
+
+
+ public void testMemoryRetrieval () throws Exception
+ {
+ factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient
+ remoteServerType.setStreamObserverFactories(factories);
+
+ //make local dir to put stuff in
+ final File dir = mkTempDir();
+ DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+ HashSet<Binding> bindings = new HashSet<Binding>();
+ HashSet<Validator> validators = new HashSet<Validator>();
+ validators.add(new TxtValidator());
+ request.setValidators(validators);
+
+ Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"));
+ bindings.add(binding0);
+
+ Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"));
+ bindings.add(binding5);
+
+ request.setFailFast(false);
+
+ request.setBindings(bindings);
+ RetrievalResponse response = retriever.retrieve(request);
+
+ //for (MercuryException t:response.getExceptions())
+ // t.printStackTrace();
+
+ assertEquals(0,response.getExceptions().size());
+
+
+ InputStream is = this.getClass().getResourceAsStream("/testRepo/file0.txt");
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ IO.copy(is, os);
+ assertEquals(os.toByteArray().length, binding0.getInboundContent().length);
+
+ is = this.getClass().getResourceAsStream("/testRepo/file5.jpg");
+ os.reset();
+ IO.copy(is,os);
+ assertEquals(os.toByteArray().length, binding5.getInboundContent().length);
+ }
}