Author: jdcasey Date: Thu Jul 26 15:42:00 2007 New Revision: 560022 URL: http://svn.apache.org/viewvc?view=rev&rev=560022 Log: (empty)
Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Location.java maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java?view=diff&rev=560022&r1=560021&r2=560022 ============================================================================== --- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java (original) +++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java Thu Jul 26 15:42:00 2007 @@ -3,6 +3,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; @@ -14,13 +15,14 @@ private File file; private FileChannel channel; private final String specification; - + private FileInputStream stream; + public FileLocation( File file, String specification ) { this.file = file; this.specification = specification; } - + protected FileLocation( String specification ) { this.specification = specification; @@ -28,7 +30,7 @@ public void close() { - if ( channel != null && channel.isOpen() ) + if ( ( channel != null ) && channel.isOpen() ) { try { @@ -38,17 +40,29 @@ { //swallow it. } - } + } + + if ( stream != null ) + { + try + { + stream.close(); + } + catch( IOException e ) + { + // swallow it. + } + } } public File getFile() throws IOException { initFile(); - + return unsafeGetFile(); } - + protected File unsafeGetFile() { return file; @@ -63,14 +77,14 @@ file = new File( specification ); } } - + protected void setFile( File file ) { if ( channel != null ) { - throw new IllegalStateException( "Location is already open; cannot setFile(..)." ); + throw new IllegalStateException( "Location is already open; cannot setFile(..)." ); } - + this.file = file; } @@ -82,21 +96,34 @@ public void open() throws IOException { - initFile(); - - channel = new FileInputStream( file ).getChannel(); + if ( stream == null ) + { + initFile(); + + stream = new FileInputStream( file ); + channel = stream.getChannel(); + } } public int read( ByteBuffer buffer ) throws IOException { + open(); return channel.read( buffer ); } public int read( byte[] buffer ) throws IOException { + open(); return channel.read( ByteBuffer.wrap( buffer ) ); + } + + public InputStream getInputStream() + throws IOException + { + open(); + return stream; } } Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Location.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Location.java?view=diff&rev=560022&r1=560021&r2=560022 ============================================================================== --- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Location.java (original) +++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Location.java Thu Jul 26 15:42:00 2007 @@ -2,21 +2,24 @@ import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.nio.ByteBuffer; public interface Location { - + File getFile() throws IOException; - + void open() throws IOException; - + void close(); - + int read( ByteBuffer buffer ) throws IOException; - + int read( byte[] buffer ) throws IOException; - + + InputStream getInputStream() throws IOException; + String getSpecification(); } Modified: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java?view=diff&rev=560022&r1=560021&r2=560022 ============================================================================== --- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java (original) +++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java Thu Jul 26 15:42:00 2007 @@ -1,129 +1,152 @@ package org.apache.maven.shared.io.location; +import org.apache.maven.shared.io.TestUtils; +import org.codehaus.plexus.util.IOUtil; + import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.io.StringWriter; import java.nio.ByteBuffer; -import org.apache.maven.shared.io.TestUtils; - import junit.framework.TestCase; public class FileLocationTest extends TestCase { - + public void testShouldConstructWithFileThenRetrieveSameFile() throws IOException { File file = File.createTempFile( "test.", ".file-location" ); file.deleteOnExit(); - + FileLocation location = new FileLocation( file, file.getAbsolutePath() ); - + assertSame( file, location.getFile() ); assertEquals( file.getAbsolutePath(), location.getSpecification() ); } - + public void testShouldReadFileContentsUsingByteBuffer() throws IOException { File file = File.createTempFile( "test.", ".file-location" ); file.deleteOnExit(); - + String testStr = "This is a test"; - + TestUtils.writeToFile( file, testStr ); - + FileLocation location = new FileLocation( file, file.getAbsolutePath() ); - + location.open(); - + ByteBuffer buffer = ByteBuffer.allocate( testStr.length() ); location.read( buffer ); - + assertEquals( testStr, new String( buffer.array() ) ); } - + + public void testShouldReadFileContentsUsingStream() throws IOException + { + File file = File.createTempFile( "test.", ".file-location" ); + file.deleteOnExit(); + + String testStr = "This is a test"; + + TestUtils.writeToFile( file, testStr ); + + FileLocation location = new FileLocation( file, file.getAbsolutePath() ); + + location.open(); + + InputStream stream = location.getInputStream(); + StringWriter writer = new StringWriter(); + IOUtil.copy( stream, writer ); + + assertEquals( testStr, writer.toString() ); + } + public void testShouldReadFileContentsUsingByteArray() throws IOException { File file = File.createTempFile( "test.", ".file-location" ); file.deleteOnExit(); - + String testStr = "This is a test"; - + TestUtils.writeToFile( file, testStr ); - + FileLocation location = new FileLocation( file, file.getAbsolutePath() ); - + location.open(); - + byte[] buffer = new byte[ testStr.length() ]; location.read( buffer ); - + assertEquals( testStr, new String( buffer ) ); } - + public void testShouldReadThenClose() throws IOException { File file = File.createTempFile( "test.", ".file-location" ); file.deleteOnExit(); - + String testStr = "This is a test"; - + TestUtils.writeToFile( file, testStr ); - + FileLocation location = new FileLocation( file, file.getAbsolutePath() ); - + location.open(); - + byte[] buffer = new byte[ testStr.length() ]; location.read( buffer ); - + assertEquals( testStr, new String( buffer ) ); - + location.close(); } - + public void testShouldOpenThenFailToSetFile() throws IOException { File file = File.createTempFile( "test.", ".file-location" ); file.deleteOnExit(); - + TestFileLocation location = new TestFileLocation( file.getAbsolutePath() ); - + location.open(); - + try { location.setFile( file ); - + fail( "should not succeed." ); } catch( IllegalStateException e ) { } } - + public void testShouldConstructWithoutFileThenSetFileThenOpen() throws IOException { File file = File.createTempFile( "test.", ".file-location" ); file.deleteOnExit(); - + TestFileLocation location = new TestFileLocation( file.getAbsolutePath() ); - + location.setFile( file ); location.open(); } - + public void testShouldConstructWithLocationThenRetrieveEquivalentFile() throws IOException { File file = File.createTempFile( "test.", ".file-location" ); file.deleteOnExit(); - + Location location = new TestFileLocation( file.getAbsolutePath() ); - + assertEquals( file, location.getFile() ); assertEquals( file.getAbsolutePath(), location.getSpecification() ); } - + private static final class TestFileLocation extends FileLocation { @@ -131,7 +154,7 @@ { super( specification ); } - + } }