org.cloudifysource.s3client.S3AWSAPIDeployMojo.java Source code

Java tutorial

Introduction

Here is the source code for org.cloudifysource.s3client.S3AWSAPIDeployMojo.java

Source

/*******************************************************************************
 * Copyright (c) 2011 GigaSpaces Technologies Ltd. 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 org.cloudifysource.s3client;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.PutObjectRequest;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.jclouds.blobstore.BlobStoreContext;

import java.io.File;

/**
 * Deploy to S3 storage
 * 
 * @goal deploy-native
 * @aggregator true
 */
public class S3AWSAPIDeployMojo extends AbstractMojo {

    /**
     * The S3 user
     * 
     * @parameter
     *  expression="${put.user}"
     *  default-value=""
     */
    private String user;

    /**
     * The S3 key
     * 
     * @parameter
     *  expression="${put.key}"
     *  default-value=""
     */
    private String key;

    /**
     * The file to put
     *
     * @parameter
     *  expression="${put.source}"
     *  type="java.io.File"
     *  default-value=""
     */
    private File source;

    /**
     * The target path of the blob
     *
     * @parameter
     *  expression="${put.target}"
     *  default-value=""
     */
    private String target;

    /**
     * The containter to put into
     * 
     * @parameter 
     *  expression="${put.container}" 
     *  default-value=""
     */
    private String container;

    /**
     * Should the blob have a public url
     * 
     * @parameter 
     *  expression="${put.publicUrl}" 
     *  default-value=""
     */
    private String publicUrl;

    /**
     * @parameter default-value="${project}"
     * @required
     * @readonly
     */
    MavenProject project;

    public void execute() throws MojoExecutionException, MojoFailureException {
        BlobStoreContext context = null;

        try {
            getLog().info("Using aws-sdk-java");
            AWSCredentials awsCredentials = new BasicAWSCredentials(user, key);
            AmazonS3 s3 = new AmazonS3Client(awsCredentials);

            uploadFile(s3, container, target, source);

        } catch (Exception e) {
            throw new MojoFailureException("Failed put operation", e);
        } finally {
            if (context != null) {
                context.close();
            }
        }

    }

    private void uploadFile(AmazonS3 s3, String container, String target, File source) throws MojoFailureException {
        if (source.isDirectory()) {
            for (File f : source.listFiles()) {
                uploadFile(s3, container, target + "/" + f.getName(),
                        new File(source.getPath() + "/" + f.getName()));
            }
        } else {
            getLog().info(
                    "Processing " + source + ", upload size is: " + (source).length() + ". Target: " + target);
            s3.putObject(new PutObjectRequest(container, target, source)
                    .withCannedAcl(CannedAccessControlList.PublicRead));
            getLog().info("Upload of " + source + " was ended successfully");

        }
    }
}