package se252.jan15.calvinandhobbes.project0;
/*
* Copyright 2010-2015 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.
*/
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.sqs.AmazonSQS;
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.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
/**
* This sample demonstrates how to make basic requests to Amazon SQS using the
* AWS SDK for Java.
* <p>
* <b>Prerequisites:</b> You must have a valid Amazon Web
* Services developer account, and be signed up to use Amazon SQS. For more
* information on Amazon SQS, see http://aws.amazon.com/sqs.
* <p>
* Fill in your AWS access credentials in the provided credentials file
* template, and be sure to move the file to the default location
* (~/.aws/credentials) where the sample code will load the credentials from.
* <p>
* <b>WARNING:</b> To avoid accidental leakage of your credentials, DO NOT keep
* the credentials file in your source directory.
*/
@Path("dataProxy")
public class IIScCampusMapGETProxyService {
private static LoadingCache<String, String> categoryCache = null;
public static void cacheInit() {
categoryCache = CacheBuilder.newBuilder()
.maximumSize(7) // maximum 7 records can be cached
.expireAfterAccess(10, TimeUnit.MINUTES) // cache will expire after 10 minutes of access
.build(new CacheLoader<String, String>(){ // build the cacheloader
@Override
public String load(String category) throws Exception {
return getCategoryData(category);
}
});
}
private static String getCategoryData(String category) {
AmazonSQS queueClient = Queues.getQueue();
String resp = null;
try {
// Send a message
queueClient.sendMessage(new SendMessageRequest(Queues.req, category));
// Receive messages
Boolean flag = true;
while(flag) {
ReceiveMessageRequest receiveReq = new ReceiveMessageRequest(Queues.resp);
receiveReq.setWaitTimeSeconds(10);
List<Message> messages = queueClient.receiveMessage(receiveReq).getMessages();
for (Message message : messages) {
String[] strs = message.getBody().split("\\$");
if(strs[0].equals(category)) {
flag = false;
resp = strs[1];
queueClient.deleteMessage(new DeleteMessageRequest(Queues.resp, message.getReceiptHandle()));
break;
}
}
}
} catch (AmazonServiceException ase) {
System.out.println("Caught an AmazonServiceException, which means your request made it " +
"to Amazon SQS, but was rejected with an error response for some reason.");
System.out.println("Error Message: " + ase.getMessage());
System.out.println("HTTP Status Code: " + ase.getStatusCode());
System.out.println("AWS Error Code: " + ase.getErrorCode());
System.out.println("Error Type: " + ase.getErrorType());
System.out.println("Request ID: " + ase.getRequestId());
} catch (AmazonClientException ace) {
System.out.println("Caught an AmazonClientException, which means the client encountered " +
"a serious internal problem while trying to communicate with SQS, such as not " +
"being able to access the network.");
System.out.println("Error Message: " + ace.getMessage());
}
return resp;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response IIScDataProxyServer(@DefaultValue("AllCategories") @QueryParam("category") String category) {
String resp = null;
try {
resp = categoryCache.get(category);
} catch (ExecutionException e) {
e.printStackTrace();
}
return Response.ok(resp, MediaType.APPLICATION_JSON).header("Access-Control-Allow-Origin", "*").build();
}
}