/*
* See COPYING for license information.
*/
package com.rackspacecloud.client.cloudfiles.sample;
import java.io.IOException;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.ParseException;
import org.apache.commons.lang.StringUtils;
// import org.apache.log4j.Logger;
import org.apache.http.HttpException;
import com.rackspacecloud.client.cloudfiles.*;
import java.util.*;
/*
* TODO: Add List Metadata for all objects as a switch on the all
* TODO: Add list Metadata for one object as a switch on a specific object of a container
* TODO: Add list specific Objects of a container
*/
public class FilesList
{
// private static Logger logger = Logger.getLogger(List.class);
public static void main (String args[])
{
//Build the command line options
Options options = addCommandLineOptions ();
if (args.length <= 0)
printHelp (options);
CommandLineParser parser = new GnuParser();
try
{
// parse the command line arguments
CommandLine line = parser.parse( options, args );
if (line.hasOption("help"))
printHelp (options);
if (line.hasOption("containersOnly"))
{
if (line.hasOption("H"))
printContainers (true);
else
printContainers (false);
}
else if (line.hasOption("all"))
{
if (line.hasOption("H"))
printContainersAll (true);
else
printContainersAll (false);
}//if (line.hasOption("all"))
else if (line.hasOption("container"))
{
String containerName = line.getOptionValue("container");
if (StringUtils.isNotBlank(containerName))
{
if (line.hasOption("H"))
printContainer (containerName, true);
else
printContainer (containerName, false);
}
}//if (line.hasOption("container"))
else if (line.hasOption("H"))
{
System.out.println ("This option needs to be used in conjunction with another option that lists objects or container.");
}
}
catch( ParseException err )
{
System.err.println( "Please see the logs for more details. Error Message: "+err.getMessage() );
err.printStackTrace(System.err);
}//catch( ParseException err )
catch( HttpException err )
{
System.err.println( "Please see the logs for more details. Error Message: "+err.getMessage() );
err.printStackTrace(System.err);
}//catch( ParseException err )
catch ( IOException err)
{
System.err.println( "Please see the logs for more details. Error Message: "+err.getMessage() );
}//catch ( IOException err)
}
private static void printContainer (String containerName, boolean humanReadable) throws IOException, HttpException, FilesException
{
boolean notFound = true;
FilesClient client = new FilesClient();
if ( client.login() )
{
List<FilesContainer> containers = client.listContainers();
System.out.println (client.getAccount() + " containers: ");
for (FilesContainer value: containers )
{
if (value.getName().equalsIgnoreCase(containerName))
{
notFound = false;
FilesContainerInfo info = value.getInfo();
System.out.println ("\t"+value.getName ()+" - "+info.getObjectCount()+" objects:");
List<FilesObject> objects = value.getObjects();
for (FilesObject obj: objects)
{
if (humanReadable)
System.out.println ("\t\t"+StringUtils.rightPad(obj.getName (), 35) + obj.getSizeString());
else
System.out.println ("\t\t"+StringUtils.rightPad(obj.getName (), 35) + obj.getSize()+" Bytes");
}
if (humanReadable)
{
System.out.println ("\tTotal Size: "+info.getTotalSize()/1024+"KB\n");
}
else
System.out.println ("\tTotal Size: "+info.getTotalSize()+"Bytes\n");
}//if (value.getName().equalsIgnoreCase(containerName))
else
notFound = true;
}//end for
if (notFound)
System.out.println ("Container: "+containerName +" was not found !");
}
}//end private static void printContainersAndContent () throws IOException, HttpException, FilesAuthorizationException
private static void printContainersAll (boolean humanReadable) throws IOException, HttpException, FilesException
{
FilesClient client = new FilesClient();
if ( client.login() )
{
List<FilesContainer> containers = client.listContainers();
System.out.println (client.getAccount() + " containers: ");
for (FilesContainer value: containers )
{
FilesContainerInfo info = value.getInfo();
System.out.println ("\t"+value.getName ()+" - "+info.getObjectCount()+" objects:");
List<FilesObject> objects = value.getObjects();
for (FilesObject obj: objects)
{
if (humanReadable)
System.out.println ("\t\t"+StringUtils.rightPad(obj.getName (), 35) + obj.getSizeString());
else
System.out.println ("\t\t"+StringUtils.rightPad(obj.getName (), 35) + obj.getSize()+"Bytes");
}
if (humanReadable)
{
System.out.println ("\tTotal Size: "+info.getTotalSize()/1024+"KB\n");
}
else
System.out.println ("\tTotal Size: "+info.getTotalSize()+"Bytes\n");
}
}
}//end private static void printContainersAndContent () throws IOException, HttpException, FilesAuthorizationException
private static void printContainers (boolean humanReadable) throws IOException, HttpException, FilesException
{
FilesClient client = new FilesClient();
if ( client.login() )
{
List<FilesContainer> containers = client.listContainers();
System.out.println (client.getAccount() + " containers: ");
for (FilesContainer value: containers )
{
FilesContainerInfo info = value.getInfo();
System.out.println ("\t"+value.getName ()+" - "+info.getObjectCount()+" objects:");
if (humanReadable)
{
System.out.println ("\tTotal Size: "+ getSizeString (info.getTotalSize())+"\n");
}
else
System.out.println ("\tTotal Size: "+info.getTotalSize()+"Bytes\n");
}
}
}//end private static void printContainers ()
private static void printHelp (Options options)
{
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp( "FilesList", options );
}//private static void printHelp ()
@SuppressWarnings("static-access")
private static Options addCommandLineOptions ()
{
Option help = new Option( "help", "print this message" );
Option containersOnly = OptionBuilder.hasArg (false)
.withDescription ("Show ONLY Containers in account. No Object information is provided.")
.create ("containersOnly");
Option containers = OptionBuilder.hasArg (false)
.withDescription ("Show Containers and their objects in this account")
.create ("all");
Option container = OptionBuilder.withArgName("container")
.hasArg (true)
.withDescription ("Show Containers and their objects in this account")
.create ("container");
Option kb = new Option ("H","humanReadable", false, "Show size of objects in human readable form. On its own this has no meaning and needs to be used in conjuction to a command that provides size of objects and containers");
Options options = new Options();
options.addOption(containersOnly);
options.addOption(containers);
options.addOption(container);
options.addOption(kb);
options.addOption(help);
return options;
}
public static String getSizeString (long size)
{
long kb = 1024;
long mb = 1024*1024;
long gb = 1024*1024*1024;
//KB
if (size > gb)
return (size/gb) + "GB";
else if (size > mb)
return (size/mb)+"MB";
else if (size > kb)
return (size/kb) +"KB";
else
return size+"Bytes";
}
}