]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5429 Ignore incorrect sort
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 31 Jul 2014 08:28:09 +0000 (10:28 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 31 Jul 2014 08:28:09 +0000 (10:28 +0200)
server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterFactory.java
server/sonar-server/src/test/java/org/sonar/server/measure/MeasureFilterFactoryTest.java
server/sonar-web/src/main/webapp/WEB-INF/app/helpers/measures_helper.rb

index 06d5143a6d06e52cd3a2177d3ba8c73039417512..ef1d68bd1c36b54250539d76a856824df46cf5a4 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.server.measure;
 import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.base.Strings;
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.ServerComponent;
@@ -33,11 +34,10 @@ import org.sonar.api.utils.System2;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+
+import java.util.*;
+
+import static com.google.common.collect.Lists.newArrayList;
 
 public class MeasureFilterFactory implements ServerComponent {
 
@@ -111,7 +111,10 @@ public class MeasureFilterFactory implements ServerComponent {
           }
         }
       } else {
-        filter.setSortOn(MeasureFilterSort.Field.valueOf(s.toUpperCase()));
+        String sort = s.toUpperCase();
+        if (sortFieldLabels().contains(sort)) {
+          filter.setSortOn(MeasureFilterSort.Field.valueOf(sort));
+        }
       }
     }
 
@@ -120,6 +123,15 @@ public class MeasureFilterFactory implements ServerComponent {
     }
   }
 
+  private List<String> sortFieldLabels(){
+    return newArrayList(Iterables.transform(Arrays.asList(MeasureFilterSort.Field.values()), new Function<MeasureFilterSort.Field, String>() {
+      @Override
+      public String apply(@Nullable MeasureFilterSort.Field input) {
+        return input != null ? input.name() : null;
+      }
+    }));
+  }
+
   @CheckForNull
   private MeasureFilterCondition toCondition(Map<String, Object> props, int index) {
     MeasureFilterCondition condition = null;
@@ -139,7 +151,7 @@ public class MeasureFilterFactory implements ServerComponent {
   }
 
   @CheckForNull
-  private MeasureFilterCondition alertToCondition(List<String> alertLevels) {
+  private MeasureFilterCondition alertToCondition(@Nullable List<String> alertLevels) {
     if (alertLevels == null || alertLevels.isEmpty()) {
       return null;
     }
@@ -148,7 +160,7 @@ public class MeasureFilterFactory implements ServerComponent {
     String op = "in";
     List<String> alertLevelsUppercase = Lists.transform(alertLevels, new Function<String, String>() {
       @Override
-      public String apply(String input) {
+      public String apply(@Nullable String input) {
         return input != null ? input.toUpperCase() : "";
       }
     });
index bd6348e7a286914cd573ce42357996781ac012c4..e653988c43136ad6fce7a653c03072bf2d5adffd 100644 (file)
@@ -89,6 +89,18 @@ public class MeasureFilterFactoryTest {
     assertThat(filter.sort().isAsc()).isTrue();
   }
 
+  @Test
+  public void fallback_on_name_sort_when_sort_is_unknown() {
+    MeasureFilterFactory factory = new MeasureFilterFactory(newMetricFinder(), system);
+    Map<String, Object> props = ImmutableMap.<String, Object>of("sort", "unknown");
+    MeasureFilter filter = factory.create(props);
+
+    assertThat(filter.sort().column()).isEqualTo("p.long_name");
+    assertThat(filter.sort().metric()).isNull();
+    assertThat(filter.sort().period()).isNull();
+    assertThat(filter.sort().isAsc()).isTrue();
+  }
+
   @Test
   public void descending_sort() {
     MeasureFilterFactory factory = new MeasureFilterFactory(newMetricFinder(), system);
index 23d1e6879d3e9da004549fa38c659ea3a9ae0a8e..b316df15a2ed5199363c7ca179cca82f1e8d9bcb 100644 (file)
@@ -28,7 +28,7 @@ module MeasuresHelper
     if column.period
       html += "<br><span class='note'>#{Api::Utils.period_abbreviation(column.period)}</small>"
     end
-    if filter.sort_key==column.key
+    if column.sort? && filter.sort_key==column.key
       html << (filter.sort_asc? ? ' <i class="icon-sort-asc"></i>' : ' <i class="icon-sort-desc"></i>')
     end
     "<th class='#{column.align} #{column.title_css}'>#{html}</th>"