/*
* Copyright [2013] [Cloud4SOA, www.cloud4soa.eu]
*
*
* 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 beanstalk;
//import eu.cloud4soa.api.util.exception.adapter.BeanstalkAdapterException;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.cloudwatch.model.InvalidParameterValueException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.ProgressEvent;
import com.amazonaws.services.s3.model.ProgressListener;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.Upload;
import java.io.IOException;
public class BeanstalkFirstDeploymentNoGUI {
private AWSCredentials credentials;
private TransferManager tx;
private String bucketName;
// private static String local_filename_and_path;
private JProgressBar pb;
private JFrame frame;
private Upload upload;
private JButton button;
private boolean uploaded_to_s3 = false;
private boolean version_updated = false;
private String war_name_on_s3;
private String accessKeyId;
private String secretAccessKey;
private String appversion;
private String appname;
private String environment_name;
private String host_name;
public boolean deploy(String war, String AWSKeyId, String AWSSecretKey, String applicationname, String applicationversion,
String environment,String bucket, String host) throws BeanstalkAdapterException {
boolean ret=false;
// credentials = new PropertiesCredentials(BeanstalkDeploy.class.getResourceAsStream("AwsCredentials.properties"))
BasicAWSCredentials basic_credentials = new BasicAWSCredentials(AWSKeyId, AWSSecretKey);
// TransferManager manages a pool of threads, so we create a
// single instance and share it throughout our application.
tx = new TransferManager(basic_credentials);
appname=applicationname;
appversion=applicationversion;
accessKeyId=AWSKeyId;
secretAccessKey=AWSSecretKey;
bucketName=bucket;
environment_name=environment;
host_name=host;
war_name_on_s3=war;
//STEP 1: UPLOAD
//STEP 2: CREATE APP VERSION
//STEP 3: DEPLOY
//TODO
//take war file path from args
//local_filename_and_path ="../sdsdsds/sts.war";
actionPerformed(war_name_on_s3, accessKeyId, secretAccessKey, appname, appversion, environment_name, bucketName, host_name);
return ret;
}
//version for cli
public BeanstalkFirstDeploymentNoGUI(String[] args) throws Exception {
}
//version for lib. if true, jframe for choosing file and a loading bar will be shown
public BeanstalkFirstDeploymentNoGUI(Boolean getJframe){
}
// class ButtonListener implements ActionListener {
public void actionPerformed(String war, String AWSKeyId, String AWSSecretKey, String applicationname, String applicationversion,
String environment,String bucket, String host) throws BeanstalkAdapterException{
///////////////////////////
File tmp=new File(war);
war_name_on_s3=tmp.getName();
// try {
upload_file_to_s3(bucket, war_name_on_s3, war, AWSKeyId, AWSSecretKey);
//} catch (IOException ex) {
// Logger.getLogger(BeanstalkDeployNoGUI.class.getName()).log(Level.SEVERE, null, ex);
//}
uploaded_to_s3 = true;
//TODO if update it must not be called
//if bucket does not exist create
createAmazonS3Bucket();
//TODO. better take name from s3 not local
// war_name_on_s3 = fileChooser.getSelectedFile().getName();
System.out.println("war_name_on_s3=" + war_name_on_s3);
//arkoudia wait
System.out.println("Starting......");
// pause for a while
Thread thisThread = Thread.currentThread();
try {
thisThread.sleep(15000);
} catch (Throwable t) {
throw new OutOfMemoryError("An Error has occured");
}
System.out.println("Ending......");
//end arkoudias wait
////////////////////////////////////starting CreateApplicationVersion
if (uploaded_to_s3 == true) {
System.out.println("starting CreateApplicationVersion");
System.out.println("accessKeyId" + accessKeyId);
System.out.println("secretAccessKey" + secretAccessKey);
System.out.println("war_name_on_s3" + war_name_on_s3);
System.out.println("bucketName" + bucketName);
System.out.println("appname" + appname);
System.out.println("appversion" + appversion);
//CREATE APPLICATION - NO VERSION, NO WAR
BeansCreateApplication bst_createapp = new BeansCreateApplication();
try {
bst_createapp.creatapp(accessKeyId, secretAccessKey, appname,"cloud4soa-created-app" );
} catch (Exception ex) {
Logger.getLogger(BeanstalkFirstDeploymentNoGUI.class.getName()).log(Level.SEVERE, null, ex);
}
//NOW, CREATE APPLICATION VERSION
BeansCreateApplicationVersion bst_createversion = new BeansCreateApplicationVersion();
try {
bst_createversion.creatappversion(accessKeyId, secretAccessKey, war_name_on_s3,
bucketName, appname, appversion);
version_updated=true;
} catch (Exception ex) {
Logger.getLogger(BeanstalkFirstDeploymentNoGUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
////////////////////////////////////starting CreateEnvironment if environment not found
//
//createenviroment if not given
if(version_updated==true){
BeansCreateEnvironment bst_createenvironment= new BeansCreateEnvironment();
try {
bst_createenvironment.createupdateenvironment(accessKeyId, secretAccessKey, environment_name, appname, appversion, "descriptionUpdateby-app:"+appname+"-version:"+appversion);
} catch ( InvalidParameterValueException ex) {
// Logger.getLogger(BeanstalkFirstDeploymentNoGUI.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Enviroment already there!Starting BeansUpdateEnvironment");
BeansUpdateEnvironment bst_updateenvironment= new BeansUpdateEnvironment();
try {
bst_updateenvironment.updateenvironment(accessKeyId, secretAccessKey, environment_name, appname, appversion, "descriptionUpdateby-app:"+appname+"-version:"+appversion);
} catch (Exception ex2) {
Logger.getLogger(BeanstalkDeploy.class.getName()).log(Level.SEVERE, null, ex2);
}
}
}
}//eom actionPerformed
// }//end of CLASS ButtonListener
public void upload_file_to_s3(String bucketName, String keyName,String uploadFileName, String AWSKeyId, String AWSSecretKey) throws BeanstalkAdapterException {
BasicAWSCredentials basic_credentials = new BasicAWSCredentials(AWSKeyId, AWSSecretKey);
AmazonS3 s3client = new AmazonS3Client(basic_credentials);
try {
System.out.println("Uploading a new object to S3 from a file\n");
File file = new File(uploadFileName);
s3client.putObject(new PutObjectRequest(
bucketName, keyName, file));
} catch (AmazonServiceException ase) {
System.out.println("Caught an AmazonServiceException, which " +
"means your request made it " +
"to Amazon S3, but was rejected with an error response" +
" for some reason.");
System.out.println("Error Message: " + ase.getMessage());
System.out.println("HTTP Status Code: " + ase.getStatusCode());
System.out.println("AWS Error Code: " + ase.getErrorCode());
System.out.println("Error Type: " + ase.getErrorType());
System.out.println("Request ID: " + ase.getRequestId());
throw new BeanstalkAdapterException(ase.getMessage());
} catch (AmazonClientException ace) {
System.out.println("Caught an AmazonClientException, which " +
"means the client encountered " +
"an internal error while trying to " +
"communicate with S3, " +
"such as not being able to access the network.");
System.out.println("Error Message: " + ace.getMessage());
throw new BeanstalkAdapterException(ace.getMessage());
}
}
private void createAmazonS3Bucket() {
try {
if (tx.getAmazonS3Client().doesBucketExist(bucketName) == false) {
//BUCKET CREATION //disable for update
tx.getAmazonS3Client().createBucket(bucketName);
}
} catch (AmazonClientException ace) {
JOptionPane.showMessageDialog(frame, "Unable to create a new Amazon S3 bucket: " + ace.getMessage(),
"Error Creating Bucket", JOptionPane.ERROR_MESSAGE);
}
}
private JPanel createContentPane() {
JPanel panel = new JPanel();
panel.add(button);
panel.add(pb);
JPanel borderPanel = new JPanel();
borderPanel.setLayout(new BorderLayout());
borderPanel.add(panel, BorderLayout.NORTH);
borderPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
return borderPanel;
}
}