changeset 705:498473c85300

Implement RESTStorage.getCount(). Reviewed-by: jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-October/003774.html
author Roman Kennke <rkennke@redhat.com>
date Fri, 19 Oct 2012 19:54:24 +0200
parents 77998c10737b
children 836bac77a113
files web/client/src/main/java/com/redhat/thermostat/web/client/RESTStorage.java web/client/src/test/java/com/redhat/thermostat/web/client/RESTStorageTest.java web/server/src/main/java/com/redhat/thermostat/web/server/RESTStorageEndPoint.java web/server/src/test/java/com/redhat/thermostat/web/server/RESTStorageEndpointTest.java
diffstat 4 files changed, 82 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/web/client/src/main/java/com/redhat/thermostat/web/client/RESTStorage.java	Fri Oct 19 19:53:15 2012 +0200
+++ b/web/client/src/main/java/com/redhat/thermostat/web/client/RESTStorage.java	Fri Oct 19 19:54:24 2012 +0200
@@ -201,9 +201,27 @@
     }
 
     @Override
-    public long getCount(Category arg0) {
-        // TODO Auto-generated method stub
-        return 0;
+    public long getCount(Category category) {
+        try {
+            URL url = new URL(endpoint + "/get-count");
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+            conn.setDoInput(true);
+            conn.setDoOutput(true);
+            conn.setRequestMethod("POST");
+            OutputStream out = conn.getOutputStream();
+            Gson gson = new Gson();
+            OutputStreamWriter writer = new OutputStreamWriter(out);
+            writer.write("category=");
+            gson.toJson(categoryIds.get(category), writer);
+            writer.write("\n");
+            writer.flush();
+
+            InputStream in = conn.getInputStream();
+            long result = gson.fromJson(new InputStreamReader(in), Long.class);
+            return result;
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
     }
 
     @Override
--- a/web/client/src/test/java/com/redhat/thermostat/web/client/RESTStorageTest.java	Fri Oct 19 19:53:15 2012 +0200
+++ b/web/client/src/test/java/com/redhat/thermostat/web/client/RESTStorageTest.java	Fri Oct 19 19:54:24 2012 +0200
@@ -372,4 +372,21 @@
         int value2 = gson.fromJson(jsonArray.get(1), Integer.class);
         assertEquals(42, value2);
     }
+
+    @Test
+    public void testGetCount() throws UnsupportedEncodingException, IOException {
+
+        Gson gson = new Gson();
+        responseBody = gson.toJson(12345);
+
+        long result = storage.getCount(category);
+
+        StringReader reader = new StringReader(requestBody);
+        BufferedReader bufRead = new BufferedReader(reader);
+        String line = URLDecoder.decode(bufRead.readLine(), "UTF-8");
+        String[] parts = line.split("=");
+        assertEquals("category", parts[0]);
+        assertEquals("42", parts[1]);
+        assertEquals(12345, result);
+    }
 }
--- a/web/server/src/main/java/com/redhat/thermostat/web/server/RESTStorageEndPoint.java	Fri Oct 19 19:53:15 2012 +0200
+++ b/web/server/src/main/java/com/redhat/thermostat/web/server/RESTStorageEndPoint.java	Fri Oct 19 19:54:24 2012 +0200
@@ -68,6 +68,24 @@
             removePojo(req, resp);
         } else if (cmd.equals("update-pojo")) {
             updatePojo(req, resp);
+        } else if (cmd.equals("get-count")) {
+            getCount(req, resp);
+        }
+    }
+
+    private void getCount(HttpServletRequest req, HttpServletResponse resp) {
+        try {
+            String categoryParam = req.getParameter("category");
+            int categoryId = gson.fromJson(categoryParam, Integer.class);
+            Category category = categories.get(categoryId);
+            long result = storage.getCount(category);
+            resp.setStatus(HttpServletResponse.SC_OK);
+            resp.setContentType("application/json");
+            gson.toJson(result, resp.getWriter());
+            resp.flushBuffer();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
         }
     }
 
--- a/web/server/src/test/java/com/redhat/thermostat/web/server/RESTStorageEndpointTest.java	Fri Oct 19 19:53:15 2012 +0200
+++ b/web/server/src/test/java/com/redhat/thermostat/web/server/RESTStorageEndpointTest.java	Fri Oct 19 19:54:24 2012 +0200
@@ -322,6 +322,32 @@
     }
 
 
+    @Test
+    public void testGetCount() throws IOException {
+
+        when(mockStorage.getCount(category)).thenReturn(12345L);
+        String endpoint = getEndpoint();
+
+        URL url = new URL(endpoint + "/get-count");
+        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+        conn.setDoOutput(true);
+        conn.setDoInput(true);
+        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+        Gson gson = new Gson();
+        OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
+        out.write("category=" + categoryId);
+        out.flush();
+
+        InputStream in = conn.getInputStream();
+        Reader reader = new InputStreamReader(in);
+        long result = gson.fromJson(reader, Long.class);
+        assertEquals(200, conn.getResponseCode());
+        assertEquals(12345, result);
+        verify(mockStorage).getCount(category);
+        
+    }
+
+
     private void registerCategory() {
         try {
             String endpoint = getEndpoint();