]> source.dussan.org Git - sonarqube.git/commitdiff
Start linking ES implementation of active rules search to UI
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Mon, 16 Dec 2013 09:19:00 +0000 (10:19 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Mon, 16 Dec 2013 16:13:46 +0000 (17:13 +0100)
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java
sonar-server/src/main/java/org/sonar/server/rule/ProfileRules.java
sonar-server/src/main/java/org/sonar/server/rule/RuleRegistry.java
sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java

index 43c3b87acbb90dbae837ae25c3ae75592a3e4fe7..1b4d063ed96cf55da2cbe9c70ecc3d9a286ea0fb 100644 (file)
@@ -22,6 +22,8 @@ package org.sonar.server.qualityprofile;
 
 import org.sonar.api.ServerComponent;
 import org.sonar.api.rule.RuleKey;
+import org.sonar.server.rule.ProfileRuleQuery;
+import org.sonar.server.rule.ProfileRules;
 import org.sonar.server.user.UserSession;
 
 import java.util.List;
@@ -31,10 +33,12 @@ public class QProfiles implements ServerComponent {
 
   private final QProfileSearch search;
   private final QProfileOperations operations;
+  private final ProfileRules rules;
 
-  public QProfiles(QProfileSearch search, QProfileOperations operations) {
+  public QProfiles(QProfileSearch search, QProfileOperations operations, ProfileRules rules) {
     this.search = search;
     this.operations = operations;
+    this.rules = rules;
   }
 
   public List<QProfile> searchProfiles() {
@@ -121,8 +125,8 @@ public class QProfiles implements ServerComponent {
 
   // ACTIVE RULES
 
-  public void searchActiveRules(Integer profileId) {
-    throw new UnsupportedOperationException();
+  public QProfileRuleResult searchActiveRules(ProfileRuleQuery query, Paging paging) {
+    return rules.searchActiveRules(query, paging);
   }
 
   public void searchInactiveRules(Integer profileId) {
index e412ddb0ce5aa5d5231b7457742c13a02e09a8ca..255f4f6fd7ca608e2e6474fc51a8a5ca8c27a6b7 100644 (file)
@@ -41,9 +41,15 @@ import java.util.Map;
 
 import static org.elasticsearch.index.query.FilterBuilders.*;
 import static org.elasticsearch.index.query.QueryBuilders.multiMatchQuery;
+import static org.sonar.server.rule.RuleRegistry.INDEX_RULES;
+import static org.sonar.server.rule.RuleRegistry.TYPE_ACTIVE_RULE;
+import static org.sonar.server.rule.RuleRegistry.TYPE_RULE;
 
 public class ProfileRules {
 
+  private static final String FIELD_PARENT = "_parent";
+  private static final String FIELD_SOURCE = "_source";
+
   private final SearchIndex index;
 
   public ProfileRules(SearchIndex index) {
@@ -53,13 +59,13 @@ public class ProfileRules {
   public QProfileRuleResult searchActiveRules(ProfileRuleQuery query, Paging paging) {
     BoolFilterBuilder filter = boolFilter().must(
             termFilter("profileId", query.profileId()),
-            hasParentFilter("rule", parentRuleFilter(query))
+            hasParentFilter(TYPE_RULE, parentRuleFilter(query))
         );
     addMustTermOrTerms(filter, "severity", query.severities());
 
-    SearchRequestBuilder builder = index.client().prepareSearch("rules").setTypes("active_rule")
+    SearchRequestBuilder builder = index.client().prepareSearch(INDEX_RULES).setTypes(TYPE_ACTIVE_RULE)
       .setFilter(filter)
-      .addFields("_source", "_parent")
+      .addFields(FIELD_SOURCE, FIELD_PARENT)
       .setSize(paging.pageSize())
       .setFrom(paging.offset());
     SearchHits hits = index.executeRequest(builder);
@@ -71,12 +77,12 @@ public class ProfileRules {
     List<QProfileRule> result = Lists.newArrayList();
     for (SearchHit hit: hits.getHits()) {
       activeRuleSources.add(hit.sourceAsMap());
-      parentIds[hitCounter] = hit.field("_parent").value();
+      parentIds[hitCounter] = hit.field(FIELD_PARENT).value();
       hitCounter ++;
     }
 
     if (hitCounter > 0) {
-      MultiGetItemResponse[] responses = index.client().prepareMultiGet().add("rules", "rule", parentIds)
+      MultiGetItemResponse[] responses = index.client().prepareMultiGet().add(INDEX_RULES, TYPE_RULE, parentIds)
         .execute().actionGet().getResponses();
 
       for (int i = 0; i < hitCounter; i ++) {
index cd639f1beb7fcf217dd2bd0a659e5a683e5a816c..f2ff2e9644422a398d16c448b8d8326c7539b069 100644 (file)
@@ -51,11 +51,12 @@ import java.util.Map;
  */
 public class RuleRegistry {
 
+  public static final String INDEX_RULES = "rules";
+  public static final String TYPE_RULE = "rule";
+  public static final String TYPE_ACTIVE_RULE = "active_rule";
+
   private static final String PARAM_NAMEORKEY = "nameOrKey";
   private static final String PARAM_STATUS = "status";
-  private static final String INDEX_RULES = "rules";
-  private static final String TYPE_RULE = "rule";
-  private static final String TYPE_ACTIVE_RULE = "active_rule";
 
   private SearchIndex searchIndex;
   private RuleDao ruleDao;
index 31b2a0b64d91d76ff7991c96b53f172f9e0b9933..15b8d0f7e340608954afc3827e65fe440a0fe6f3 100644 (file)
@@ -25,14 +25,19 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.sonar.server.rule.ProfileRuleQuery;
+import org.sonar.server.rule.ProfileRules;
 import org.sonar.server.user.UserSession;
 
 import java.util.Map;
 
 import static com.google.common.collect.Maps.newHashMap;
+import static org.fest.assertions.Assertions.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class QProfilesTest {
@@ -43,11 +48,14 @@ public class QProfilesTest {
   @Mock
   QProfileOperations operations;
 
+  @Mock
+  ProfileRules rules;
+
   QProfiles qProfiles;
 
   @Before
   public void setUp() throws Exception {
-    qProfiles = new QProfiles(search, operations);
+    qProfiles = new QProfiles(search, operations, rules);
   }
 
   @Test(expected = UnsupportedOperationException.class)
@@ -146,9 +154,13 @@ public class QProfilesTest {
     qProfiles.removeAllProjects(null);
   }
 
-  @Test(expected = UnsupportedOperationException.class)
   public void testSearchActiveRules() throws Exception {
-    qProfiles.searchActiveRules(null);
+    final int profileId = 42;
+    ProfileRuleQuery query = ProfileRuleQuery.create(profileId );
+    Paging paging = Paging.create(20, 1);
+    QProfileRuleResult result = mock(QProfileRuleResult.class);
+    when(rules.searchActiveRules(query, paging)).thenReturn(result);
+    assertThat(qProfiles.searchActiveRules(query, paging)).isEqualTo(result);
   }
 
   @Test(expected = UnsupportedOperationException.class)