awslabs.lab31.SolutionCode.java Source code

Java tutorial

Introduction

Here is the source code for awslabs.lab31.SolutionCode.java

Source

/**
 * Copyright 2013 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 awslabs.lab31;

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

import com.amazonaws.auth.policy.Policy;
import com.amazonaws.auth.policy.Principal;
import com.amazonaws.auth.policy.Resource;
import com.amazonaws.auth.policy.Statement;
import com.amazonaws.auth.policy.Statement.Effect;
import com.amazonaws.auth.policy.actions.SQSActions;
import com.amazonaws.auth.policy.conditions.ConditionFactory;
import com.amazonaws.services.sns.AmazonSNSClient;
import com.amazonaws.services.sns.model.CreateTopicRequest;
import com.amazonaws.services.sns.model.CreateTopicResult;
import com.amazonaws.services.sns.model.DeleteTopicRequest;
import com.amazonaws.services.sns.model.ListSubscriptionsByTopicRequest;
import com.amazonaws.services.sns.model.ListSubscriptionsByTopicResult;
import com.amazonaws.services.sns.model.PublishRequest;
import com.amazonaws.services.sns.model.SubscribeRequest;
import com.amazonaws.services.sns.model.Subscription;
import com.amazonaws.services.sns.model.UnsubscribeRequest;
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.DeleteQueueRequest;
import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;
import com.amazonaws.services.sqs.model.GetQueueAttributesResult;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
import com.amazonaws.services.sqs.model.SendMessageRequest;
import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;

/**
 * Project: Lab3.1
 */
public abstract class SolutionCode implements ILabCode, IOptionalLabCode {

    @Override
    public String createQueue(AmazonSQSClient sqsClient, String queueName) {
        // TODO: Construct a CreateQueueRequest object using the provided queue name.
        CreateQueueRequest createQueueRequest = new CreateQueueRequest().withQueueName(queueName);

        // TODO: Submit the request using the createQueue method of the sqsClient object.
        CreateQueueResult createQueueResult = sqsClient.createQueue(createQueueRequest);

        // TODO: Return the queue URL from the request result.
        return createQueueResult.getQueueUrl();
    }

    @Override
    public String getQueueArn(AmazonSQSClient sqsClient, String queueUrl) {
        // TODO: Construct a GetQueueAttributesRequest for the specified queue and for the attribute named "QueueArn".
        GetQueueAttributesRequest getQueueAttributesRequest = new GetQueueAttributesRequest().withQueueUrl(queueUrl)
                .withAttributeNames("QueueArn");

        // TODO: Submit the request using the getQueueAttributes method of the sqsClient object.
        GetQueueAttributesResult getQueueAttributesResult = sqsClient.getQueueAttributes(getQueueAttributesRequest);

        // TODO: Return the QueueArn attribute value.
        return getQueueAttributesResult.getAttributes().get("QueueArn");
    }

    @Override
    public String createTopic(AmazonSNSClient snsClient, String topicName) {
        // TODO: Construct a CreateTopicRequest object using the specified topic name.
        CreateTopicRequest createTopicRequest = new CreateTopicRequest().withName(topicName);

        // TODO: Submit the request using the createTopic method of the snsClient object.
        CreateTopicResult createTopicResult = snsClient.createTopic(createTopicRequest);

        // TODO: Return the topic ARN from the request result.
        return createTopicResult.getTopicArn();
    }

    @Override
    public void createSubscription(AmazonSNSClient snsClient, String queueArn, String topicArn) {
        // TODO: Construct a SubscribeRequest object using the "sqs" protocol for the specified queue ARN endpoint and
        // topic ARN.
        SubscribeRequest subscribeRequest = new SubscribeRequest().withEndpoint(queueArn).withProtocol("sqs")
                .withTopicArn(topicArn);

        // TODO: Submit the request using the subscribe method of the snsClient object.
        snsClient.subscribe(subscribeRequest);
    }

    @Override
    public void publishTopicMessage(AmazonSNSClient snsClient, String topicArn, String subject, String message) {
        // TODO: Construct a PublishRequest object using the provided subject, message, and topic ARN.
        PublishRequest publishRequest = new PublishRequest().withMessage(message).withSubject(subject)
                .withTopicArn(topicArn);

        // TODO: Submit the request using the publish method of the snsClient object.
        snsClient.publish(publishRequest);
    }

    @Override
    public void postToQueue(AmazonSQSClient sqsClient, String queueUrl, String messageText) {
        // TODO: Construct a SendMessageRequest object using the provided queue URL and message.
        SendMessageRequest sendMessageRequest = new SendMessageRequest().withMessageBody(messageText)
                .withQueueUrl(queueUrl);

        // TODO: Submit the request using the sendMessage method of the sqsClient object.
        sqsClient.sendMessage(sendMessageRequest);
    }

    @Override
    public List<Message> readMessages(AmazonSQSClient sqsClient, String queueUrl) {
        ReceiveMessageResult receiveMessageResult;

        // TODO: Construct a ReceiveMessageRequest object using the queue URL provided. Set the maximum number of
        // messages to 10.
        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest().withMaxNumberOfMessages(10)
                .withQueueUrl(queueUrl);

        // TODO: Submit the request using the receiveMessage method of the sqsClient object. Store the result in the
        // receiveMessageResult object (already defined).
        receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest);

        return receiveMessageResult.getMessages();
    }

    @Override
    public void removeMessage(AmazonSQSClient sqsClient, String queueUrl, String receiptHandle) {
        // TODO: Construct a DeleteMessageRequest object using the specified queue URL and receipt handle.
        DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest().withQueueUrl(queueUrl)
                .withReceiptHandle(receiptHandle);

        // TODO: Submit the request using the deleteMessage method of the sqsClient object.
        sqsClient.deleteMessage(deleteMessageRequest);
    }

    @Override
    public void deleteSubscriptions(AmazonSNSClient snsClient, String topicArn) {
        // TODO: Construct a ListSubscriptionsByTopicRequest object using the provided topic ARN.
        ListSubscriptionsByTopicRequest listSubscriptionsByTopicRequest = new ListSubscriptionsByTopicRequest()
                .withTopicArn(topicArn);

        // TODO: Submit the request using the listSubscriptionsByTopic method of the snsClient object.
        ListSubscriptionsByTopicResult listSubscriptionsByTopicResult = snsClient
                .listSubscriptionsByTopic(listSubscriptionsByTopicRequest);

        // TODO: Iterate over the subscriptions in the request result.
        // TODO: For each subscription, construct an UnsubscribeRequest object using the subscription ARN.
        // TODO: For each unsubscribe request, submit it using the unsubscribe method of the snsClient object.
        for (Subscription subscription : listSubscriptionsByTopicResult.getSubscriptions()) {
            UnsubscribeRequest unsubscribeRequest = new UnsubscribeRequest()
                    .withSubscriptionArn(subscription.getSubscriptionArn());
            snsClient.unsubscribe(unsubscribeRequest);
        }
    }

    @Override
    public void deleteTopic(AmazonSNSClient snsClient, String topicArn) {
        // TODO: Construct a DeleteTopicRequest object using the provided topic ARN.
        DeleteTopicRequest deleteTopicRequest = new DeleteTopicRequest().withTopicArn(topicArn);

        // TODO: Submit the request using the deleteTopic method of the snsClient object.
        snsClient.deleteTopic(deleteTopicRequest);
    }

    @Override
    public void deleteQueue(AmazonSQSClient sqsClient, String queueUrl) {
        // TODO: Construct a DeleteQueueRequest object using the provided queue URL.
        DeleteQueueRequest deleteQueueRequest = new DeleteQueueRequest().withQueueUrl(queueUrl);

        // TODO: Submit the request using the deleteQueue method of the sqsClient object.
        sqsClient.deleteQueue(deleteQueueRequest);
    }

    @Override
    public void grantNotificationPermission(AmazonSQSClient sqsClient, String queueArn, String queueUrl,
            String topicArn) {

        Statement statement = new Statement(Effect.Allow).withActions(SQSActions.SendMessage)
                .withPrincipals(new Principal("*")).withConditions(ConditionFactory.newSourceArnCondition(topicArn))
                .withResources(new Resource(queueArn));

        Policy policy = new Policy("SubscriptionPermission").withStatements(statement);

        HashMap<String, String> attributes = new HashMap<String, String>();
        attributes.put("Policy", policy.toJson());

        // Create the request to set the queue attributes for policy
        SetQueueAttributesRequest setQueueAttributesRequest = new SetQueueAttributesRequest().withQueueUrl(queueUrl)
                .withAttributes(attributes);

        // Set the queue policy
        sqsClient.setQueueAttributes(setQueueAttributesRequest);
    }
}