Author: olamy
Date: Mon Feb 20 16:52:56 2012
New Revision: 1291366

URL: http://svn.apache.org/viewvc?rev=1291366&view=rev
Log:
[DIRECTMEMORY-61] start refactoring to be able to handle various Content-Type.

Modified:
    
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
    
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java

Modified: 
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java?rev=1291366&r1=1291365&r2=1291366&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
 (original)
+++ 
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
 Mon Feb 20 16:52:56 2012
@@ -34,6 +34,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.MediaType;
 import java.io.IOException;
 
 /**
@@ -93,24 +94,34 @@ public class CacheServlet
         String servletPath = req.getServletPath();
         String key = retrieveKeyFromPath( path );
 
-        try
+        String contentType = req.getContentType();
+
+        if ( StringUtils.startsWith( contentType, MediaType.APPLICATION_JSON ) 
)
         {
-            DirectMemoryCacheRequest cacheRequest = parser.buildRequest( 
req.getInputStream() );
+            //         application/json
 
-            //exists ?
-            if ( cacheService.retrieveByteArray( key ) == null )
+            try
             {
-                cacheService.putByteArray( key, 
cacheRequest.getCacheContent(), cacheRequest.getExpiresIn() );
+                DirectMemoryCacheRequest cacheRequest = parser.buildRequest( 
req.getInputStream() );
+
+                //exists ?
+                if ( cacheService.retrieveByteArray( key ) == null )
+                {
+                    cacheService.putByteArray( key, 
cacheRequest.getCacheContent(), cacheRequest.getExpiresIn() );
+                }
+                else
+                {
+                    cacheService.updateByteArray( key, 
cacheRequest.getCacheContent() );
+                }
             }
-            else
+            catch ( DirectMemoryCacheException e )
             {
-                cacheService.updateByteArray( key, 
cacheRequest.getCacheContent() );
+                resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
e.getMessage() );
             }
+            return;
         }
-        catch ( DirectMemoryCacheException e )
-        {
-            resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
e.getMessage() );
-        }
+        resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                        "Content-Type '" + contentType + "' not supported" );
     }
 
     @Override
@@ -121,7 +132,7 @@ public class CacheServlet
         String servletPath = req.getServletPath();
         String key = retrieveKeyFromPath( path );
 
-        // TODO if key == null -> BAD_REQUEST http response
+        // TODO if key == null -> BAD_REQUEST http response or SC_NO_CONTENT 
(olamy: I prefer SC_NO_CONTENT )
 
         cacheService.free( key );
     }
@@ -148,18 +159,29 @@ public class CacheServlet
             resp.sendError( HttpServletResponse.SC_NO_CONTENT, "No content for 
key: " + key );
             return;
         }
-        DirectMemoryCacheResponse response = new 
DirectMemoryCacheResponse().setKey( key ).setCacheContent( bytes );
 
-        try
-        {
-            // TODO directly write in output stream
-            String json = writer.generateJsonResponse( response );
-            resp.getWriter().write( json );
-        }
-        catch ( DirectMemoryCacheException e )
+        String acceptContentType = req.getHeader( "Accept" );
+
+        if ( StringUtils.contains( acceptContentType, 
MediaType.APPLICATION_JSON ) )
         {
-            resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
e.getMessage() );
+            DirectMemoryCacheResponse response = new 
DirectMemoryCacheResponse().setKey( key ).setCacheContent( bytes );
+
+            try
+            {
+                // TODO directly write in output stream
+                String json = writer.generateJsonResponse( response );
+                resp.getWriter().write( json );
+                resp.setContentType( MediaType.APPLICATION_JSON );
+            }
+            catch ( DirectMemoryCacheException e )
+            {
+                resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 
e.getMessage() );
+            }
+            return;
         }
+
+        resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                        "you must specify Accept with Content-Type you want in 
the response" );
     }
 
     /**

Modified: 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java?rev=1291366&r1=1291365&r2=1291366&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java
 (original)
+++ 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java
 Mon Feb 20 16:52:56 2012
@@ -34,6 +34,7 @@ import org.springframework.mock.web.Mock
 import org.springframework.mock.web.MockServletContext;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.MediaType;
 import java.io.ByteArrayInputStream;
 
 import static org.junit.Assert.assertEquals;
@@ -70,6 +71,7 @@ public class CacheServletTest
     {
 
         MockHttpServletRequest request = new MockHttpServletRequest();
+        request.addHeader( "Accept", MediaType.APPLICATION_JSON );
 
         MockHttpServletResponse response = new MockHttpServletResponse();
 
@@ -86,6 +88,7 @@ public class CacheServletTest
     {
 
         MockHttpServletRequest request = new MockHttpServletRequest();
+        request.addHeader( "Accept", MediaType.APPLICATION_JSON );
 
         request.setServletPath( "cache" );
 
@@ -115,6 +118,8 @@ public class CacheServletTest
 
         MockHttpServletRequest putRequest = new MockHttpServletRequest();
 
+        putRequest.setContentType( MediaType.APPLICATION_JSON );
+
         putRequest.setServletPath( "cache" );
 
         putRequest.setPathInfo( "/bordeaux" );
@@ -131,6 +136,8 @@ public class CacheServletTest
 
         MockHttpServletRequest getRequest = new MockHttpServletRequest();
 
+        getRequest.addHeader( "Accept", MediaType.APPLICATION_JSON );
+
         getRequest.setPathInfo( "/bordeaux" );
 
         MockHttpServletResponse getResponse = new MockHttpServletResponse();
@@ -139,6 +146,8 @@ public class CacheServletTest
 
         assertEquals( HttpServletResponse.SC_OK, getResponse.getStatus() );
 
+        assertEquals( MediaType.APPLICATION_JSON, getResponse.getContentType() 
);
+
         DirectMemoryCacheResponse response =
             parser.buildResponse( new ByteArrayInputStream( 
getResponse.getContentAsByteArray() ) );
 
@@ -166,6 +175,8 @@ public class CacheServletTest
 
         MockHttpServletRequest putRequest = new MockHttpServletRequest();
 
+        putRequest.setContentType( MediaType.APPLICATION_JSON );
+
         putRequest.setServletPath( "cache" );
 
         putRequest.setPathInfo( "/bordeaux" );
@@ -184,6 +195,8 @@ public class CacheServletTest
 
         MockHttpServletRequest getRequest = new MockHttpServletRequest();
 
+        getRequest.addHeader( "Accept", MediaType.APPLICATION_JSON );
+
         getRequest.setPathInfo( "/bordeaux" );
 
         MockHttpServletResponse getResponse = new MockHttpServletResponse();
@@ -212,6 +225,8 @@ public class CacheServletTest
 
         MockHttpServletRequest putRequest = new MockHttpServletRequest();
 
+        putRequest.setContentType( MediaType.APPLICATION_JSON );
+
         putRequest.setServletPath( "cache" );
 
         putRequest.setPathInfo( "/bordeaux" );
@@ -228,6 +243,8 @@ public class CacheServletTest
 
         MockHttpServletRequest getRequest = new MockHttpServletRequest();
 
+        getRequest.addHeader( "Accept", MediaType.APPLICATION_JSON );
+
         getRequest.setPathInfo( "/bordeaux" );
 
         MockHttpServletResponse getResponse = new MockHttpServletResponse();
@@ -236,6 +253,8 @@ public class CacheServletTest
 
         assertEquals( HttpServletResponse.SC_OK, getResponse.getStatus() );
 
+        assertEquals( MediaType.APPLICATION_JSON, getResponse.getContentType() 
);
+
         DirectMemoryCacheResponse response =
             parser.buildResponse( new ByteArrayInputStream( 
getResponse.getContentAsByteArray() ) );
 
@@ -260,6 +279,8 @@ public class CacheServletTest
 
         getRequest = new MockHttpServletRequest();
 
+        getRequest.addHeader( "Accept", MediaType.APPLICATION_JSON );
+
         getRequest.setPathInfo( "/bordeaux" );
 
         getResponse = new MockHttpServletResponse();


Reply via email to