Package com.cloud.bridge.tool

Source Code of com.cloud.bridge.tool.CloudS3CmdTool

/*
* Copyright (C) 2011 Citrix Systems, Inc.  All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.cloud.bridge.tool;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import javax.activation.DataHandler;

import org.apache.axis2.AxisFault;
import org.apache.log4j.xml.DOMConfigurator;

import com.amazon.s3.client.AmazonS3Stub;
import com.amazon.s3.client.AmazonS3Stub.CreateBucket;
import com.amazon.s3.client.AmazonS3Stub.CreateBucketResponse;
import com.amazon.s3.client.AmazonS3Stub.DeleteBucket;
import com.amazon.s3.client.AmazonS3Stub.DeleteBucketResponse;
import com.amazon.s3.client.AmazonS3Stub.DeleteObject;
import com.amazon.s3.client.AmazonS3Stub.DeleteObjectResponse;
import com.amazon.s3.client.AmazonS3Stub.ListBucket;
import com.amazon.s3.client.AmazonS3Stub.ListBucketResponse;
import com.amazon.s3.client.AmazonS3Stub.ListBucketResult;
import com.amazon.s3.client.AmazonS3Stub.ListEntry;
import com.amazon.s3.client.AmazonS3Stub.PrefixEntry;
import com.amazon.s3.client.AmazonS3Stub.PutObjectInline;
import com.amazon.s3.client.AmazonS3Stub.PutObjectInlineResponse;
import com.amazon.s3.client.AmazonS3Stub.Status;

/**
* @author Kelven Yang
*/
public class CloudS3CmdTool {
  private String serviceUrl;
 
    private AmazonS3Stub serviceStub;
   
  private static void configLog4j() {
    URL configUrl = System.class.getResource("/conf/log4j-cloud-bridge.xml");
    if(configUrl == null)
      configUrl = ClassLoader.getSystemResource("log4j-cloud-bridge.xml");
   
    if(configUrl == null)
      configUrl = ClassLoader.getSystemResource("conf/log4j-cloud-bridge.xml");
     
    if(configUrl != null) {
      try {
        System.out.println("Configure log4j using " + configUrl.toURI().toString());
      } catch (URISyntaxException e1) {
        e1.printStackTrace();
      }

      try {
        File file = new File(configUrl.toURI());
       
        System.out.println("Log4j configuration from : " + file.getAbsolutePath());
        DOMConfigurator.configureAndWatch(file.getAbsolutePath(), 10000);
      } catch (URISyntaxException e) {
        System.out.println("Unable to convert log4j configuration Url to URI");
      }
    } else {
      System.out.println("Configure log4j with default properties");
    }
  }
 
  private static Map<String, String> getNamedParameters(String[] args) {
    Map<String, String> params = new HashMap<String, String>();
    for(int i = 1; i < args.length; i++) {
      if(args[i].charAt(0) == '-') {
        String[] tokens = args[i].substring(1).split("=");
        if(tokens.length == 2) {
          params.put(tokens[0], tokens[1]);
        }
      }
    }
   
    return params;
  }
 
  private static boolean validateNamedParameters(Map<String, String> params, String... keys) {
    for(String key : keys) {
      if(params.get(key) == null || params.get(key).isEmpty())
        return false;
    }
    return true;
  }
 
  public static void main(String[] args) {
    configLog4j();
    (new CloudS3CmdTool()).run(args);
  }
 
  private void run(String[] args) {
    Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
          if(envName.equals("CLOUD_SERVICE_URL"))
            serviceUrl = env.get(envName);
        }
       
        if(serviceUrl == null) {
          System.out.println("Please set CLOUD_SERVICE_URL environment variable");
          System.exit(0);
        }
       
        if(args.length < 1) {
          System.out.println("Please specify a command to run");
          System.exit(0);
        }
       
        try {
      serviceStub = new AmazonS3Stub(serviceUrl);
    } catch (AxisFault e) {
      System.out.println("Unable to initialize service stub");
      e.printStackTrace();
      System.exit(0);
    }

