]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2078 Do not show duplicated repositories in rules search engine
authorsimonbrandhof <simon.brandhof@gmail.com>
Tue, 8 Feb 2011 12:00:34 +0000 (13:00 +0100)
committersimonbrandhof <simon.brandhof@gmail.com>
Tue, 8 Feb 2011 12:55:30 +0000 (13:55 +0100)
sonar-server/src/main/java/org/sonar/server/rules/RulesConsole.java
sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/rules_configuration_controller.rb
sonar-server/src/test/java/org/sonar/server/rules/RulesConsoleTest.java [new file with mode: 0644]

index a7ed65b5e7cd699502b78106424a36edfdb25b67..4204a17919dd0ff6cb4e4bbc56687e4b9189457b 100644 (file)
  */
 package org.sonar.server.rules;
 
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ListMultimap;
+import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.common.collect.SetMultimap;
 import org.sonar.api.ServerComponent;
 import org.sonar.api.rules.RuleRepository;
 
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public final class RulesConsole implements ServerComponent {
 
   private List<RuleRepository> repositories = Lists.newArrayList();
   private Map<String, RuleRepository> repositoryByKey = Maps.newHashMap();
-  private ListMultimap<String, RuleRepository> repositoriesByLanguage = ArrayListMultimap.create();
+  private SetMultimap<String, RuleRepository> repositoriesByLanguage = HashMultimap.create();
 
 
   public RulesConsole(RuleRepository[] repositories, DeprecatedRuleRepositories deprecatedRuleRepositories) {
@@ -47,12 +48,14 @@ public final class RulesConsole implements ServerComponent {
       this.repositories.addAll(deprecatedBridge.create());
     }
     for (RuleRepository repository : this.repositories) {
-      repositoriesByLanguage.put(repository.getLanguage(), repository);
-      repositoryByKey.put(repository.getKey(), repository);
+      if (!repositoryByKey.containsKey(repository.getKey())) {
+        repositoriesByLanguage.put(repository.getLanguage(), repository);
+        repositoryByKey.put(repository.getKey(), repository);
+      }
     }
   }
 
-  public List<RuleRepository> getRepositoriesByLanguage(String language) {
+  public Set<RuleRepository> getRepositoriesByLanguage(String language) {
     return repositoriesByLanguage.get(language);
   }
 
index f540eda5a93321854da191396288e0d0d5e34d0a..309694c24662b9f4a68ce4250c63242e1baf4c05 100644 (file)
@@ -49,6 +49,7 @@ import org.sonar.updatecenter.common.Version;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 
 public final class JRubyFacade implements ServerComponent {
 
@@ -157,7 +158,7 @@ public final class JRubyFacade implements ServerComponent {
     return getContainer().getComponent(RulesConsole.class).getRepository(repositoryKey);
   }
 
-  public List<RuleRepository> getRuleRepositoriesByLanguage(String languageKey) {
+  public Set<RuleRepository> getRuleRepositoriesByLanguage(String languageKey) {
     return getContainer().getComponent(RulesConsole.class).getRepositoriesByLanguage(languageKey);
   }
 
index 291a95f217b3c2f4adc192819c0c890f11b3f5e0..b268f71715c791fc27467d9515659fe78c443356 100644 (file)
@@ -50,7 +50,7 @@ class RulesConfigurationController < ApplicationController
     end
     
     init_params()
-    
+
     @select_plugins = ANY_SELECTION + java_facade.getRuleRepositoriesByLanguage(@profile.language).collect { |repo| [repo.getName(true), repo.getKey()]}.sort
     @select_priority = ANY_SELECTION + RULE_PRIORITIES
     @select_status = [['Any',''], ["Active", STATUS_ACTIVE], ["Inactive", STATUS_INACTIVE]]
diff --git a/sonar-server/src/test/java/org/sonar/server/rules/RulesConsoleTest.java b/sonar-server/src/test/java/org/sonar/server/rules/RulesConsoleTest.java
new file mode 100644 (file)
index 0000000..488a84d
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.server.rules;
+
+import org.hamcrest.Matchers;
+import org.junit.Test;
+import org.sonar.api.rules.Rule;
+import org.sonar.api.rules.RuleRepository;
+
+import java.util.Collections;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+public class RulesConsoleTest {
+  @Test
+  public void shouldIgnoreRepositoryExtensions() throws Exception {
+    RuleRepository[] repositories = new RuleRepository[]{
+        new FakeRepository("findbugs", "java"),
+        new FakeRepository("findbugs", "java"), // for example fb-contrib
+    };
+    RulesConsole console = new RulesConsole(repositories, null);
+
+    assertThat(console.getRepository("findbugs"), not(Matchers.nullValue()));
+    assertThat(console.getRepositoriesByLanguage("java").size(), is(1));
+  }
+
+  private static class FakeRepository extends RuleRepository {
+
+    private FakeRepository(String key, String language) {
+      super(key, language);
+    }
+
+    @Override
+    public List<Rule> createRules() {
+      return Collections.emptyList();
+    }
+  }
+}
+
+