diff --git a/unleash-client-java/pom.xml b/unleash-client-java/pom.xml
index f43b1dea18..07b19f0fa8 100644
--- a/unleash-client-java/pom.xml
+++ b/unleash-client-java/pom.xml
@@ -67,8 +67,8 @@
maven-compiler-plugin
3.1
-
- 1.7
+
+ 1.8
diff --git a/unleash-client-java/src/main/no/finn/unleash/repository/HttpToggleFetcher.java b/unleash-client-java/src/main/no/finn/unleash/repository/HttpToggleFetcher.java
new file mode 100644
index 0000000000..df9abcc8c5
--- /dev/null
+++ b/unleash-client-java/src/main/no/finn/unleash/repository/HttpToggleFetcher.java
@@ -0,0 +1,64 @@
+package no.finn.unleash.repository;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Collection;
+import no.finn.unleash.Toggle;
+
+public final class HttpToggleFetcher implements ToggleFetcher {
+ public static final int CONNECT_TIMEOUT = 10000;
+ private String etag = null;
+
+ private final URL toggleUrl;
+
+ public HttpToggleFetcher(URI repo) {
+ try {
+ toggleUrl = repo.toURL();
+ } catch (MalformedURLException ex) {
+ throw new IllegalArgumentException("Invalid repo uri", ex);
+ }
+ }
+
+ @Override
+ public ToggleResponse fetchToggles() throws ToggleException {
+ HttpURLConnection connection = null;
+ try {
+ connection = (HttpURLConnection) toggleUrl.openConnection();
+ connection.setConnectTimeout(CONNECT_TIMEOUT);
+ connection.setReadTimeout(CONNECT_TIMEOUT);
+ connection.setRequestProperty("If-None-Match", etag);
+ connection.connect();
+
+ int responseCode = connection.getResponseCode();
+ if(responseCode < 300) {
+ return getToggleResponse(connection);
+ } else {
+ return new ToggleResponse(ToggleResponse.Status.NOT_CHANGED);
+ }
+ } catch (IOException e) {
+ throw new ToggleException("Could not fetch toggles", e);
+ } finally {
+ if(connection != null) {
+ connection.disconnect();
+ }
+ }
+ }
+
+ private ToggleResponse getToggleResponse(HttpURLConnection request) throws IOException {
+ etag = request.getHeaderField("ETag");
+
+ try(BufferedReader reader = new BufferedReader(
+ new InputStreamReader((InputStream) request.getContent(), StandardCharsets.UTF_8))) {
+
+ Collection toggles = JsonToggleParser.fromJson(reader);
+ return new ToggleResponse(ToggleResponse.Status.CHANGED, toggles);
+ }
+ }
+}
diff --git a/unleash-client-java/src/main/no/finn/unleash/repository/JsonToggleParser.java b/unleash-client-java/src/main/no/finn/unleash/repository/JsonToggleParser.java
index 67ccb536c6..9f905bce00 100644
--- a/unleash-client-java/src/main/no/finn/unleash/repository/JsonToggleParser.java
+++ b/unleash-client-java/src/main/no/finn/unleash/repository/JsonToggleParser.java
@@ -1,5 +1,6 @@
package no.finn.unleash.repository;
+import java.io.Reader;
import java.util.Collection;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -22,4 +23,9 @@ public final class JsonToggleParser {
Gson gson = new GsonBuilder().create();
return gson.fromJson(jsonString,ToggleCollection.class).getFeatures();
}
+
+ public static Collection fromJson(Reader reader) {
+ Gson gson = new GsonBuilder().create();
+ return gson.fromJson(reader,ToggleCollection.class).getFeatures();
+ }
}
diff --git a/unleash-client-java/src/main/no/finn/unleash/repository/ToggleException.java b/unleash-client-java/src/main/no/finn/unleash/repository/ToggleException.java
index 531fcbcca6..95cb07aa99 100644
--- a/unleash-client-java/src/main/no/finn/unleash/repository/ToggleException.java
+++ b/unleash-client-java/src/main/no/finn/unleash/repository/ToggleException.java
@@ -4,4 +4,8 @@ public class ToggleException extends RuntimeException {
public ToggleException(String message) {
super(message);
}
+
+ public ToggleException(String message, Throwable cause) {
+ super(message, cause);
+ }
}
diff --git a/unleash-client-java/src/main/no/finn/unleash/repository/ToggleFetcher.java b/unleash-client-java/src/main/no/finn/unleash/repository/ToggleFetcher.java
new file mode 100644
index 0000000000..bec57b7bae
--- /dev/null
+++ b/unleash-client-java/src/main/no/finn/unleash/repository/ToggleFetcher.java
@@ -0,0 +1,5 @@
+package no.finn.unleash.repository;
+
+public interface ToggleFetcher {
+ ToggleResponse fetchToggles() throws ToggleException;
+}
diff --git a/unleash-client-java/src/main/no/finn/unleash/repository/ToggleResponse.java b/unleash-client-java/src/main/no/finn/unleash/repository/ToggleResponse.java
new file mode 100644
index 0000000000..13d060f3c5
--- /dev/null
+++ b/unleash-client-java/src/main/no/finn/unleash/repository/ToggleResponse.java
@@ -0,0 +1,30 @@
+package no.finn.unleash.repository;
+
+import java.util.Collection;
+import java.util.Collections;
+import no.finn.unleash.Toggle;
+
+public final class ToggleResponse {
+ enum Status {NOT_CHANGED, CHANGED}
+
+ private final Status status;
+ private final Collection getToggles;
+
+ public ToggleResponse(Status status, Collection getToggles) {
+ this.status = status;
+ this.getToggles = getToggles;
+ }
+
+ public ToggleResponse(Status status) {
+ this.status = status;
+ this.getToggles = Collections.emptyList();
+ }
+
+ public Status getStatus() {
+ return status;
+ }
+
+ public Collection getGetToggles() {
+ return getToggles;
+ }
+}
diff --git a/unleash-client-java/src/test/no/finn/unleash/repository/HttpToggleFetcherTest.java b/unleash-client-java/src/test/no/finn/unleash/repository/HttpToggleFetcherTest.java
new file mode 100644
index 0000000000..7a0ee51447
--- /dev/null
+++ b/unleash-client-java/src/test/no/finn/unleash/repository/HttpToggleFetcherTest.java
@@ -0,0 +1,23 @@
+package no.finn.unleash.repository;
+
+import java.net.URI;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class HttpToggleFetcherTest {
+
+
+ @Test
+ @Ignore
+ public void explore() {
+ HttpToggleFetcher httpToggleFetcher = new HttpToggleFetcher(URI.create("http://localhost:4242/features"));
+
+ ToggleResponse toggleResponse = httpToggleFetcher.fetchToggles();
+ toggleResponse = httpToggleFetcher.fetchToggles();
+ System.out.println("toggleResponse = " + toggleResponse);
+
+ }
+
+}
\ No newline at end of file
diff --git a/unleash-server/lib/eventMock.js b/unleash-server/lib/eventMock.js
deleted file mode 100644
index 5fac2c1945..0000000000
--- a/unleash-server/lib/eventMock.js
+++ /dev/null
@@ -1,53 +0,0 @@
-module.exports = [
- {
- "id": 1,
- "created": "2014-08-01 12:22:00",
- "type": "feature-create",
- "user": "John, Doe",
- "comment": "Optional comment",
- "data": {
- "name": "com.example.feature",
- "status": "off",
- "strategy": "default",
- "description": "Feature description"
- }
- },
- {
- "id": 2,
- "created": "2014-09-02 15:23:11",
- "type": "feature-update",
- "user": "User name",
- "comment": "Optional comment",
- "data": {
- "name": "com.example.feature",
- "status": "on"
- }
- },
- {
- "id": 3,
- "created": "1970-01-01 00:00:00",
- "type": "strategy-create",
- "user": "User name",
- "comment": "Optional comment",
- "data": {
- "name": "strategyA",
- "parameters_template": {
- "users": "example values",
- "target_age": "number"
- }
- }
- },
- {
- "id": 4,
- "created": "1970-01-01 00:00:00",
- "type": "strategy-update",
- "user": "localhost.localdomain",
- "comment": "commit message goes here",
- "data": {
- "name": "strategyA",
- "parameters_template": {
- "users": "new default example values"
- }
- }
- }
-];
\ No newline at end of file