package com.amazon.aws.demo.sqs; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.amazon.aws.demo.AWSDemo; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClient; import com.amazonaws.services.sqs.model.CreateQueueRequest; import com.amazonaws.services.sqs.model.CreateQueueResult; import com.amazonaws.services.sqs.model.DeleteMessageRequest; import com.amazonaws.services.sqs.model.GetQueueAttributesRequest; import com.amazonaws.services.sqs.model.Message; import com.amazonaws.services.sqs.model.ReceiveMessageRequest; import com.amazonaws.services.sqs.model.SendMessageRequest; import com.amazonaws.services.sqs.model.SendMessageResult; import com.amazonaws.services.sqs.model.SetQueueAttributesRequest; public class SimpleQueue { private static AmazonSQS simpleQueue = null; private static List<Message> lastRecievedMessages = null; public static final String QUEUE_URL = "_queue_url"; public static final String MESSAGE_INDEX = "_message_index"; public static final String MESSAGE_ID = "_message_id"; public static AmazonSQS getInstance() { if ( simpleQueue == null ) { simpleQueue = new AmazonSQSClient(AWSDemo.credentials); } return simpleQueue; } public static CreateQueueResult createQueue(String queueName){ CreateQueueRequest req = new CreateQueueRequest(queueName); return getInstance().createQueue(req); } public static List<String> getQueueUrls(){ return getInstance().listQueues().getQueueUrls(); } public static List<String> recieveMessageBodies(String queueUrl){ List<String> messageBodies = new ArrayList<String>(); ReceiveMessageRequest req = new ReceiveMessageRequest(queueUrl); lastRecievedMessages = getInstance().receiveMessage(req).getMessages(); for(Message m : lastRecievedMessages){ messageBodies.add(m.getBody().toString()); } return messageBodies; } public static List<String> recieveMessageIds(String queueUrl){ List<String> messageIds = new ArrayList<String>(); ReceiveMessageRequest req = new ReceiveMessageRequest(queueUrl); lastRecievedMessages = getInstance().receiveMessage(req).getMessages(); for(Message m : lastRecievedMessages){ messageIds.add(m.getMessageId().toString()); } return messageIds; } public static String getMessageBody(int messageIndex){ if(lastRecievedMessages == null) { return new String(); } else { return lastRecievedMessages.get(messageIndex).getBody().toString(); } } public static SendMessageResult sendMessage(String queueUrl, String body){ SendMessageRequest req = new SendMessageRequest(queueUrl, body); return getInstance().sendMessage(req); } public static void deleteMessage(String queueName, String msgHandle){ DeleteMessageRequest req = new DeleteMessageRequest(createQueue(queueName).getQueueUrl(), msgHandle); getInstance().deleteMessage(req); } public static String getQueueArn(String queueUrl){ GetQueueAttributesRequest req = new GetQueueAttributesRequest(queueUrl).withAttributeNames("QueueArn"); return getInstance().getQueueAttributes(req).getAttributes().get("QueueArn").toString(); } public static void allowNotifications(String queueUrl, String topicArn){ HashMap<String, String> attributes = new HashMap<String, String>(); attributes.put("Policy", generateSqsPolicyForTopic(getQueueArn(queueUrl), topicArn)); getInstance().setQueueAttributes(new SetQueueAttributesRequest(queueUrl, attributes)); } private static String generateSqsPolicyForTopic(String queueArn, String topicArn) { String policy = "{ " + " \"Version\":\"2008-10-17\"," + " \"Id\":\"" + queueArn + "/policyId\"," + " \"Statement\": [" + " {" + " \"Sid\":\"" + queueArn + "/statementId\"," + " \"Effect\":\"Allow\"," + " \"Principal\":{\"AWS\":\"*\"}," + " \"Action\":\"SQS:SendMessage\"," + " \"Resource\": \"" + queueArn + "\"," + " \"Condition\":{" + " \"StringEquals\":{\"aws:SourceArn\":\"" + topicArn + "\"}" + " }" + " }" + " ]" + "}"; return policy; } }