diff --git a/src/main/java/de/thm/arsnova/dao/NovaView.java b/src/main/java/de/thm/arsnova/dao/NovaView.java index 56e16c2d81003710cca44ab9dd7e294347d516a0..9c46b1b4f0a0292bdbe2131692054ac9b404997e 100644 --- a/src/main/java/de/thm/arsnova/dao/NovaView.java +++ b/src/main/java/de/thm/arsnova/dao/NovaView.java @@ -28,8 +28,14 @@ import com.fourspaces.couchdb.View; public class NovaView extends View { + public enum StaleMode { + NONE, OK, UPDATE_AFTER + } + protected String keys; + protected StaleMode stale = StaleMode.NONE; + public NovaView(final String fullname) { super(fullname); } @@ -89,6 +95,10 @@ public class NovaView extends View { this.keys = toJsonArray(keys.toArray(new String[keys.size()])); } + public void setStale(StaleMode stale) { + this.stale = stale; + } + @Override public String getQueryString() { final String tempQuery = super.getQueryString(); @@ -102,6 +112,16 @@ public class NovaView extends View { } query.append("keys=" + keys); } + if (stale != null && stale != StaleMode.NONE) { + if (query.length() > 0) { + query.append("&"); + } + if (stale == StaleMode.OK) { + query.append("stale=ok"); + } else if (stale == StaleMode.UPDATE_AFTER) { + query.append("stale=update_after"); + } + } if (query.length() == 0) { return null; diff --git a/src/test/java/de/thm/arsnova/dao/NovaViewTest.java b/src/test/java/de/thm/arsnova/dao/NovaViewTest.java index 2d8d14e6a9de99f38e4e5dc645df7aa1b7b4cf7f..dfe82630072019e4548c2f1a33af386a0a89823b 100644 --- a/src/test/java/de/thm/arsnova/dao/NovaViewTest.java +++ b/src/test/java/de/thm/arsnova/dao/NovaViewTest.java @@ -18,8 +18,7 @@ */ package de.thm.arsnova.dao; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -27,6 +26,8 @@ import java.util.Arrays; import org.junit.Test; +import de.thm.arsnova.dao.NovaView.StaleMode; + public class NovaViewTest { @Test @@ -133,6 +134,21 @@ public class NovaViewTest { assertEncodedEquals("keys", "[]", v5.getQueryString()); } + @Test + public void shouldSupportStaleViews() { + final NovaView v1 = new NovaView(null); + final NovaView v2 = new NovaView(null); + final NovaView v3 = new NovaView(null); + final NovaView v4 = new NovaView(null); + v1.setStale(StaleMode.NONE); + v2.setStale(StaleMode.OK); + v3.setStale(StaleMode.UPDATE_AFTER); + assertNull(v1.getQueryString()); + assertEncodedEquals("stale", "ok", v2.getQueryString()); + assertEncodedEquals("stale", "update_after", v3.getQueryString()); + assertNull(v4.getQueryString()); + } + private void assertEncodedEquals(final String key, final String expected, final String actual) { try { assertEquals(key + "=" + URLEncoder.encode(expected, "UTF-8"), actual);