/*
* Copyright 2012-2014 Amazon.com, Inc. or its affiliates. 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.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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.amazonaws.services.simpleworkflow.flow.examples.common;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
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.simpleworkflow.AmazonSimpleWorkflow;
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient;
/**
* Configuration Helper to used to create SWF and S3 clients
*/
public class ConfigHelper {
private Properties sampleConfig;
private String swfServiceUrl;
private String swfAccessId;
private String swfSecretKey;
private String s3AccessId;
private String s3SecretKey;
private String domain;
private long domainRetentionPeriodInDays;
private ConfigHelper(File propertiesFile) throws IOException {
loadProperties(propertiesFile);
}
private void loadProperties(File propertiesFile) throws IOException {
FileInputStream inputStream = new FileInputStream(propertiesFile);
sampleConfig = new Properties();
sampleConfig.load(inputStream);
this.swfServiceUrl = sampleConfig.getProperty(ConfigKeys.SWF_SERVICE_URL_KEY);
this.swfAccessId = sampleConfig.getProperty(ConfigKeys.SWF_ACCESS_ID_KEY);
this.swfSecretKey = sampleConfig.getProperty(ConfigKeys.SWF_SECRET_KEY_KEY);
this.s3AccessId = sampleConfig.getProperty(ConfigKeys.S3_ACCESS_ID_KEY);
this.s3SecretKey = sampleConfig.getProperty(ConfigKeys.S3_SECRET_KEY_KEY);
this.domain = sampleConfig.getProperty(ConfigKeys.DOMAIN_KEY);
this.domainRetentionPeriodInDays = Long.parseLong(sampleConfig.getProperty(ConfigKeys.DOMAIN_RETENTION_PERIOD_KEY));
}
public static ConfigHelper createConfig() throws IOException, IllegalArgumentException {
BasicConfigurator.configure();
Logger.getRootLogger().setLevel(Level.INFO);
// Logger.getLogger("org.apache.http").setLevel(Level.INFO);
ConfigHelper configHelper = null;
boolean envVariableExists = false;
//first check the existence of environment variable
String sampleConfigPath = System.getenv(SampleConstants.ACCESS_PROPERTIES_ENVIRONMENT_VARIABLE);
if (sampleConfigPath != null && sampleConfigPath.length() > 0) {
envVariableExists = true;
}
File accessProperties = new File(System.getProperty(SampleConstants.HOME_DIRECTORY_PROPERTY), SampleConstants.HOME_DIRECTORY_FILENAME);
if(accessProperties.exists()){
configHelper = new ConfigHelper(accessProperties);
}
else if (envVariableExists) {
accessProperties = new File(sampleConfigPath, SampleConstants.ACCESS_PROPERTIES_FILENAME);
configHelper = new ConfigHelper(accessProperties);
}
else {
//try checking the existence of file on relative path.
try {
accessProperties = new File(SampleConstants.ACCESS_PROPERTIES_RELATIVE_PATH, SampleConstants.ACCESS_PROPERTIES_FILENAME);
configHelper = new ConfigHelper(accessProperties);
}
catch (Exception e) {
throw new FileNotFoundException("Cannot find AWS_SWF_SAMPLES_CONFIG environment variable, Exiting!!!");
}
}
return configHelper;
}
public AmazonSimpleWorkflow createSWFClient() {
AWSCredentials awsCredentials = new BasicAWSCredentials(this.swfAccessId, this.swfSecretKey);
AmazonSimpleWorkflow client = new AmazonSimpleWorkflowClient(awsCredentials);
client.setEndpoint(this.swfServiceUrl);
return client;
}
public AmazonS3 createS3Client() {
AWSCredentials s3AWSCredentials = new BasicAWSCredentials(this.s3AccessId, this.s3SecretKey);
AmazonS3 client = new AmazonS3Client(s3AWSCredentials);
return client;
}
public String getDomain() {
return domain;
}
public long getDomainRetentionPeriodInDays() {
return domainRetentionPeriodInDays;
}
public String getValueFromConfig(String key) {
return sampleConfig.getProperty(key);
}
}