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