NUVEM-14 patch. Dulini's initial queue service implementation.

git-svn-id: https://svn.apache.org/repos/asf/incubator/nuvem/trunk@1361932 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/nuvem-amazon/pom.xml b/nuvem-amazon/pom.xml
index 8345338..d4e664c 100644
--- a/nuvem-amazon/pom.xml
+++ b/nuvem-amazon/pom.xml
@@ -57,7 +57,8 @@
                 <inherited>true</inherited>
                 <configuration>
                     <excludes>
-                        <exclude>**/AmazonDataServiceImplTestCase.java</exclude>                        
+                        <exclude>**/AmazonDataServiceImplTestCase.java</exclude>
+                        <exclude>**/AmazonMessageQueueServiceImplTestCase.java</exclude>                             
                     </excludes>                    
                 </configuration>
             </plugin>
diff --git a/nuvem-amazon/src/main/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImpl.java b/nuvem-amazon/src/main/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImpl.java
new file mode 100644
index 0000000..3272983
--- /dev/null
+++ b/nuvem-amazon/src/main/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImpl.java
@@ -0,0 +1,238 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.nuvem.cloud.messageQueueService.impl;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+import org.apache.nuvem.cloud.messageQueueService.MessageQueueService;
+import org.apache.nuvem.cloud.messageQueueService.QueueMessage;
+import org.apache.nuvem.cloud.messageQueueService.QueueMessageHandle;
+import org.apache.nuvem.cloud.messageQueueService.MessageQueueServiceException;
+
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.PropertiesCredentials;
+import com.amazonaws.AmazonClientException;
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.auth.PropertiesCredentials;
+
+import com.amazonaws.services.sqs.AmazonSQS;
+import com.amazonaws.services.sqs.AmazonSQSClient;
+import com.amazonaws.services.sqs.model.DeleteMessageRequest;
+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.GetQueueUrlRequest;
+import com.amazonaws.services.sqs.model.GetQueueUrlResult;
+
+/**
+ *The AmazonMessageQueueServiceImpl class
+ */
+public class AmazonMessageQueueServiceImpl implements MessageQueueService {
+	
+	public static final String AMAZON_CREDENTIALS_CONFIG_FILE_NAME = "AwsCredentials.properties";
+	public static final String AMAZON_ACCESS_KEY = "accessKey";
+	public static final String AMAZON_SECRET_KEY = "secretKey";
+	public static final String AMAZON_QUEUE_CONFIG_FILE_NAME = "queue.properties";
+	public static final String AMAZON_QUEUE_NAME = "QueueName";
+	public static final String AMAZON_DEFAULT_QUEUE_NAME = "MyQueue";
+	
+	private AmazonSQS sqsClient;
+	private String queueURL;
+	private String queueName;
+	
+	/**
+	 * Instantiates a new AmazonMessageQueueServiceImpl
+	 */
+	public AmazonMessageQueueServiceImpl() {
+		try {
+			this.sqsClient = new AmazonSQSClient(new PropertiesCredentials(
+					AmazonMessageQueueServiceImpl.class.
+	                		getResourceAsStream(AMAZON_CREDENTIALS_CONFIG_FILE_NAME)));
+			
+			this.queueName = AMAZON_DEFAULT_QUEUE_NAME;
+			setQueueURl(queueName);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Instantiates a new AmazonMessageQueueServiceImpl
+	 * 
+	 * @param accessKey The Amazon access key 
+	 * @param secretKey The Amazon secret key
+	 */
+	public AmazonMessageQueueServiceImpl(final String accessKey, final String secretKey) {
+		try{
+			AWSCredentials amazonCredentials = new AWSCredentials() {
+				@Override
+				public String getAWSAccessKeyId() {
+					return accessKey;
+				}
+				
+				@Override
+				public String getAWSSecretKey() {
+					return secretKey;
+				}
+			};
+			
+			sqsClient = new AmazonSQSClient(amazonCredentials);
+			this.queueName = AMAZON_DEFAULT_QUEUE_NAME;
+			setQueueURl(queueName);
+		}catch(Exception e){
+			e.printStackTrace();
+		}		
+	}
+	
+	/**
+	 * Instantiates a new AmazonMessageQueueServiceImpl
+	 * 
+	 * @param configAmazonCredentials Amazon credential configuration
+	 */
+	public AmazonMessageQueueServiceImpl(final Map configAmazonCredentials) {
+		try{
+			AWSCredentials amazonCredentials = new AWSCredentials() {
+				@Override
+				public String getAWSAccessKeyId() {
+					return (String) configAmazonCredentials.get(AMAZON_ACCESS_KEY);
+				}
+				
+				@Override
+				public String getAWSSecretKey() {
+					return (String) configAmazonCredentials.get(AMAZON_SECRET_KEY);
+				}
+			};
+			
+			sqsClient = new AmazonSQSClient(amazonCredentials);
+			this.queueName = AMAZON_DEFAULT_QUEUE_NAME;
+			setQueueURl(queueName);
+		}catch(Exception e){
+			e.printStackTrace();
+		}		
+	}
+	
+	/**
+	 * Instantiates a new AmazonMessageQueueServiceImpl
+	 * 
+	 * @param sqsClient The AmazonSQS client
+	 */
+	public AmazonMessageQueueServiceImpl(AmazonSQSClient sqsClient) {
+		try{
+			this.sqsClient = sqsClient;
+			this.queueName = AMAZON_DEFAULT_QUEUE_NAME;
+			setQueueURl(queueName);
+		}catch(Exception e){
+			e.printStackTrace();
+		}		
+	}
+	
+	/**
+	 * Sets the queueURL using queueName
+	 * 
+	 * @param queueName the queue name
+	 */
+	private void setQueueURl(String queueName) throws IOException  {		
+		GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest(queueName);
+        GetQueueUrlResult getQueueUrlResult= sqsClient.getQueueUrl(getQueueUrlRequest);
+        this.queueURL = getQueueUrlResult.getQueueUrl();
+	}
+	
+	/**
+	 * Gets the queue name from property file	 
+	 */
+	private String getQueueName() throws IOException {
+		Properties queueProperties = new Properties();
+		queueProperties.load(AmazonMessageQueueServiceImpl.class.
+				getResourceAsStream(AMAZON_QUEUE_CONFIG_FILE_NAME));
+		return queueProperties.getProperty(AMAZON_QUEUE_NAME);
+	}
+	
+	/**
+	 * Sends the message
+	 * 
+	 * @param queueMessage the queue message
+	 * @return the queue message handle
+	 * @throws MessageQueueServiceException
+	 */
+	@Override
+	public QueueMessageHandle sendMessage(QueueMessage queueMessage) throws MessageQueueServiceException {
+		try{
+			SendMessageRequest sendMessageRequest = new SendMessageRequest(queueURL, queueMessage.getMessageBody());
+			SendMessageResult sendMessageResult = sqsClient.sendMessage(sendMessageRequest);
+			QueueMessageHandle queueMessageHandle = new QueueMessageHandle();
+			queueMessageHandle.setId(sendMessageResult.getMessageId());
+			queueMessageHandle.setMessageBody(queueMessage.getMessageBody());
+			return queueMessageHandle;
+		}catch(Exception e){
+			throw new MessageQueueServiceException(e);
+		}
+	}
+	
+	/**
+	 * Receive Messages
+	 * 
+	 * @param numMessages number of messages to receive
+	 * @return list of queue messages
+	 * @throws MessageQueueServiceException
+	 */
+	@Override
+	public List<QueueMessage> receiveMessage(int numMessages) throws MessageQueueServiceException{
+		try{
+			ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(this.queueURL);
+			receiveMessageRequest.setMaxNumberOfMessages(numMessages);
+	        List<Message> messages = sqsClient.receiveMessage(receiveMessageRequest).getMessages();
+	        List<QueueMessage> queueMessages = new ArrayList<QueueMessage>(messages.size());
+	        Iterator messageIterator = messages.iterator();
+	        Message message;
+	        while(messageIterator.hasNext()){
+	        	message = (Message)messageIterator.next();
+	        	queueMessages.add(new QueueMessage(message.getReceiptHandle(), message.getBody()));	        	
+	        }
+	        return queueMessages;
+		}catch(Exception e){			
+			throw new MessageQueueServiceException(e);
+		}
+	}
+	
+	/**
+	 * Deletes the message
+	 * 
+	 * @param queueMessage the message to delete
+	 * @return true, if deleting message is successful
+	 * @throws MessageQueueServiceException
+	 */
+	@Override
+	public boolean deleteMessage(QueueMessage queueMessage) throws MessageQueueServiceException{
+		try{
+			String messageRecieptHandle = queueMessage.getId();
+			sqsClient.deleteMessage(new DeleteMessageRequest(this.queueURL, messageRecieptHandle));
+			return true;
+		}catch(Exception e){
+			throw new MessageQueueServiceException(e);
+		}
+	}
+}
diff --git a/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceClient.java b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceClient.java
new file mode 100644
index 0000000..b640e6b
--- /dev/null
+++ b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceClient.java
@@ -0,0 +1,29 @@
+
+package org.apache.nuvem.cloud.messageQueueService.impl;
+
+import com.amazonaws.AmazonWebServiceClient;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.services.sqs.AmazonSQSClient;
+
+public class AmazonMessageQueueServiceClient {
+	
+	public static AmazonWebServiceClient getAmazonSQSClient(final String accessKey, final String secretKey) {	
+		
+		if(accessKey == null || secretKey == null){
+			return new MockAmazonSQSClient();
+		}
+		
+		AWSCredentials awsCredentials = new AWSCredentials() {
+			@Override
+			public String getAWSAccessKeyId() {
+				return accessKey;
+			}
+			@Override
+			public String getAWSSecretKey() {
+				return secretKey;
+			}
+		};
+		
+		return  new AmazonSQSClient(awsCredentials);
+	}
+}
\ No newline at end of file
diff --git a/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImplTestCase.java b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImplTestCase.java
new file mode 100644
index 0000000..fae4acf
--- /dev/null
+++ b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImplTestCase.java
@@ -0,0 +1,149 @@
+
+package org.apache.nuvem.cloud.messageQueueService.impl;
+
+import static org.junit.Assert.*;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+import java.net.URL;
+
+import org.apache.nuvem.cloud.messageQueueService.MessageQueueService;
+import org.apache.nuvem.cloud.messageQueueService.QueueMessage;
+import org.apache.nuvem.cloud.messageQueueService.QueueMessageHandle;
+import org.apache.nuvem.cloud.messageQueueService.MessageQueueServiceException;
+
+import com.amazonaws.services.sqs.AmazonSQS;
+import com.amazonaws.services.sqs.AmazonSQSClient;
+import com.amazonaws.services.sqs.model.DeleteMessageRequest;
+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.SendMessageResult;
+import com.amazonaws.services.sqs.model.GetQueueUrlRequest;
+import com.amazonaws.services.sqs.model.GetQueueUrlResult;
+import com.amazonaws.services.sqs.model.QueueDoesNotExistException;
+import com.amazonaws.services.sqs.model.InvalidMessageContentsException;
+import com.amazonaws.services.sqs.model.OverLimitException;
+import com.amazonaws.services.sqs.model.ReceiptHandleIsInvalidException;
+import com.amazonaws.services.sqs.model.InvalidIdFormatException;
+
+public class AmazonMessageQueueServiceImplTestCase {
+		
+		private MessageQueueService messageQueueService; 
+		
+		@Before
+		public void setUp() throws Exception {
+			AmazonSQSClient sqsClient =  getSQSClient();
+			messageQueueService = new  AmazonMessageQueueServiceImpl(sqsClient);
+		}
+
+		private AmazonSQSClient getSQSClient() {
+			try {
+				Properties awsCredentialsProperties = new Properties();
+				URL url = ClassLoader.getSystemResource("test.properties");
+				awsCredentialsProperties.load(url.openStream());
+				final String accessKey = awsCredentialsProperties.getProperty("accessKey");
+				final String secretKey = awsCredentialsProperties.getProperty("secretKey");
+				
+				return (AmazonSQSClient) AmazonMessageQueueServiceClient.getAmazonSQSClient(accessKey,secretKey);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+			return null;
+		}
+		
+		@After
+		public void tearDown() throws Exception {
+			messageQueueService = null;
+		}
+		
+		@Test
+		public void testSendMessage() throws MessageQueueServiceException {
+			QueueMessage qMessage = new QueueMessage();
+			qMessage.setId("1");
+			qMessage.setMessageBody("Message");
+			
+			assertNotNull(qMessage);
+			
+			QueueMessageHandle qMessageHandle = new QueueMessageHandle();
+			qMessageHandle = messageQueueService.sendMessage(qMessage);
+			
+			assertNotNull(qMessageHandle);
+			assertEquals("Message", qMessageHandle.getMessageBody());
+		}
+		
+		@Test
+		public void testReceiveMessage() throws MessageQueueServiceException {
+			
+			AmazonSQSClient amazonSQSClient = getSQSClient();
+			GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest("MyQueue");
+			GetQueueUrlResult getQueueUrlResult= amazonSQSClient.getQueueUrl(getQueueUrlRequest);
+			String queueURL = getQueueUrlResult.getQueueUrl();
+			
+			assertNotNull(getQueueUrlRequest);
+			assertNotNull(getQueueUrlResult);
+			assertNotNull(queueURL);
+			
+			SendMessageRequest sendMessageRequest1 = new SendMessageRequest(
+																	queueURL, "Message 01");
+			SendMessageResult sendMessageResult1 = amazonSQSClient.sendMessage(sendMessageRequest1);
+			SendMessageRequest sendMessageRequest2 = new SendMessageRequest(
+																	queueURL, "Message 02");
+			SendMessageResult sendMessageResult2 = amazonSQSClient.sendMessage(sendMessageRequest2);
+			
+			assertNotNull(sendMessageRequest1);
+			assertNotNull(sendMessageResult1);
+			assertNotNull(sendMessageRequest2);
+			assertNotNull(sendMessageResult2);
+			
+			int numberOfMessages = 3;
+			
+			List<QueueMessage> qMessages = messageQueueService.receiveMessage(numberOfMessages);
+			
+			System.out.println(numberOfMessages);
+			assertNotNull(qMessages);
+			assertEquals(3, qMessages.size());
+			assertNotNull(qMessages.get(qMessages.size()-1));
+		}
+		
+		@Test
+		public void testDeleteMessage() throws MessageQueueServiceException {
+			
+			AmazonSQSClient amazonSQSClient = getSQSClient();
+			GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest("MyQueue");
+			GetQueueUrlResult getQueueUrlResult= amazonSQSClient.getQueueUrl(getQueueUrlRequest);
+			String queueURL = getQueueUrlResult.getQueueUrl();
+			
+			assertNotNull(getQueueUrlRequest);
+			assertNotNull(getQueueUrlResult);
+			assertNotNull(queueURL);
+			
+			ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueURL);
+	        List<Message> messages = amazonSQSClient.receiveMessage(receiveMessageRequest).getMessages();
+			
+	        assertNotNull(receiveMessageRequest);
+			assertNotNull(messages);
+			
+			Message message = messages.get(0);
+			
+			assertNotNull(message);
+			
+			QueueMessage qMessage = new QueueMessage(message.getReceiptHandle(), message.getBody());
+			
+			assertNotNull(qMessage);
+			
+			boolean deleteResult = messageQueueService.deleteMessage(qMessage);
+	        
+			assertNotNull(deleteResult);
+			
+			assertEquals(true, deleteResult);
+			
+		}
+		
+}
diff --git a/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/MockAmazonSQSClient.java b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/MockAmazonSQSClient.java
new file mode 100644
index 0000000..23b9572
--- /dev/null
+++ b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/MockAmazonSQSClient.java
@@ -0,0 +1,158 @@
+
+package org.apache.nuvem.cloud.messageQueueService.impl;
+
+import com.amazonaws.AmazonWebServiceRequest;
+import com.amazonaws.AmazonWebServiceClient;
+import com.amazonaws.AmazonClientException;
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.ResponseMetadata;
+import com.amazonaws.auth.PropertiesCredentials;
+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.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.SendMessageResult;
+import com.amazonaws.services.sqs.model.GetQueueUrlRequest;
+import com.amazonaws.services.sqs.model.GetQueueUrlResult;
+import com.amazonaws.services.sqs.model.ListQueuesResult;
+import com.amazonaws.services.sqs.model.AddPermissionRequest;
+import com.amazonaws.services.sqs.model.DeleteMessageBatchResult;
+import com.amazonaws.services.sqs.model.DeleteMessageBatchRequest;
+import com.amazonaws.services.sqs.model.ListQueuesResult;
+import com.amazonaws.services.sqs.model.ListQueuesRequest;
+import com.amazonaws.services.sqs.model.DeleteQueueRequest;
+import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
+import com.amazonaws.services.sqs.model.ChangeMessageVisibilityBatchResult;
+import com.amazonaws.services.sqs.model.ChangeMessageVisibilityBatchRequest;
+import com.amazonaws.services.sqs.model.ChangeMessageVisibilityRequest;
+import com.amazonaws.services.sqs.model.RemovePermissionRequest;
+import com.amazonaws.services.sqs.model.SendMessageBatchResult;
+import com.amazonaws.services.sqs.model.SendMessageBatchRequest;
+import com.amazonaws.services.sqs.model.GetQueueAttributesResult;
+import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;
+import com.amazonaws.services.sqs.model.QueueDoesNotExistException;
+import com.amazonaws.services.sqs.model.InvalidMessageContentsException;
+import com.amazonaws.services.sqs.model.OverLimitException;
+import com.amazonaws.services.sqs.model.ReceiptHandleIsInvalidException;
+import com.amazonaws.services.sqs.model.InvalidIdFormatException;
+
+public class MockAmazonSQSClient extends AmazonWebServiceClient implements AmazonSQS {
+	
+	public MockAmazonSQSClient() {
+		super(null);
+	}
+	
+	@Override 
+	public GetQueueUrlResult getQueueUrl(GetQueueUrlRequest getQueueUrlRequest)
+            throws QueueDoesNotExistException, AmazonServiceException, AmazonClientException {
+		return (null);
+	}
+	
+	@Override
+	public SendMessageResult sendMessage(SendMessageRequest sendMessageRequest)
+            throws InvalidMessageContentsException, AmazonServiceException, AmazonClientException {
+		return (null);
+	}
+	
+	@Override
+	public ReceiveMessageResult receiveMessage(ReceiveMessageRequest receiveMessageRequest)
+            throws OverLimitException, AmazonServiceException, AmazonClientException {
+		return (null);
+	}
+	
+	@Override
+	public void deleteMessage(DeleteMessageRequest deleteMessageRequest)
+            throws ReceiptHandleIsInvalidException, InvalidIdFormatException, AmazonServiceException, AmazonClientException {
+	}
+	
+	@Override
+	public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {
+		return (null);
+	}
+	
+	@Override
+	public ListQueuesResult listQueues() throws AmazonServiceException, AmazonClientException {
+		return (null);
+	}
+	
+	@Override
+	public void addPermission(AddPermissionRequest addPermissionRequest) 
+            					throws AmazonServiceException, AmazonClientException {
+	}
+	
+	@Override
+	public CreateQueueResult createQueue(CreateQueueRequest createQueueRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		return (null); 
+	}
+	
+	@Override
+	public DeleteMessageBatchResult deleteMessageBatch(DeleteMessageBatchRequest deleteMessageBatchRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		return (null); 
+	}
+	
+	@Override
+	public ListQueuesResult listQueues(ListQueuesRequest listQueuesRequest) 
+								throws AmazonServiceException, AmazonClientException {
+		return (null); 
+	}
+	
+	@Override
+	public void deleteQueue(DeleteQueueRequest deleteQueueRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		
+	}
+	
+	@Override
+	public void setEndpoint(String endpoint) throws IllegalArgumentException {
+		
+	}
+	
+	@Override
+	public void setQueueAttributes(SetQueueAttributesRequest setQueueAttributesRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		
+	}
+	
+	@Override
+	public ChangeMessageVisibilityBatchResult changeMessageVisibilityBatch(ChangeMessageVisibilityBatchRequest changeMessageVisibilityBatchRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		return (null);
+	}
+	
+	@Override
+	public void changeMessageVisibility(ChangeMessageVisibilityRequest changeMessageVisibilityRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		
+	}
+	
+	@Override
+	public void removePermission(RemovePermissionRequest removePermissionRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		
+	}
+	
+	@Override
+	public GetQueueAttributesResult getQueueAttributes(GetQueueAttributesRequest getQueueAttributesRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		return (null);
+	}
+	
+	@Override
+	public SendMessageBatchResult sendMessageBatch(SendMessageBatchRequest sendMessageBatchRequest)
+            					throws AmazonServiceException, AmazonClientException {
+		return (null);
+	}
+	
+	@Override
+	public void shutdown() {
+		
+	}
+	
+}
\ No newline at end of file
diff --git a/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueService.java b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueService.java
new file mode 100644
index 0000000..0011e9a
--- /dev/null
+++ b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueService.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.nuvem.cloud.messageQueueService;
+
+import java.util.List;
+import org.oasisopen.sca.annotation.Remotable;
+
+/**
+ * The Interface MessageQueueService defines services provide by Nuvem Message Queue
+ * Component and also acts as the abraction layer for cloud platform specific
+ * message queueing services. QueueMessage holds attribute values of a message sent to a message
+ * queue. 
+ */
+
+@Remotable
+public interface MessageQueueService {
+
+	/**
+	 * Send message
+	 * 
+	 * @param queueMessage the message
+	 * @return QueueMessageHandle 
+	 * @throws MessageQueueServiceException the message queue service exception
+	 */
+	public QueueMessageHandle sendMessage(QueueMessage queueMessage) throws MessageQueueServiceException;
+	
+	/**
+	 * Receives messages
+	 * 
+	 * @param numMessages number of messages to receive
+	 * @return list of messages
+	 * @throws MessageQueueServiceException the message queue service exception
+	 */
+	public List<QueueMessage> receiveMessage(int numMessages) throws MessageQueueServiceException; 
+	
+	/**
+	 * Deletes the message
+	 *  
+	 *  @param queueMessage the message
+	 *  @return true, if message deleted sucessfully
+	 *  @throws MessageQueueServiceException the message queue service exception
+	 */
+	public boolean deleteMessage(QueueMessage queueMessage) throws MessageQueueServiceException;
+	
+}
diff --git a/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueServiceException.java b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueServiceException.java
new file mode 100644
index 0000000..7022656
--- /dev/null
+++ b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueServiceException.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.nuvem.cloud.messageQueueService;
+
+/**
+ *The MessageQueueServiceException class
+ */
+public class MessageQueueServiceException extends Exception{
+
+	/**
+	 * Instantiates a new message queue service exception.
+	 */
+	public MessageQueueServiceException(){
+		
+	}
+	
+	/**
+	 * Instantiates a new message queue service exception.
+	 */
+	public MessageQueueServiceException(Throwable cause){
+		super(cause);
+	}
+	
+}
diff --git a/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessage.java b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessage.java
new file mode 100644
index 0000000..6ee653b
--- /dev/null
+++ b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessage.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.nuvem.cloud.messageQueueService;
+
+/**
+ * The QueueMessage class
+ */
+public class QueueMessage {
+	
+	/** The id */
+	private String id;	
+	
+	/** The message body */
+	private String messageBody;
+	
+	/**
+	 * Instantiates a new QueueMessage
+	 */
+	public QueueMessage (){
+		
+	}
+	
+	/**
+	 * Instantiates a new QueueMessage
+	 * 
+	 * @param id the id
+	 * @param messageBody the message body
+	 */
+	public QueueMessage (String id, String messageBody){
+		this.messageBody = messageBody;
+		this.id = id;		
+	}
+	
+	/**
+	 * Instantiates a new QueueMessage
+	 * 
+	 * @param messageBody the message body
+	 */
+	public QueueMessage (String messageBody) {
+		this.messageBody = messageBody;
+	}
+	
+	/**
+	 * Gets the Id
+	 * 
+	 * @return the id
+	 */
+	public String getId(){
+		return id;
+	}
+	
+	/**
+	 * Sets the Id
+	 * 
+	 * @param id the id
+	 */
+	public void setId(String id){
+		this.id = id;
+	}
+	
+	/**
+	 * Gets the message body
+	 * 
+	 * @return the messages body
+	 */
+	public String getMessageBody(){
+		return messageBody;		
+	}
+	
+	/**
+	 * Sets the message body
+	 * 
+	 * @param messageBody the message body
+	 */
+	public void setMessageBody(String messageBody){
+		this.messageBody = messageBody;
+	}
+	
+}
diff --git a/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessageHandle.java b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessageHandle.java
new file mode 100644
index 0000000..610762d
--- /dev/null
+++ b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessageHandle.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.nuvem.cloud.messageQueueService;
+
+/**
+ *The QueueMessageHandle class
+ */
+public class QueueMessageHandle {
+	
+	/** The id */
+	private String id;
+	
+	/** The message body */
+	private String messageBody;
+	
+	/**
+	 * Instantiates a new QueueMessagHandle
+	 */
+	public QueueMessageHandle(){
+		
+	}
+	
+	/**
+	 * Gets the Id
+	 * 
+	 * @return the id
+	 */
+	public String getId(){
+		return this.id;
+	}
+	
+	/**
+	 * Sets the Id
+	 * 
+	 * @param id the id
+	 */
+	public void setId(String id){
+		this.id = id;
+	}
+	
+	/**
+	 * Gets the message body
+	 * 
+	 * @return the messages body
+	 */
+	public String getMessageBody(){
+		return this.messageBody;
+	}
+	
+	/**
+	 * Sets the message body
+	 * 
+	 * @param messageBody the message body
+	 */
+	public void setMessageBody(String messageBody){
+		this.messageBody = messageBody;
+	}
+}