Merge pull request #4 from EmergentOrder/develop
Add methods for batch event creation, example
diff --git a/client/src/main/java/io/prediction/FileExporter.java b/client/src/main/java/io/prediction/FileExporter.java
new file mode 100644
index 0000000..7919ee9
--- /dev/null
+++ b/client/src/main/java/io/prediction/FileExporter.java
@@ -0,0 +1,64 @@
+package io.prediction;
+
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Map;
+import org.joda.time.DateTime;
+
+public class FileExporter {
+
+ private FileOutputStream out;
+
+ public FileExporter(String pathname) throws FileNotFoundException {
+ out = new FileOutputStream(pathname);
+ }
+
+ /**
+ * Create and write a json-encoded event to the underlying file.
+ *
+ * @param eventName Name of the event.
+ * @param entityType The entity type.
+ * @param entityId The entity ID.
+ * @param targetEntityType The target entity type (optional).
+ * @param targetEntityId The target entity ID (optional).
+ * @param properties Properties (optional).
+ * @param eventTime The time of the event (optional).
+ * @throws IOException
+ */
+ public void createEvent(String eventName, String entityType, String entityId,
+ String targetEntityType, String targetEntityId, Map<String, Object> properties,
+ DateTime eventTime) throws IOException {
+
+ if (eventTime == null) {
+ eventTime = new DateTime();
+ }
+
+ Event event = new Event()
+ .event(eventName)
+ .entityType(entityType)
+ .entityId(entityId)
+ .eventTime(eventTime);
+
+ if (targetEntityType != null) {
+ event.targetEntityType(targetEntityType);
+ }
+
+ if (targetEntityId != null) {
+ event.targetEntityId(targetEntityId);
+ }
+
+ if (properties != null) {
+ event.properties(properties);
+ }
+
+ out.write(event.toJsonString().getBytes("UTF8"));
+ out.write('\n');
+ }
+
+ public void close() throws IOException {
+ out.close();
+ }
+
+}
diff --git a/client/src/test/java/io/prediction/FileExporterTest.java b/client/src/test/java/io/prediction/FileExporterTest.java
new file mode 100644
index 0000000..a5c7759
--- /dev/null
+++ b/client/src/test/java/io/prediction/FileExporterTest.java
@@ -0,0 +1,116 @@
+package io.prediction;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.joda.time.DateTime;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import static org.junit.Assert.*;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class FileExporterTest {
+
+ @Rule
+ public TemporaryFolder folder = new TemporaryFolder();
+
+ @Test
+ public void testIt() throws IOException {
+
+ String pathname = folder.getRoot().getCanonicalPath() + "/testIt.out";
+
+ FileExporter exporter = new FileExporter(pathname);
+
+ Map<String, Object> properties = new HashMap<>();
+ properties.put("birthday", new DateTime("1758-05-06T00:00:00+00:00"));
+
+ DateTime then = new DateTime("1794-07-27T00:00:00+00:00");
+
+ exporter.createEvent("event-1", "entity-type-1", "entity-id-1",
+ null, null, null, null);
+
+ exporter.createEvent("event-2", "entity-type-2", "entity-id-2",
+ "target-entity-type-2", null, null, null);
+
+ exporter.createEvent("event-3", "entity-type-3", "entity-id-3",
+ null, "target-entity-id-3", null, null);
+
+ exporter.createEvent("event-4", "entity-type-4", "entity-id-4",
+ null, null, properties, then);
+
+ exporter.createEvent("event-5", "entity-type-5", "entity-id-5",
+ "target-entity-type-5", "target-entity-id-5", properties, then);
+
+ exporter.close();
+
+ File out = new File(pathname);
+ assertTrue(pathname + " exists", out.exists());
+
+ BufferedReader reader = new BufferedReader(new FileReader(pathname));
+
+ GsonBuilder gsonBuilder = new GsonBuilder();
+ gsonBuilder.registerTypeAdapter(DateTime.class, new DateTimeAdapter());
+ Gson gson = gsonBuilder.create();
+
+ String json1 = reader.readLine();
+ Event event1 = gson.fromJson(json1, Event.class);
+ assertEquals("event-1", event1.getEvent());
+ assertEquals("entity-type-1", event1.getEntityType());
+ assertEquals("entity-id-1", event1.getEntityId());
+ assertNull(event1.getTargetEntityType());
+ assertNull(event1.getTargetEntityId());
+ assertTrue(event1.getProperties().isEmpty());
+ assertEquals(new DateTime().getMillis(), event1.getEventTime().getMillis(), 1000);
+
+ String json2 = reader.readLine();
+ Event event2 = gson.fromJson(json2, Event.class);
+ assertEquals("event-2", event2.getEvent());
+ assertEquals("entity-type-2", event2.getEntityType());
+ assertEquals("entity-id-2", event2.getEntityId());
+ assertEquals("target-entity-type-2", event2.getTargetEntityType());
+ assertNull(event2.getTargetEntityId());
+ assertTrue(event2.getProperties().isEmpty());
+ assertEquals(new DateTime().getMillis(), event2.getEventTime().getMillis(), 1000);
+
+ String json3 = reader.readLine();
+ Event event3 = gson.fromJson(json3, Event.class);
+ assertEquals("event-3", event3.getEvent());
+ assertEquals("entity-type-3", event3.getEntityType());
+ assertEquals("entity-id-3", event3.getEntityId());
+ assertNull(event3.getTargetEntityType());
+ assertEquals("target-entity-id-3", event3.getTargetEntityId());
+ assertTrue(event3.getProperties().isEmpty());
+ assertEquals(new DateTime().getMillis(), event3.getEventTime().getMillis(), 1000);
+
+ String json4 = reader.readLine();
+ Event event4 = gson.fromJson(json4, Event.class);
+ assertEquals("event-4", event4.getEvent());
+ assertEquals("entity-type-4", event4.getEntityType());
+ assertEquals("entity-id-4", event4.getEntityId());
+ assertNull(event4.getTargetEntityType());
+ assertNull(event4.getTargetEntityId());
+ assertEquals(1, event4.getProperties().size());
+ assertEquals(properties.get("birthday"), new DateTime(event4.getProperties().get("birthday")));
+ assertEquals(then.getMillis(), event4.getEventTime().getMillis());
+
+ String json5 = reader.readLine();
+ Event event5 = gson.fromJson(json5, Event.class);
+ assertEquals("event-5", event5.getEvent());
+ assertEquals("entity-type-5", event5.getEntityType());
+ assertEquals("entity-id-5", event5.getEntityId());
+ assertEquals("target-entity-type-5", event5.getTargetEntityType());
+ assertEquals("target-entity-id-5", event5.getTargetEntityId());
+ assertEquals(1, event5.getProperties().size());
+ assertEquals(properties.get("birthday"), new DateTime(event5.getProperties().get("birthday")));
+ assertEquals(then.getMillis(), event4.getEventTime().getMillis());
+
+ String empty = reader.readLine();
+ assertNull("no more data", empty);
+ }
+}