You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2014/01/15 20:44:07 UTC

svn commit: r1558552 - in /lucene/dev/branches/lucene539399/solr/core/src/java/org/apache/solr/search: MissingStringLastComparatorSource.java Sorting.java

Author: rmuir
Date: Wed Jan 15 19:44:06 2014
New Revision: 1558552

URL: http://svn.apache.org/r1558552
Log:
LUCENE-5399: remove code duplication

Removed:
    lucene/dev/branches/lucene539399/solr/core/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java
Modified:
    lucene/dev/branches/lucene539399/solr/core/src/java/org/apache/solr/search/Sorting.java

Modified: lucene/dev/branches/lucene539399/solr/core/src/java/org/apache/solr/search/Sorting.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene539399/solr/core/src/java/org/apache/solr/search/Sorting.java?rev=1558552&r1=1558551&r2=1558552&view=diff
==============================================================================
--- lucene/dev/branches/lucene539399/solr/core/src/java/org/apache/solr/search/Sorting.java (original)
+++ lucene/dev/branches/lucene539399/solr/core/src/java/org/apache/solr/search/Sorting.java Wed Jan 15 19:44:06 2014
@@ -40,18 +40,25 @@ public class Sorting {
    * @return SortField
    */
   public static SortField getStringSortField(String fieldName, boolean reverse, boolean nullLast, boolean nullFirst) {
-    if (nullLast) {
-      if (!reverse) return new SortField(fieldName, nullStringLastComparatorSource);
-      else return new SortField(fieldName, SortField.Type.STRING, true);
-    } else if (nullFirst) {
-      if (reverse) return new SortField(fieldName, nullStringLastComparatorSource, true);
-      else return new SortField(fieldName, SortField.Type.STRING, false);
-    } else {
-      return new SortField(fieldName, SortField.Type.STRING, reverse);
+    if (nullFirst && nullLast) {
+      throw new IllegalArgumentException("Cannot specify missing values as both first and last");
     }
-  }
 
+    SortField sortField = new SortField(fieldName, SortField.Type.STRING, reverse);
+
+    // 4 cases:
+    // missingFirst / forward: default lucene behavior
+    // missingFirst / reverse: set sortMissingLast
+    // missingLast  / forward: set sortMissingLast
+    // missingLast  / reverse: default lucene behavior
+    
+    if (nullFirst && reverse) {
+      sortField.setMissingValue(SortField.STRING_LAST);
+    } else if (nullLast && !reverse) {
+      sortField.setMissingValue(SortField.STRING_LAST);
+    }
 
-  static final FieldComparatorSource nullStringLastComparatorSource = new MissingStringLastComparatorSource(null);
+    return sortField;
+  }
 }