All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazon.s3.CallingFormat Maven / Gradle / Ivy

The newest version!
//  This software code is made available "AS IS" without warranties of any
//  kind.  You may copy, display, modify and redistribute the software
//  code either by itself or as incorporated into your code; provided that
//  you do not remove any proprietary notices.  Your use of this software
//  code is at your own risk and you waive any claim against Amazon
//  Digital Services, Inc. or its affiliates with respect to your use of
//  this software code. (c) 2006-2007 Amazon Digital Services, Inc. or its
//  affiliates.

package com.amazon.s3;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;

public abstract class CallingFormat {
    
    protected static CallingFormat pathCallingFormat = new PathCallingFormat();
    protected static CallingFormat subdomainCallingFormat = new SubdomainCallingFormat();
    protected static CallingFormat vanityCallingFormat = new VanityCallingFormat();
    
    public abstract boolean supportsLocatedBuckets();
    public abstract String getEndpoint(String server, int port, String bucket);
    public abstract String getPathBase(String bucket, String key);
    public abstract URL getURL (boolean isSecure, String server, int port, String bucket, String key, Map pathArgs)
        throws MalformedURLException;
    
    public static CallingFormat getPathCallingFormat() {
        return pathCallingFormat;
    }
    
    public static CallingFormat getSubdomainCallingFormat() {
        return subdomainCallingFormat;
    }
    
    public static CallingFormat getVanityCallingFormat() {
        return vanityCallingFormat;
    }
    
    static private class PathCallingFormat extends CallingFormat {
        public boolean supportsLocatedBuckets() { 
            return false; 
        }
        
        public String getPathBase(String bucket, String key) {
            return isBucketSpecified(bucket) ? "/" + bucket + "/" + key : "/";
        }
        
        public String getEndpoint(String server, int port, String bucket) {
            return server + ":" + port;
        }
        
        public URL getURL(boolean isSecure, String server, int port, String bucket, String key, Map pathArgs) 
        throws MalformedURLException {
           String pathBase = isBucketSpecified(bucket) ? "/" + bucket + "/" + key : "/";
           String pathArguments = Utils.convertPathArgsHashToString(pathArgs);
           return new URL(isSecure ? "https": "http", server, port, pathBase + pathArguments);
        }

        private boolean isBucketSpecified(String bucket) {
            if(bucket == null) return false;
            if(bucket.length() == 0) return false;
            return true;
        }
    }

    static private class SubdomainCallingFormat extends CallingFormat {
        public boolean supportsLocatedBuckets() { 
            return true; 
        }

        public String getServer(String server, String bucket) {
            return bucket + "." + server;
        }
        public String getEndpoint(String server, int port, String bucket) {
            return getServer(server, bucket) + ":" + port ;
        }
        public String getPathBase(String bucket, String key) {
            return "/" + key;
        }
        
        public URL getURL(boolean isSecure, String server, int port, String bucket, String key, Map pathArgs) 
        throws MalformedURLException {
            if (bucket == null || bucket.length() == 0)
            {
                //The bucket is null, this is listAllBuckets request
                String pathArguments = Utils.convertPathArgsHashToString(pathArgs);
                return new URL(isSecure ? "https": "http", server, port, "/" + pathArguments);
            } else {
                String serverToUse = getServer(server, bucket);
                String pathBase = getPathBase(bucket, key);
                String pathArguments = Utils.convertPathArgsHashToString(pathArgs);
                return new URL(isSecure ? "https": "http", serverToUse, port, pathBase + pathArguments);
            }
        }
    }

    static private class VanityCallingFormat extends SubdomainCallingFormat {
        public String getServer(String server, String bucket) {
            return bucket;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy