/** * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. jclouds licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License 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 org.jclouds.sqs.features; import static org.jclouds.sqs.reference.SQSParameters.ACTION; import static org.jclouds.sqs.reference.SQSParameters.VERSION; import java.util.Map; import javax.inject.Named; import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import org.jclouds.Constants; import org.jclouds.Fallbacks.VoidOnNotFoundOr404; import org.jclouds.aws.filters.FormSigner; import org.jclouds.rest.annotations.BinderParam; import org.jclouds.rest.annotations.Fallback; import org.jclouds.rest.annotations.FormParams; import org.jclouds.rest.annotations.MapBinder; import org.jclouds.rest.annotations.PayloadParam; import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.ResponseParser; import org.jclouds.rest.annotations.VirtualHost; import org.jclouds.rest.annotations.XMLResponseParser; import org.jclouds.sqs.binders.BindChangeMessageVisibilityBatchRequestEntryToIndexedFormParams; import org.jclouds.sqs.binders.BindDeleteMessageBatchRequestEntryToIndexedFormParams; import org.jclouds.sqs.binders.BindSendMessageBatchRequestEntryToIndexedFormParams; import org.jclouds.sqs.binders.BindSendMessageBatchRequestEntryWithDelaysToIndexedFormParams; import org.jclouds.sqs.domain.BatchResult; import org.jclouds.sqs.domain.Message; import org.jclouds.sqs.domain.MessageIdAndMD5; import org.jclouds.sqs.options.ReceiveMessageOptions; import org.jclouds.sqs.options.SendMessageOptions; import org.jclouds.sqs.xml.ChangeMessageVisibilityBatchResponseHandler; import org.jclouds.sqs.xml.DeleteMessageBatchResponseHandler; import org.jclouds.sqs.xml.MessageHandler; import org.jclouds.sqs.xml.ReceiveMessageResponseHandler; import org.jclouds.sqs.xml.RegexMessageIdAndMD5Handler; import org.jclouds.sqs.xml.SendMessageBatchResponseHandler; import com.google.common.collect.FluentIterable; import com.google.common.collect.Table; import com.google.common.util.concurrent.ListenableFuture; /** * Provides access to SQS via their REST API. * <p/> * * @author Adrian Cole */ @RequestFilters(FormSigner.class) @FormParams(keys = VERSION, values = "{" + Constants.PROPERTY_API_VERSION + "}") @VirtualHost public interface MessageAsyncApi { /** * @see MessageApi#delete(String) */ @Named("DeleteMessage") @POST @Path("/") @FormParams(keys = ACTION, values = "DeleteMessage") @Fallback(VoidOnNotFoundOr404.class) ListenableFuture<Void> delete(@FormParam("ReceiptHandle") String receiptHandle); /** * @see MessageApi#delete(Map) */ @Named("DeleteMessageBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "DeleteMessageBatch") @XMLResponseParser(DeleteMessageBatchResponseHandler.class) ListenableFuture<? extends BatchResult<String>> delete( @BinderParam(BindDeleteMessageBatchRequestEntryToIndexedFormParams.class) Map<String, String> idReceiptHandle); /** * @see MessageApi#delete(Iterable) */ @Named("DeleteMessageBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "DeleteMessageBatch") @XMLResponseParser(DeleteMessageBatchResponseHandler.class) ListenableFuture<? extends BatchResult<String>> delete( @BinderParam(BindDeleteMessageBatchRequestEntryToIndexedFormParams.class) Iterable<String> receiptHandles); /** * @see MessageApi#changeVisibility(String, int) */ @Named("ChangeMessageVisibility") @POST @Path("/") @FormParams(keys = ACTION, values = "ChangeMessageVisibility") ListenableFuture<Void> changeVisibility(@FormParam("ReceiptHandle") String receiptHandle, @FormParam("VisibilityTimeout") int visibilityTimeout); /** * @see MessageApi#changeVisibility(Table) */ @Named("ChangeMessageVisibilityBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "ChangeMessageVisibilityBatch") @XMLResponseParser(ChangeMessageVisibilityBatchResponseHandler.class) ListenableFuture<? extends BatchResult<String>> changeVisibility( @BinderParam(BindChangeMessageVisibilityBatchRequestEntryToIndexedFormParams.class) Table<String, String, Integer> idReceiptHandleVisibilityTimeout); /** * @see MessageApi#changeVisibility(Map) */ @Named("ChangeMessageVisibilityBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "ChangeMessageVisibilityBatch") @XMLResponseParser(ChangeMessageVisibilityBatchResponseHandler.class) ListenableFuture<? extends BatchResult<String>> changeVisibility( @BinderParam(BindChangeMessageVisibilityBatchRequestEntryToIndexedFormParams.class) Map<String, Integer> receiptHandleVisibilityTimeout); /** * @see MessageApi#changeVisibility(Map, int) */ @Named("ChangeMessageVisibilityBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "ChangeMessageVisibilityBatch") @MapBinder(BindChangeMessageVisibilityBatchRequestEntryToIndexedFormParams.class) @XMLResponseParser(ChangeMessageVisibilityBatchResponseHandler.class) ListenableFuture<? extends BatchResult<String>> changeVisibility( @PayloadParam("idReceiptHandle") Map<String, String> idReceiptHandle, @PayloadParam("visibilityTimeout") int visibilityTimeout); /** * @see MessageApi#changeVisibility(Iterable, int) */ @Named("ChangeMessageVisibilityBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "ChangeMessageVisibilityBatch") @MapBinder(BindChangeMessageVisibilityBatchRequestEntryToIndexedFormParams.class) @XMLResponseParser(ChangeMessageVisibilityBatchResponseHandler.class) ListenableFuture<? extends BatchResult<String>> changeVisibility( @PayloadParam("receiptHandles") Iterable<String> receiptHandles, @PayloadParam("visibilityTimeout") int visibilityTimeout); /** * @see MessageApi#send(String) */ @Named("SendMessage") @POST @Path("/") @FormParams(keys = ACTION, values = "SendMessage") @ResponseParser(RegexMessageIdAndMD5Handler.class) ListenableFuture<? extends MessageIdAndMD5> send(@FormParam("MessageBody") String message); /** * @see MessageApi#send(String, SendMessageOptions) */ @Named("SendMessage") @POST @Path("/") @FormParams(keys = ACTION, values = "SendMessage") @ResponseParser(RegexMessageIdAndMD5Handler.class) ListenableFuture<? extends MessageIdAndMD5> send(@FormParam("MessageBody") String message, SendMessageOptions options); /** * @see MessageApi#sendWithDelays(Table) */ @Named("SendMessageBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "SendMessageBatch") @ResponseParser(RegexMessageIdAndMD5Handler.class) @XMLResponseParser(SendMessageBatchResponseHandler.class) ListenableFuture<? extends BatchResult<? extends MessageIdAndMD5>> sendWithDelays( @BinderParam(BindSendMessageBatchRequestEntryWithDelaysToIndexedFormParams.class) Table<String, String, Integer> idMessageBodyDelaySeconds); /** * @see MessageApi#sendWithDelays(Map) */ @Named("SendMessageBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "SendMessageBatch") @ResponseParser(RegexMessageIdAndMD5Handler.class) @XMLResponseParser(SendMessageBatchResponseHandler.class) ListenableFuture<? extends BatchResult<? extends MessageIdAndMD5>> sendWithDelays( @BinderParam(BindSendMessageBatchRequestEntryWithDelaysToIndexedFormParams.class) Map<String, Integer> messageBodyDelaySeconds); /** * @see MessageApi#sendWithDelay(Map, int) */ @Named("SendMessageBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "SendMessageBatch") @MapBinder(BindSendMessageBatchRequestEntryWithDelaysToIndexedFormParams.class) @XMLResponseParser(SendMessageBatchResponseHandler.class) ListenableFuture<? extends BatchResult<? extends MessageIdAndMD5>> sendWithDelay( @PayloadParam("idMessageBody") Map<String, String> idMessageBody, @PayloadParam("delaySeconds") int delaySeconds); /** * @see MessageApi#sendWithDelay(Iterable, int) */ @Named("SendMessageBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "SendMessageBatch") @MapBinder(BindSendMessageBatchRequestEntryWithDelaysToIndexedFormParams.class) @XMLResponseParser(SendMessageBatchResponseHandler.class) ListenableFuture<? extends BatchResult<? extends MessageIdAndMD5>> sendWithDelay( @PayloadParam("messageBodies") Iterable<String> messageBodies, @PayloadParam("delaySeconds") int delaySeconds); /** * @see MessageApi#send(Map) */ @Named("SendMessageBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "SendMessageBatch") @XMLResponseParser(SendMessageBatchResponseHandler.class) ListenableFuture<? extends BatchResult<? extends MessageIdAndMD5>> send( @BinderParam(BindSendMessageBatchRequestEntryToIndexedFormParams.class) Map<String, String> idMessageBody); /** * @see MessageApi#send(Iterable) */ @Named("SendMessageBatch") @POST @Path("/") @FormParams(keys = ACTION, values = "SendMessageBatch") @XMLResponseParser(SendMessageBatchResponseHandler.class) ListenableFuture<? extends BatchResult<? extends MessageIdAndMD5>> send( @BinderParam(BindSendMessageBatchRequestEntryToIndexedFormParams.class) Iterable<String> messageBodies); /** * @see MessageApi#receive() */ @Named("ReceiveMessage") @POST @Path("/") @FormParams(keys = ACTION, values = "ReceiveMessage") @XMLResponseParser(MessageHandler.class) ListenableFuture<Message> receive(); /** * @see MessageApi#receive(ReceiveMessageOptions) */ @Named("ReceiveMessage") @POST @Path("/") @FormParams(keys = ACTION, values = "ReceiveMessage") @XMLResponseParser(MessageHandler.class) ListenableFuture<? extends Message> receive(ReceiveMessageOptions options); /** * @see MessageApi#receive(int) */ @Named("ReceiveMessage") @POST @Path("/") @FormParams(keys = ACTION, values = "ReceiveMessage") @XMLResponseParser(ReceiveMessageResponseHandler.class) ListenableFuture<? extends FluentIterable<? extends Message>> receive(@FormParam("MaxNumberOfMessages") int max); /** * @see MessageApi#receive(int, ReceiveMessageOptions) */ @Named("ReceiveMessage") @POST @Path("/") @FormParams(keys = ACTION, values = "ReceiveMessage") @XMLResponseParser(ReceiveMessageResponseHandler.class) ListenableFuture<? extends FluentIterable<? extends Message>> receive(@FormParam("MaxNumberOfMessages") int max, ReceiveMessageOptions options); }