diff --git a/src/main/java/com/syncleus/ferma/framefactories/annotation/AdjacencyMethodHandler.java b/src/main/java/com/syncleus/ferma/framefactories/annotation/AdjacencyMethodHandler.java index 39486bdece..ff3eb22331 100644 --- a/src/main/java/com/syncleus/ferma/framefactories/annotation/AdjacencyMethodHandler.java +++ b/src/main/java/com/syncleus/ferma/framefactories/annotation/AdjacencyMethodHandler.java @@ -75,10 +75,10 @@ else if (ReflectionUtility.isGetMethod(method)) if (arguments == null || arguments.length == 0) { if( ReflectionUtility.returnsIterator(method) ) return this.getVertexesIteratorDefault(builder, method, annotation); - else if( ReflectionUtility.returnsList(method) ) - return this.getVertexesListDefault(builder, method, annotation); else if( ReflectionUtility.returnsSet(method) ) return this.getVertexesSetDefault(builder, method, annotation); + else if( ReflectionUtility.returnsIterable(method) ) + return this.getVertexesListDefault(builder, method, annotation); return this.getVertexDefault(builder, method, annotation); } diff --git a/src/main/java/com/syncleus/ferma/framefactories/annotation/ReflectionUtility.java b/src/main/java/com/syncleus/ferma/framefactories/annotation/ReflectionUtility.java index 14d8bfc929..b9707d0df5 100644 --- a/src/main/java/com/syncleus/ferma/framefactories/annotation/ReflectionUtility.java +++ b/src/main/java/com/syncleus/ferma/framefactories/annotation/ReflectionUtility.java @@ -19,7 +19,6 @@ import com.syncleus.ferma.annotations.Adjacency; import com.syncleus.ferma.annotations.Incidence; import com.syncleus.ferma.annotations.Property; -import org.apache.tinkerpop.gremlin.structure.Vertex; import java.lang.reflect.*; import java.util.*; @@ -176,6 +175,10 @@ public static boolean returnsIterator(final Method method) { return Iterator.class.isAssignableFrom(method.getReturnType()); } + public static boolean returnsIterable(final Method method) { + return Iterable.class.isAssignableFrom(method.getReturnType()); + } + public static boolean returnsList(final Method method) { return List.class.isAssignableFrom(method.getReturnType()); } diff --git a/src/test/java/com/syncleus/ferma/annotations/AdjacencyMethodHandlerTest.java b/src/test/java/com/syncleus/ferma/annotations/AdjacencyMethodHandlerTest.java index 750230d46d..712dc3a53c 100644 --- a/src/test/java/com/syncleus/ferma/annotations/AdjacencyMethodHandlerTest.java +++ b/src/test/java/com/syncleus/ferma/annotations/AdjacencyMethodHandlerTest.java @@ -89,6 +89,30 @@ public void testGetSonsListDefault() { Assert.assertTrue(child instanceof GodExtended); } + @Test + public void testGetSonsIterableDefault() { + + GodGraphLoader.load(godGraph); + + final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES); + + final List gods = framedGraph.traverse( + input -> input.V().has("name", "jupiter")).toList(God.class); + + final God father = gods.iterator().next(); + Assert.assertTrue(father != null); + final VertexFrame fatherVertex = father; + Assert.assertEquals(fatherVertex.getProperty("name"), "jupiter"); + + final Iterable children = father.getSonsIterable(); + Assert.assertTrue(children.iterator().hasNext()); + final God child = children.iterator().next(); + Assert.assertTrue(child != null); + final VertexFrame childVertex = child; + Assert.assertEquals(childVertex.getElement().property("name").value(), "hercules"); + Assert.assertTrue(child instanceof GodExtended); + } + @Test public void testGetSonsSetDefault() { diff --git a/src/test/java/com/syncleus/ferma/annotations/God.java b/src/test/java/com/syncleus/ferma/annotations/God.java index 55ce0865e4..851c4b7d75 100644 --- a/src/test/java/com/syncleus/ferma/annotations/God.java +++ b/src/test/java/com/syncleus/ferma/annotations/God.java @@ -56,6 +56,9 @@ public interface God extends VertexFrame { @Adjacency(label = "father", direction = Direction.IN) List getSonsList(); + @Adjacency(label = "father", direction = Direction.IN) + Iterable getSonsIterable(); + @Adjacency(label = "father", direction = Direction.IN) Set getSonsSet();