From 62a5007de438c41af154db3f53ea4eed3660a266 Mon Sep 17 00:00:00 2001 From: Patrick Beuks <code@beuks.net> Date: Sun, 5 May 2019 15:09:35 +0200 Subject: [PATCH] Added keyValues for addFramedVertex with class type ###--------------------------------------------------------### feat(internal): Added keyValues for addFramedVertex with class type Added the function `<T> T addFramedVertex(final Class<T> kind, final Object... keyValues)` as a way to add key values to vertex elements. This includes tests for this new function. ###--------------------------------------------------------### --- .../syncleus/ferma/DelegatingFramedGraph.java | 5 ++ .../java/com/syncleus/ferma/FramedGraph.java | 12 +++++ .../com/syncleus/ferma/FramedGraphTest.java | 47 +++++++++++++++++++ 3 files changed, 64 insertions(+) diff --git a/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java b/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java index 9fee13f7..b9fa73d9 100644 --- a/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java +++ b/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java @@ -324,6 +324,11 @@ public class DelegatingFramedGraph<G extends Graph> implements WrappedFramedGrap } } + @Override + public <T> T addFramedVertex(final Class<T> kind, final Object... keyValues) { + return this.addFramedVertex(new DefaultClassInitializer<>(kind), keyValues); + } + @Override public <T> T addFramedVertex(final Class<T> kind) { return this.addFramedVertex(new DefaultClassInitializer<>(kind)); diff --git a/src/main/java/com/syncleus/ferma/FramedGraph.java b/src/main/java/com/syncleus/ferma/FramedGraph.java index aecb1bf9..d25bba7c 100644 --- a/src/main/java/com/syncleus/ferma/FramedGraph.java +++ b/src/main/java/com/syncleus/ferma/FramedGraph.java @@ -51,6 +51,18 @@ public interface FramedGraph extends AutoCloseable { * @return The framed vertex. */ <T> T addFramedVertex(ClassInitializer<T> initializer, Object... keyValues); + + /** + * Add a vertex to the graph + * + * @param <T> The type used to frame the element. + * @param kind + * The kind of the frame. + * @param keyValues + * the recommended object identifier + * @return The framed vertex. + */ + <T> T addFramedVertex(Class<T> kind, Object... keyValues); /** * Add a vertex to the graph diff --git a/src/test/java/com/syncleus/ferma/FramedGraphTest.java b/src/test/java/com/syncleus/ferma/FramedGraphTest.java index c2b18d9c..4c7f751b 100644 --- a/src/test/java/com/syncleus/ferma/FramedGraphTest.java +++ b/src/test/java/com/syncleus/ferma/FramedGraphTest.java @@ -28,6 +28,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.MockitoAnnotations; import com.syncleus.ferma.typeresolvers.PolymorphicTypeResolver; +import org.apache.tinkerpop.gremlin.structure.T; public class FramedGraphTest { @@ -214,6 +215,52 @@ public class FramedGraphTest { Assert.assertNotNull(julia.getElement().property(PolymorphicTypeResolver.TYPE_RESOLUTION_KEY).value()); } + @Test + public void testKeyValues() { + final Graph g = TinkerGraph.open(); + final FramedGraph fg = new DelegatingFramedGraph(g, true, false); + + final Person p1 = fg.addFramedVertex(Programmer.DEFAULT_INITIALIZER, "key", "value"); + p1.setName("Bryn"); + + final Person p2 = fg.addFramedVertex(Person.DEFAULT_INITIALIZER, T.label, "label"); + p2.setName("Julia"); + + final Person bryn = fg.traverse( + input -> input.V().has("key", "value")).next(Person.class); + final Person julia = fg.traverse( + input -> input.V().hasLabel("label")).next(Person.class); + + Assert.assertEquals(Programmer.class, bryn.getClass()); + Assert.assertEquals(Person.class, julia.getClass()); + + Assert.assertNotNull(bryn.getElement().property(PolymorphicTypeResolver.TYPE_RESOLUTION_KEY).value()); + Assert.assertNotNull(julia.getElement().property(PolymorphicTypeResolver.TYPE_RESOLUTION_KEY).value()); + } + + @Test + public void testKeyValuesByClass() { + final Graph g = TinkerGraph.open(); + final FramedGraph fg = new DelegatingFramedGraph(g, true, false); + + final Person p1 = fg.addFramedVertex(Programmer.class, "key", "value"); + p1.setName("Bryn"); + + final Person p2 = fg.addFramedVertex(Person.class, T.label, "label"); + p2.setName("Julia"); + + final Person bryn = fg.traverse( + input -> input.V().has("key", "value")).next(Person.class); + final Person julia = fg.traverse( + input -> input.V().hasLabel("label")).next(Person.class); + + Assert.assertEquals(Programmer.class, bryn.getClass()); + Assert.assertEquals(Person.class, julia.getClass()); + + Assert.assertNotNull(bryn.getElement().property(PolymorphicTypeResolver.TYPE_RESOLUTION_KEY).value()); + Assert.assertNotNull(julia.getElement().property(PolymorphicTypeResolver.TYPE_RESOLUTION_KEY).value()); + } + @Test public void testJavaTypingAddExplicit() { final Graph g = TinkerGraph.open(); -- GitLab