package detective.task.aws; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.amazonaws.ClientConfiguration; import com.amazonaws.Protocol; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.AWSCredentialsProviderChain; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; import com.amazonaws.auth.InstanceProfileCredentialsProvider; import com.amazonaws.auth.SystemPropertiesCredentialsProvider; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.AmazonSNSClient; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClient; /** * @author James Luo * @version 17/12/2012 5:28:42 PM */ public class AwsServiceImpl implements AwsService { private static Logger log = LoggerFactory.getLogger(AwsServiceImpl.class); private String accessKeyId; private String secretKey; private AWSCredentialsProvider credentialsProvider = null; private AmazonS3 s3 = null; private AmazonSQSClient queue = null; private AmazonSNSClient sns = null; private AmazonDynamoDB dydbv2 = null; private String s3Endpoint = null; public String getS3Endpoint() { return s3Endpoint; } public void setS3Endpoint(String s3Endpoint) { this.s3Endpoint = s3Endpoint; } private String sqsEndpoint = null; private String snsEndpoint = null; private String dynamodbEndpoint = null; private boolean proxyMode; private String proxyHost; private int proxyPort; private String proxyUsername; private String proxyPassword; public AWSCredentials getCredetials() { return this.credentialsProvider.getCredentials(); } private class AWSCredentialsConfigFileProvider implements AWSCredentialsProvider{ @Override public AWSCredentials getCredentials() { return new BasicAWSCredentials(accessKeyId, secretKey); } @Override public void refresh() { } } private AWSCredentialsProvider createCredentialsProvider(){ return new AWSCredentialsProviderChain( new InstanceProfileCredentialsProvider(), new EnvironmentVariableCredentialsProvider(), new SystemPropertiesCredentialsProvider(), new AWSCredentialsConfigFileProvider() ); } private void factory() { ClientConfiguration clientConfig = new ClientConfiguration(); clientConfig.setProtocol(Protocol.HTTP); if (isProxyMode()) { log.info("======AWS run in proxy mode." + getProxyHost() + ":" + getProxyPort() + "======"); System.err.println("======AWS run in proxy mode." + getProxyHost() + ":" + getProxyPort() + "======"); clientConfig.setProxyHost(getProxyHost()); clientConfig.setProxyPort(getProxyPort()); if (getProxyUsername() != null && getProxyUsername().length() > 0) clientConfig.setProxyUsername(getProxyUsername()); if (getProxyPassword() != null && getProxyPassword().length() > 0) clientConfig.setProxyPassword(getProxyPassword()); } else { log.info("======AWS run in normal mode." + "======"); System.err.println("======AWS run in normal mode." + "======"); } credentialsProvider = this.createCredentialsProvider(); s3 = new AmazonS3Client(credentialsProvider, clientConfig); s3.setEndpoint(s3Endpoint); queue = new AmazonSQSClient(credentialsProvider, clientConfig); queue.setEndpoint(sqsEndpoint); sns = new AmazonSNSClient(credentialsProvider, clientConfig); sns.setEndpoint(snsEndpoint); dydbv2 = new AmazonDynamoDBClient(credentialsProvider, clientConfig); dydbv2.setEndpoint(dynamodbEndpoint); } public AmazonS3 getS3() { return s3; } public String getAccessKeyId() { return accessKeyId; } public void setAccessKeyId(String accessKeyId) { this.accessKeyId = accessKeyId; } public String getSecretKey() { return secretKey; } public void setSecretKey(String secretKey) { this.secretKey = secretKey; } public void afterPropertiesSet() throws Exception { factory(); } @Override public AmazonSQS getQueue() { return this.queue; } public String getSqsEndpoint() { return sqsEndpoint; } public void setSqsEndpoint(String sqsEndpoint) { this.sqsEndpoint = sqsEndpoint; } public String getDynamodbEndpoint() { return dynamodbEndpoint; } public void setDynamodbEndpoint(String dynamodbEndpoint) { this.dynamodbEndpoint = dynamodbEndpoint; } public boolean isProxyMode() { return proxyMode; } public void setProxyMode(boolean proxyMode) { this.proxyMode = proxyMode; } public String getProxyHost() { return proxyHost; } public void setProxyHost(String proxyHost) { this.proxyHost = proxyHost; } public int getProxyPort() { return proxyPort; } public void setProxyPort(int proxyPort) { this.proxyPort = proxyPort; } public String getProxyUsername() { return proxyUsername; } public void setProxyUsername(String proxyUsername) { this.proxyUsername = proxyUsername; } public String getProxyPassword() { return proxyPassword; } public void setProxyPassword(String proxyPassword) { this.proxyPassword = proxyPassword; } @Override public AmazonSNS getSns() { return sns; } public String getSnsEndpoint() { return snsEndpoint; } public void setSnsEndpoint(String snsEndpoint) { this.snsEndpoint = snsEndpoint; } @Override public AmazonDynamoDB getDydbV2() { return dydbv2; } }