    // command dispatch
    if(args[0].equals("bucket-create")) {
      createBucket(args);
    } else if(args[0].equals("bucket-delete")) {
      deleteBucket(args);
    } else if(args[0].equals("bucket-list")) {
      listBucket(args);
    } else if(args[0].equals("object-put-inline")) {
      putObjectInline(args);
    } else if(args[0].equals("object-delete")) {
      deleteObject(args);
    }
  }
 
  private void createBucket(String[] args) {
    if(args.length < 2) {
      System.out.println("Usage: bucket-create <bucket-name>");
      System.exit(0);
    }
   
      try {
        CreateBucket bucket = new CreateBucket();
        bucket.setBucket(args[1]);
        bucket.setAWSAccessKeyId( "TODO1" );
        bucket.setSignature("TODO2");
        bucket.setTimestamp(Calendar.getInstance());
       
        CreateBucketResponse response = serviceStub.createBucket(bucket);
        System.out.println("Bucket " + response.getCreateBucketReturn().getBucketName() + " has been created successfully");
      } catch(Exception e) {
        System.out.println("Failed to execute bucket-create due to " + e.getMessage());
      }
  }
 
  private void deleteBucket(String[] args) {
    if(args.length < 2) {
      System.out.println("Usage: bucket-delete <bucket-name>");
      System.exit(0);
    }
   
      try {
        DeleteBucket request = new DeleteBucket();
        request.setBucket(args[1]);
        request.setSignature("TODO");
        request.setTimestamp(Calendar.getInstance());
       
        DeleteBucketResponse response = serviceStub.deleteBucket(request);
        Status status = response.getDeleteBucketResponse();
        if(status.getCode() == 200) {
          System.out.println("Bucket " + args[1] + " has been deleted successfully");
        } else {
          System.out.println("Unable to delete bucket " + args[1] + " - " + status.getDescription());
        }
      } catch(Exception e) {
        System.out.println("Failed to execute bucket-delete due to " + e.getMessage());
      }
  }
 
  private void listBucket(String[] args) {
    if(args.length < 2) {
      System.out.println("Usage: bucket-list -prefix=<prefix> -delimiter=<delimiter> -marker=<Marker> -max=<max items to return> <bucket name>");
      System.exit(0);
    }
   
      try {
        ListBucket request = new ListBucket();
        Map<String, String> params = getNamedParameters(args);
       
        request.setBucket(args[args.length - 1]);
        request.setCredential("TODO");
        if(params.get("prefix") != null)
          request.setPrefix(params.get("prefix"));
        if(params.get("delimiter") != null)
          request.setDelimiter(params.get("delimiter"));
        if(params.get("marker") != null)
          request.setMarker(params.get("marker"));
        if(params.get("max") != null) {
          try {
            int maxKeys = Integer.parseInt(params.get("max"));
              request.setMaxKeys(maxKeys);
          } catch(Exception e){
            System.out.println("-max parameter should be a numeric value");
          }
        }
      request.setAWSAccessKeyId("TODO");
      request.setCredential("TODO");
      request.setSignature("TODO");
      request.setTimestamp(Calendar.getInstance());
     
      ListBucketResponse response = serviceStub.listBucket(request);
      ListBucketResult result = response.getListBucketResponse();
      System.out.println("\tContent of Bucket " + result.getName());
      System.out.println("\tListing with prefix: " + result.getPrefix() + ", delimiter: "
        + result.getDelimiter() + ", marker: " + result.getMarker() + ", max: " + result.getMaxKeys());
     
      ListEntry[] entries = result.getContents();
      if(entries != null) {
        for(int i = 0; i < entries.length; i++) {
          ListEntry entry = entries[i];
          System.out.print("\t");
          System.out.print(entry.getSize());
          System.out.print("\t");
          System.out.print(entry.getKey());
          System.out.print("\t");
          System.out.print(entry.getETag());
          System.out.print("\n");
        }
      }
     
      PrefixEntry[] prefixEntries = result.getCommonPrefixes();
      if(prefixEntries != null) {
        System.out.print("\n\n");
       
        for(int i = 0; i < prefixEntries.length; i++) {
          System.out.print("\t<Prefix>\t");
          System.out.print(prefixEntries[i].getPrefix());
          System.out.print("\n");
        }
      }
      } catch(Exception e) {
        System.out.println("Failed to execute bucket-list due to " + e.getMessage());
      }
  }
 
  private void putObjectInline(String[] args) {
    if(args.length < 4) {
      System.out.println("Usage: object-put-inline -bucket=<bucket name> -name=<object name> <path to the file>");
      System.exit(0);
    }
   
    Map<String, String> params = getNamedParameters(args);
    if(!validateNamedParameters(params, "bucket", "name")) {
      System.out.println("Usage: object-put-inline -bucket=<bucket name> -name=<object name> <path to the file>");
      System.exit(0);
    }
   
    File file = new File(args[args.length -1]);
    if(!file.exists()) {
      System.out.println("Unable to find file " + args[args.length -1]);
      System.exit(0);
    }
   
    try {
      PutObjectInline request = new PutObjectInline();
      request.setBucket(params.get("bucket"));
      request.setKey(params.get("name"));
      request.setContentLength(file.length());
      request.setAWSAccessKeyId("TODO");
      request.setCredential("TODO");
      request.setSignature("TODO");
      request.setTimestamp(Calendar.getInstance());
      request.setData(new DataHandler(file.toURL()));
     
      PutObjectInlineResponse response = serviceStub.putObjectInline(request);
        System.out.println("Object has been posted successfully. ETag: " + response.getPutObjectInlineResponse().getETag());
    } catch(Exception e) {
        System.out.println("Failed to execute object-put-inline due to " + e.getMessage());
    }
  }
 
  private void deleteObject(String[] args) {
    if(args.length < 3) {
      System.out.println("Usage: object-delete -bucket=<bucket name> -name=<object name>");
      System.exit(0);
    }
   
    Map<String, String> params = getNamedParameters(args);
    if(!validateNamedParameters(params, "bucket", "name")) {
      System.out.println("Usage: object-delete -bucket=<bucket name> -name=<object name>");
      System.exit(0);
    }
   
    try {
      DeleteObject request = new DeleteObject();
      request.setAWSAccessKeyId("TODO");
      request.setBucket(params.get("bucket"));
      request.setKey(params.get("name"));
      request.setSignature("TODO");
      request.setCredential("TODO");
      request.setTimestamp(Calendar.getInstance());
     
      DeleteObjectResponse response = serviceStub.deleteObject(request);
      if(response.getDeleteObjectResponse().getCode() == 200)
        System.out.println("Object " + params.get("name") + " has been deleted successfully");
      else
        System.out.println("Object " + params.get("name") + " can not be deleted. Error: "
          + response.getDeleteObjectResponse().getCode());
    } catch(Exception e) {
        System.out.println("Failed to execute object-delete due to " + e.getMessage());
    }
  }
}
TOP

Related Classes of com.cloud.bridge.tool.CloudS3CmdTool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.