From 4437659f4cd555df0de364e5335405a440ab4d98 Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Wed, 21 Aug 2013 14:42:33 +0200
Subject: [PATCH] Added number support for keys

---
 .../java/de/thm/arsnova/dao/NovaView.java     | 23 +++++++++++++++---
 .../java/de/thm/arsnova/dao/NovaViewTest.java | 24 +++++++++++++++++++
 2 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/dao/NovaView.java b/src/main/java/de/thm/arsnova/dao/NovaView.java
index 8079f45a..e4751bbf 100644
--- a/src/main/java/de/thm/arsnova/dao/NovaView.java
+++ b/src/main/java/de/thm/arsnova/dao/NovaView.java
@@ -35,7 +35,11 @@ public class NovaView extends View {
 	}
 
 	public void setStartKeyArray(String key) {
-		this.startKey = encode("[\"" + key + "\"]");
+		if (isNumber(key)) {
+			this.startKey = encode("[" + key + "]");
+		} else {
+			this.startKey = encode("[\"" + key + "\"]");
+		}
 	}
 
 	public void setStartKeyArray(String... keys) {
@@ -48,7 +52,11 @@ public class NovaView extends View {
 	}
 
 	public void setEndKeyArray(String key) {
-		this.endKey = encode("[\"" + key + "\"]");
+		if (isNumber(key)) {
+			this.endKey = encode("[" + key + "]");
+		} else {
+			this.endKey = encode("[\"" + key + "\"]");
+		}
 	}
 
 	public void setEndKeyArray(String... keys) {
@@ -75,7 +83,9 @@ public class NovaView extends View {
 	private String toJsonArray(String[] strings) {
 		StringBuilder sb = new StringBuilder();
 		for (String str : strings) {
-			if (str.equals("{}")) {
+			if (isNumber(str)) {
+				sb.append(str + ",");
+			} else if (str.equals("{}")) {
 				sb.append(str + ",");
 			} else {
 				sb.append("\"" + str + "\"" + ",");
@@ -88,8 +98,15 @@ public class NovaView extends View {
 	}
 
 	private String quote(String string) {
+		if (isNumber(string)) {
+			return encode(string);
+		}
 		return encode("\"" + string + "\"");
 	}
+	
+	private boolean isNumber(String string) {
+		return string.matches("^[0-9]+$");
+	}
 
 	private String encode(String string) {
 		try {
diff --git a/src/test/java/de/thm/arsnova/dao/NovaViewTest.java b/src/test/java/de/thm/arsnova/dao/NovaViewTest.java
index 802d33a0..e5c2530d 100644
--- a/src/test/java/de/thm/arsnova/dao/NovaViewTest.java
+++ b/src/test/java/de/thm/arsnova/dao/NovaViewTest.java
@@ -90,6 +90,30 @@ public class NovaViewTest {
 		assertEncodedEquals("key", "[\"foo\",\"bar\",{}]", v.getQueryString());
 	}
 
+	@Test
+	public void arrayKeysShouldNotEnquoteNumbers() {
+		NovaView v = new NovaView(null);
+		v.setKey("foo", "bar", "2");
+		assertEncodedEquals("key", "[\"foo\",\"bar\",2]", v.getQueryString());
+	}
+
+	@Test
+	public void singleKeysShouldNotEnquoteNumbers() {
+		NovaView v = new NovaView(null);
+		v.setKey("2");
+		assertEncodedEquals("key", "2", v.getQueryString());
+	}
+
+	@Test
+	public void singleArrayKeysShouldNotEnquoteNumbers() {
+		NovaView v1 = new NovaView(null);
+		NovaView v2 = new NovaView(null);
+		v1.setStartKeyArray("2");
+		v2.setEndKeyArray("2");
+		assertEncodedEquals("startkey", "[2]", v1.getQueryString());
+		assertEncodedEquals("endkey", "[2]", v2.getQueryString());
+	}
+
 	private void assertEncodedEquals(String key, String expected, String actual) {
 		try {
 			assertEquals(key + "=" + URLEncoder.encode(expected, "UTF-8"), actual);
-- 
GitLab