Package com.cloud.bridge.tool

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

// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you 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;

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.