From dfe5bd4ae976b3daf90641ff77afda8a79e3ed82 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com> Date: Fri, 5 Dec 2014 00:07:56 -0500 Subject: [PATCH] Cleaned up the comparators class and changed a few instances of related typing. Issue: FMA-58 Issue: FMA-54 Change-Id: If444216ec332b7e5a48d702d19ff1e82aef5a048 --- .../syncleus/ferma/AbstractEdgeTraversal.java | 4 +- .../com/syncleus/ferma/AbstractTraversal.java | 2 +- .../ferma/AbstractVertexTraversal.java | 2 +- .../java/com/syncleus/ferma/Comparators.java | 55 ++++++++++--------- .../com/syncleus/ferma/EdgeTraversal.java | 2 +- .../syncleus/ferma/GlobalVertexTraversal.java | 2 +- .../com/syncleus/ferma/SimpleTraversal.java | 2 +- .../java/com/syncleus/ferma/Traversal.java | 2 +- .../com/syncleus/ferma/VertexTraversal.java | 2 +- .../com/syncleus/ferma/TraversalsTest.java | 2 +- 10 files changed, 39 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java b/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java index e510db3c..a596f841 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 78df28fc..edfc0ed3 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 a011159e..3da52fd1 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 3392135d..a45d22ed 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 c4169654..05f2bea1 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 4274f17a..c5e16b7b 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 5a41d4e2..ccfb6de7 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 49390f72..1840f02a 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 d38be92c..56e897dc 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 841191ef..e7c32567 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()); } -- GitLab