com.amazon.aws.demo.anonymous.sqs.SimpleQueue.java Source code

Java tutorial

Introduction

Here is the source code for com.amazon.aws.demo.anonymous.sqs.SimpleQueue.java

Source

/*
 * Copyright 2010-2012 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.amazon.aws.demo.anonymous.sqs;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.amazon.aws.demo.anonymous.AWSAndroidDemoTVM;
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 AmazonSQSClient 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 AmazonSQSClient getInstance() {
        return AWSAndroidDemoTVM.clientManager.sqs();
    }

    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;
    }

}