diff --git a/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java b/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java index e510db3cea1818c59dcd68559e26e4995ebeba9d..a596f841fffd686b79c35edc480162bbdafaccd7 100644 --- a/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java +++ b/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java @@ -48,7 +48,7 @@ import com.tinkerpop.pipes.util.structures.Tree; * * @param <C> The cap of the current pipe. * @param <S> The SideEffect of the current pipe. - * @param <M> The current mark'ed type for the current pipe. + * @param <M> The current marked type for the current pipe. */ abstract class AbstractEdgeTraversal<C, S, M> extends AbstractTraversal<EdgeFrame, C, S, M> implements EdgeTraversal<C, S, M> { @@ -425,7 +425,7 @@ abstract class AbstractEdgeTraversal<C, S, M> extends AbstractTraversal<EdgeFram } @Override - public EdgeTraversal<?, ?, M> order(final Comparator<EdgeFrame> compareFunction) { + public EdgeTraversal<?, ?, M> order(final Comparator<? super EdgeFrame> compareFunction) { return (EdgeTraversal<?, ?, M>) super.order(compareFunction); } diff --git a/src/main/java/com/syncleus/ferma/AbstractTraversal.java b/src/main/java/com/syncleus/ferma/AbstractTraversal.java index 78df28fc6d89cfa3ce2e7ffb8e58458f1b29fb6b..edfc0ed32400d4f860cf8660503380e3ab4631b2 100644 --- a/src/main/java/com/syncleus/ferma/AbstractTraversal.java +++ b/src/main/java/com/syncleus/ferma/AbstractTraversal.java @@ -462,7 +462,7 @@ abstract class AbstractTraversal<T, C, S, M> implements Traversal<T, C, S, M> { } @Override - public Traversal<T, ?, ?, M> order(final Comparator<T> compareFunction) { + public Traversal<T, ?, ?, M> order(final Comparator<? super T> compareFunction) { final FramingComparator framingComparator = new FramingComparator(compareFunction, graph()); pipeline().order(new TraversalFunction<Pair<Object, Object>, Integer>() { diff --git a/src/main/java/com/syncleus/ferma/AbstractVertexTraversal.java b/src/main/java/com/syncleus/ferma/AbstractVertexTraversal.java index a011159e60b04dd56f047ecca4428ec91740f9e6..3da52fd1162734b8119781852866feee90c556d9 100644 --- a/src/main/java/com/syncleus/ferma/AbstractVertexTraversal.java +++ b/src/main/java/com/syncleus/ferma/AbstractVertexTraversal.java @@ -284,7 +284,7 @@ abstract class AbstractVertexTraversal<C, S, M> extends AbstractTraversal<Vertex } @Override - public VertexTraversal<?, ?, M> order(final Comparator<VertexFrame> compareFunction) { + public VertexTraversal<?, ?, M> order(final Comparator<? super VertexFrame> compareFunction) { return (VertexTraversal<?, ?, M>) super.order(compareFunction); } diff --git a/src/main/java/com/syncleus/ferma/Comparators.java b/src/main/java/com/syncleus/ferma/Comparators.java index 3392135dbeead681548b47de0e95ec1e12853644..a45d22ed439f9a81f1be89f98d6008507a36e3c0 100644 --- a/src/main/java/com/syncleus/ferma/Comparators.java +++ b/src/main/java/com/syncleus/ferma/Comparators.java @@ -34,55 +34,39 @@ import java.util.Comparator; * */ public class Comparators { + + private static final IdComparator ID_COMPARATOR = new IdComparator(); + private static final IdAsLongComparator ID_AS_LONG_COMPARATOR = new IdAsLongComparator(); /** * Creates a comparator that compares by ID. * - * @param <N> The type of framed element this comparator can compare. * @return The comparator. */ - public static <N extends ElementFrame> Comparator<N> id() { - return new Comparator<N>() { - @Override - public int compare(final N t, final N t1) { - final Comparable c1 = t.getId(); - final Comparable c2 = t1.getId(); - - return c1.compareTo(c2); - } - }; + public static Comparator<ElementFrame> id() { + return ID_COMPARATOR; } /** * Compare by id parsed as a long (Useful for tinkergraph) * - * @param <N> The type of framed element this comparator can compare. * @return The comparator. */ - public static <N extends ElementFrame> Comparator<N> idAsLong() { - return new Comparator<N>() { - @Override - public int compare(final N t, final N t1) { - final Long c1 = Long.parseLong((String) t.getId()); - final Long c2 = Long.parseLong((String) t1.getId()); - - return c1.compareTo(c2); - } - }; + public static Comparator<ElementFrame> idAsLong() { + return ID_AS_LONG_COMPARATOR; } /** * Compare by property. Note that no value may be null. * - * @param <N> The type of framed element this comparator can compare. * @param property * The property to compare by. * @return The result of comparing the property. */ - public static <N extends ElementFrame> Comparator<N> property(final String property) { - return new Comparator<N>() { + public static Comparator<ElementFrame> property(final String property) { + return new Comparator<ElementFrame>() { @Override - public int compare(final N t, final N t1) { + public int compare(final ElementFrame t, final ElementFrame t1) { final Comparable c1 = t.getProperty(property); final Comparable c2 = t1.getProperty(property); @@ -91,4 +75,23 @@ public class Comparators { }; } + private static final class IdComparator implements Comparator<ElementFrame> { + @Override + public int compare(final ElementFrame t, final ElementFrame t1) { + final Comparable c1 = t.getId(); + final Comparable c2 = t1.getId(); + + return c1.compareTo(c2); + } + } + + private static final class IdAsLongComparator implements Comparator<ElementFrame> { + @Override + public int compare(final ElementFrame t, final ElementFrame t1) { + final Long c1 = Long.parseLong((String) t.getId()); + final Long c2 = Long.parseLong((String) t1.getId()); + + return c1.compareTo(c2); + } + } } diff --git a/src/main/java/com/syncleus/ferma/EdgeTraversal.java b/src/main/java/com/syncleus/ferma/EdgeTraversal.java index c41696545660c1b49e5c9ef741986d16dd526d6b..05f2bea1dab8b769ad3f841200b52d1792eb24a1 100644 --- a/src/main/java/com/syncleus/ferma/EdgeTraversal.java +++ b/src/main/java/com/syncleus/ferma/EdgeTraversal.java @@ -443,7 +443,7 @@ public interface EdgeTraversal<C, S, M> extends Traversal<EdgeFrame, C, S, M> { EdgeTraversal<?, ?, M> order(TransformPipe.Order order); @Override - EdgeTraversal<?, ?, M> order(Comparator<EdgeFrame> compareFunction); + EdgeTraversal<?, ?, M> order(Comparator<? super EdgeFrame> compareFunction); @Override EdgeTraversal<?, ?, M> as(String name); diff --git a/src/main/java/com/syncleus/ferma/GlobalVertexTraversal.java b/src/main/java/com/syncleus/ferma/GlobalVertexTraversal.java index 4274f17aa064bc0f3c8d55b3f233ededff072b3d..c5e16b7b37006169284201d53ec5a1025e3e9717 100644 --- a/src/main/java/com/syncleus/ferma/GlobalVertexTraversal.java +++ b/src/main/java/com/syncleus/ferma/GlobalVertexTraversal.java @@ -578,7 +578,7 @@ public class GlobalVertexTraversal<C, S, M> implements VertexTraversal<C, S, M> } @Override - public VertexTraversal<?, ?, M> order(final Comparator<VertexFrame> compareFunction) { + public VertexTraversal<?, ?, M> order(final Comparator<? super VertexFrame> compareFunction) { return this.simpleDelegate().order(compareFunction); } diff --git a/src/main/java/com/syncleus/ferma/SimpleTraversal.java b/src/main/java/com/syncleus/ferma/SimpleTraversal.java index 5a41d4e25c09a4387e356d09090dadd9601e01f2..ccfb6de7fe0feb58809561f5a180dcd1d668423f 100644 --- a/src/main/java/com/syncleus/ferma/SimpleTraversal.java +++ b/src/main/java/com/syncleus/ferma/SimpleTraversal.java @@ -41,7 +41,7 @@ import com.tinkerpop.blueprints.Graph; * @param <T> The type of the objects coming off the pipe. * @param <C> The cap of the current pipe. * @param <S> The SideEffect of the current pipe. - * @param <M> The current mark'ed type for the current pipe. + * @param <M> The current marked type for the current pipe. */ class SimpleTraversal<T, C, S, M> extends AbstractTraversal<T, C, S, M> { diff --git a/src/main/java/com/syncleus/ferma/Traversal.java b/src/main/java/com/syncleus/ferma/Traversal.java index 49390f7200e3779ae4ed707f45669b6309dc9b53..1840f02ac286b0d45c0a08634dbe3772ad3ca685 100644 --- a/src/main/java/com/syncleus/ferma/Traversal.java +++ b/src/main/java/com/syncleus/ferma/Traversal.java @@ -621,7 +621,7 @@ public interface Traversal<T, C, S, M> extends Iterator<T>, Iterable<T> { * a comparator function of two objects of type e * @return the extended Pipeline */ - Traversal<T, ?, ?, M> order(Comparator<T> compareFunction); + Traversal<T, ?, ?, M> order(Comparator<? super T> compareFunction); /** * Wrap the previous step in an AsPipe. Useful for naming steps and is used diff --git a/src/main/java/com/syncleus/ferma/VertexTraversal.java b/src/main/java/com/syncleus/ferma/VertexTraversal.java index d38be92c8a384c38825008dc8fe786e3e2b4ee4e..56e897dc35c433f1b8c9a25cbff3b137fc978faf 100644 --- a/src/main/java/com/syncleus/ferma/VertexTraversal.java +++ b/src/main/java/com/syncleus/ferma/VertexTraversal.java @@ -706,7 +706,7 @@ public interface VertexTraversal<C, S, M> extends Traversal<VertexFrame, C, S, M VertexTraversal<?, ?, M> order(); @Override - VertexTraversal<?, ?, M> order(Comparator<VertexFrame> compareFunction); + VertexTraversal<?, ?, M> order(Comparator<? super VertexFrame> compareFunction); @Override VertexTraversal<?, ?, M> order(TransformPipe.Order order); diff --git a/src/test/java/com/syncleus/ferma/TraversalsTest.java b/src/test/java/com/syncleus/ferma/TraversalsTest.java index 841191ef3895f16d1dc31a01dda8ff172cc6860c..e7c325670e5fdfc044c7c1d11a8997cc1b6b8c69 100644 --- a/src/test/java/com/syncleus/ferma/TraversalsTest.java +++ b/src/test/java/com/syncleus/ferma/TraversalsTest.java @@ -190,7 +190,7 @@ public class TraversalsTest { Assert.assertEquals("josh", graph.v().property("name").order().next()); Assert.assertEquals("vadas", graph.v().property("name").order(Order.DECR).next()); - Assert.assertEquals(graph.v(2).next(), graph.v().order(Comparators.<VertexFrame>property("name")).out("knows").next()); + Assert.assertEquals(graph.v(2).next(), graph.v().order(Comparators.property("name")).out("knows").next()); }