//2012-06-01 johnpfeiffer requires jets3t-0.9.0 , Apache: log4j-1.2.16 , commons-codec-1.4 , commons-logging-1.1.1, httpclient, httpcore
// TODO: set HTTPS port if it's set to true
// TODO: testcases, negative results max
//delimiters and keys http://docs.amazonwebservices.com/AmazonS3/latest/dev/ListingKeysHierarchy.html
//http://logging.apache.org/log4j/1.2/manual.html
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.jets3t.service.Jets3tProperties;
import org.jets3t.service.S3ServiceException;
import org.jets3t.service.ServiceException;
import org.jets3t.service.StorageObjectsChunk;
import org.jets3t.service.impl.rest.httpclient.RestS3Service;
import org.jets3t.service.model.S3Bucket;
import org.jets3t.service.model.StorageObject;
import org.jets3t.service.security.AWSCredentials;
import org.jets3t.service.security.ProviderCredentials;
public class S3List
{
static Logger rootLogger = Logger.getRootLogger();
public static void main(String[] args)
{
if( !rootLogger.getAllAppenders().hasMoreElements() )
{ rootLogger.setLevel( Level.INFO );
rootLogger.addAppender( new ConsoleAppender( new PatternLayout( "%m%n" ) ) );
}
CommandLineParameterRequirements required = new CommandLineParameterRequirements( 7 , args.length + " is the incorrect parameter count, version 0.1: java -jar S3List s3.amazonaws.com 80 false ACCESSKEY SECRETKEY bucketName resultsMax" );
if( args.length != required.getRequiredCount() )
{ rootLogger.error( required.getErrorMessage() );
System.exit( 1 );
}
Jets3tProperties jets3tProperties = new Jets3tProperties ();
String endpoint = args[0];
String port = args[1];
String ssl = args[2];
String awsAccessKey = args[3];
String awsSecretKey = args[4];
String bucketName = args[5];
long maxListingSize;
try{
maxListingSize = Long.parseLong( args[6] );
}catch( NumberFormatException nfe )
{ throw new IllegalArgumentException( "ERROR: the maxListingSize must be a digit." );
}
jets3tProperties.setProperty( "s3service.s3-endpoint" , endpoint );
jets3tProperties.setProperty( "s3service.s3-endpoint-http-port" , port );
jets3tProperties.setProperty( "s3service.s3-endpoint-https-port" , port );
jets3tProperties.setProperty( "s3service.https-only" , ssl );
ProviderCredentials providerCredentials = new AWSCredentials( awsAccessKey , awsSecretKey );
S3Bucket currentBucket = null;
RestS3Service s3Service = null;
try{
s3Service = new RestS3Service( providerCredentials , null , null , jets3tProperties );
}catch( S3ServiceException e )
{ e.printStackTrace();
}
rootLogger.info( "Listing " + maxListingSize + " objects in " + bucketName + " from " + endpoint );
try{
currentBucket = s3Service.getBucket( bucketName );
if( currentBucket == null )
{ rootLogger.error( "Could not get bucket: " + bucketName );
}else
{
String prefix = "";
String delimiter = null; // way to filter out , i.e. /USA/CA/Carmel using filter '/' would return the object with key Carmel
String priorLastKey = null;
boolean completeListing = false; //if set to true it will ignore listing length
StorageObjectsChunk buffer = null;
buffer = s3Service.listObjectsChunked( bucketName , prefix , delimiter , maxListingSize , priorLastKey , completeListing );
StorageObject[] results = buffer.getObjects();
if( results == null || results.length == 0 )
{ rootLogger.warn( "No results found with prefix: " + prefix + " from " + bucketName );
}else
for( int i=0; i<results.length; i++ )
{ rootLogger.info( results[i].getKey() );
}
}
}catch( S3ServiceException s3e )
{ s3e.printStackTrace();
}catch( ServiceException se )
{ se.printStackTrace();
}catch( Exception e )
{ e.printStackTrace();
}
}
} //end class