diff --git a/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java b/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java index 9fee13f70386a63def309255fb9613e3af35569f..b9fa73d98466ef90ac2e77330ade01d61e728680 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 aecb1bf9bc452a6f64761291fe99aaedd820dbc0..d25bba7c10757da73934afbade34cc1661907851 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 c2b18d9cdd0222c7861e4430efaed4ca2cb7a8ea..4c7f751be9793880b176dd4b7f5880c63b431927 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();