]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8120 Remove componentIds parameter
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 24 Oct 2016 15:53:31 +0000 (17:53 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 25 Oct 2016 08:24:25 +0000 (10:24 +0200)
server/sonar-server/src/main/java/org/sonar/server/measure/ws/ComponentDtoToWsComponent.java
server/sonar-server/src/main/java/org/sonar/server/measure/ws/SearchAction.java
server/sonar-server/src/main/resources/org/sonar/server/measure/ws/search-example.json
server/sonar-server/src/test/java/org/sonar/server/measure/ws/SearchActionTest.java
sonar-ws/src/main/java/org/sonarqube/ws/client/measure/MeasuresWsParameters.java
sonar-ws/src/main/java/org/sonarqube/ws/client/measure/SearchRequest.java
sonar-ws/src/test/java/org/sonarqube/ws/client/measure/SearchRequestTest.java

index cca86c0b8875548cdd15e1f7784ec1f327a37761..9244174094a28c02345433a5c91ec39f59face53 100644 (file)
@@ -53,7 +53,6 @@ class ComponentDtoToWsComponent {
 
   static Function<ComponentDto, SearchWsResponse.Component> dbToWsComponent() {
     return dbComponent -> SearchWsResponse.Component.newBuilder()
-      .setId(dbComponent.uuid())
       .setKey(dbComponent.key())
       .setName(dbComponent.name())
       .build();
index d1fcdddaeffbd9fc05b7aad15dbd0b2eba3e7e85..f29df831428f60b42242ac66b63b514615cee8d7 100644 (file)
@@ -54,9 +54,6 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Comparator.comparing;
 import static java.util.Objects.requireNonNull;
 import static java.util.function.Function.identity;
-import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01;
-import static org.sonar.core.util.Uuids.UUID_EXAMPLE_02;
-import static org.sonar.core.util.Uuids.UUID_EXAMPLE_03;
 import static org.sonar.server.measure.ws.ComponentDtoToWsComponent.dbToWsComponent;
 import static org.sonar.server.measure.ws.MeasureDtoToWsMeasure.dbToWsMeasure;
 import static org.sonar.server.measure.ws.MeasuresWsParametersBuilder.createMetricKeysParameter;
@@ -69,11 +66,10 @@ import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001;
 import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_002;
 import static org.sonar.server.ws.WsUtils.checkRequest;
 import static org.sonar.server.ws.WsUtils.writeProtobuf;
+import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_COMPONENT_KEYS;
 import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_METRIC_KEYS;
 
 public class SearchAction implements MeasuresWsAction {
-  static final String PARAM_COMPONENT_IDS = "componentIds";
-  static final String PARAM_COMPONENT_KEYS = "componentKeys";
 
   private final DbClient dbClient;
 
@@ -87,28 +83,23 @@ public class SearchAction implements MeasuresWsAction {
       .setInternal(true)
       .setDescription("Search for component measures ordered by component names.<br>" +
         "At most %d components can be provided.<br>" +
-        "Either '%s' or '%s' must be provided, not both.<br>" +
         "Requires one of the following permissions:" +
         "<ul>" +
         " <li>'Administer System'</li>" +
         " <li>'Administer' rights on the provided components</li>" +
         " <li>'Browse' on the provided components</li>" +
         "</ul>",
-        SearchRequest.MAX_NB_COMPONENTS, PARAM_COMPONENT_IDS, PARAM_COMPONENT_KEYS)
-      .setSince("6.1")
+        SearchRequest.MAX_NB_COMPONENTS)
+      .setSince("6.2")
       .setResponseExample(getClass().getResource("search-example.json"))
       .setHandler(this);
 
     createMetricKeysParameter(action);
 
-    action.createParam(PARAM_COMPONENT_IDS)
-      .setDescription("Comma-separated list of component ids")
-      .setExampleValue(String.join(",", UUID_EXAMPLE_01, UUID_EXAMPLE_02, UUID_EXAMPLE_03));
-
     action.createParam(PARAM_COMPONENT_KEYS)
       .setDescription("Comma-separated list of component keys")
-      .setExampleValue(String.join(",", KEY_PROJECT_EXAMPLE_001, KEY_FILE_EXAMPLE_001, KEY_PROJECT_EXAMPLE_002, KEY_FILE_EXAMPLE_002));
-
+      .setExampleValue(String.join(",", KEY_PROJECT_EXAMPLE_001, KEY_FILE_EXAMPLE_001, KEY_PROJECT_EXAMPLE_002, KEY_FILE_EXAMPLE_002))
+      .setRequired(true);
   }
 
   @Override
@@ -154,7 +145,6 @@ public class SearchAction implements MeasuresWsAction {
     private SearchRequest createRequest() {
       request = SearchRequest.builder()
         .setMetricKeys(httpRequest.mandatoryParamAsStrings(PARAM_METRIC_KEYS))
-        .setComponentIds(httpRequest.paramAsStrings(PARAM_COMPONENT_IDS))
         .setComponentKeys(httpRequest.paramAsStrings(PARAM_COMPONENT_KEYS))
         .build();
 
@@ -172,23 +162,11 @@ public class SearchAction implements MeasuresWsAction {
 
     private List<ComponentDto> searchComponents() {
       requireNonNull(request);
-      if (request.hasComponentIds()) {
-        List<ComponentDto> componentsByUuid = searchByComponentUuids(dbSession, request.getComponentIds());
-        List<String> componentUuids = componentsByUuid.stream().map(ComponentDto::uuid).collect(Collectors.toList());
-        checkArgument(componentsByUuid.size() == request.getComponentIds().size(), "The following component ids are not found: %s",
-          String.join(", ", difference(request.getComponentIds(), componentUuids)));
-        return componentsByUuid;
-      } else {
-        List<ComponentDto> componentsByKey = searchByComponentKeys(dbSession, request.getComponentKeys());
-        List<String> componentKeys = componentsByKey.stream().map(ComponentDto::key).collect(Collectors.toList());
-        checkArgument(componentsByKey.size() == request.getComponentKeys().size(), "The following component keys are not found: %s",
-          String.join(", ", difference(request.getComponentKeys(), componentKeys)));
-        return componentsByKey;
-      }
-    }
-
-    private List<ComponentDto> searchByComponentUuids(DbSession dbSession, List<String> componentUuids) {
-      return dbClient.componentDao().selectByUuids(dbSession, componentUuids);
+      List<ComponentDto> componentsByKey = searchByComponentKeys(dbSession, request.getComponentKeys());
+      List<String> componentKeys = componentsByKey.stream().map(ComponentDto::key).collect(Collectors.toList());
+      checkArgument(componentsByKey.size() == request.getComponentKeys().size(), "The following component keys are not found: %s",
+        String.join(", ", difference(request.getComponentKeys(), componentKeys)));
+      return componentsByKey;
     }
 
     private List<ComponentDto> searchByComponentKeys(DbSession dbSession, List<String> componentKeys) {
index 1ca772d5db5ac9cea5c37933535de5a491109c3e..803f4aec91a7665c02d8edcfaa787355c05f26b9 100644 (file)
   ],
   "components": [
     {
-      "id": "AVIwDXE-bJbJqrw6wFv5",
       "key": "com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl/ElementImpl.java",
       "name": "ElementImpl.java"
     },
     {
-      "id": "AVIwDXE_bJbJqrw6wFwJ",
       "key": "com.sonarsource:java-markdown:src/test/java/com/sonarsource/markdown/impl/ElementImplTest.java",
       "name": "ElementImplTest.java"
     },
     {
-      "id": "project-id",
       "key": "MY_PROJECT",
       "name": "My Project"
     },
     {
-      "id": "AVIwDXE-bJbJqrw6wFv8",
       "key": "com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl",
       "name": "src/main/java/com/sonarsource/markdown/impl"
     }
index 02c578da9542224c6eec8350cba9a0d08850dd8c..543e2d170e9142a755db74d45160cfcd95dcf0b2 100644 (file)
 
 package org.sonar.server.measure.ws;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Throwables;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -41,6 +43,7 @@ import org.sonar.db.component.ComponentDto;
 import org.sonar.db.component.SnapshotDto;
 import org.sonar.db.metric.MetricDto;
 import org.sonar.server.exceptions.BadRequestException;
+import org.sonar.server.tester.UserSessionRule;
 import org.sonar.server.ws.TestRequest;
 import org.sonar.server.ws.WsActionTester;
 import org.sonarqube.ws.WsMeasures.Measure;
@@ -57,18 +60,22 @@ import static org.sonar.db.component.ComponentTesting.newProjectDto;
 import static org.sonar.db.component.SnapshotTesting.newAnalysis;
 import static org.sonar.db.measure.MeasureTesting.newMeasureDto;
 import static org.sonar.db.metric.MetricTesting.newMetricDto;
-import static org.sonar.server.measure.ws.SearchAction.PARAM_COMPONENT_IDS;
-import static org.sonar.server.measure.ws.SearchAction.PARAM_COMPONENT_KEYS;
 import static org.sonar.test.JsonAssert.assertJson;
 import static org.sonarqube.ws.MediaTypes.PROTOBUF;
+import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_COMPONENT_KEYS;
 import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_METRIC_KEYS;
 
 public class SearchActionTest {
 
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
+
+  @Rule
+  public UserSessionRule userSession = UserSessionRule.standalone();
+
   @Rule
   public DbTester db = DbTester.create(System2.INSTANCE);
+
   ComponentDbTester componentDb = new ComponentDbTester(db);
   DbClient dbClient = db.getDbClient();
   DbSession dbSession = db.getSession();
@@ -77,10 +84,10 @@ public class SearchActionTest {
 
   @Test
   public void json_example() {
-    insertJsonExampleData();
+    List<String> componentKeys = insertJsonExampleData();
 
     String result = ws.newRequest()
-      .setParam(PARAM_COMPONENT_IDS, "project-id,AVIwDXE-bJbJqrw6wFv5,AVIwDXE-bJbJqrw6wFv8,AVIwDXE_bJbJqrw6wFwJ")
+      .setParam(PARAM_COMPONENT_KEYS, Joiner.on(",").join(componentKeys))
       .setParam(PARAM_METRIC_KEYS, "ncloc, complexity, new_violations")
       .execute()
       .getInput();
@@ -93,35 +100,23 @@ public class SearchActionTest {
     ComponentDto dbComponent = componentDb.insertComponent(newProjectDto());
     insertComplexityMetric();
 
-    SearchWsResponse result = callByComponentUuids(singletonList(dbComponent.uuid()), singletonList("complexity"));
+    SearchWsResponse result = call(singletonList(dbComponent.key()), singletonList("complexity"));
 
     assertThat(result.getComponentsCount()).isEqualTo(1);
     SearchWsResponse.Component wsComponent = result.getComponents(0);
-    assertThat(wsComponent.getId()).isEqualTo(dbComponent.uuid());
     assertThat(wsComponent.getKey()).isEqualTo(dbComponent.key());
     assertThat(wsComponent.getName()).isEqualTo(dbComponent.name());
   }
 
-  @Test
-  public void search_by_component_uuid() {
-    ComponentDto project = componentDb.insertProject();
-    insertComplexityMetric();
-
-    SearchWsResponse result = callByComponentUuids(singletonList(project.uuid()), singletonList("complexity"));
-
-    assertThat(result.getComponentsCount()).isEqualTo(1);
-    assertThat(result.getComponents(0).getId()).isEqualTo(project.uuid());
-  }
-
   @Test
   public void search_by_component_key() {
     ComponentDto project = componentDb.insertProject();
     insertComplexityMetric();
 
-    SearchWsResponse result = callByComponentKeys(singletonList(project.key()), singletonList("complexity"));
+    SearchWsResponse result = call(singletonList(project.key()), singletonList("complexity"));
 
     assertThat(result.getComponentsCount()).isEqualTo(1);
-    assertThat(result.getComponents(0).getId()).isEqualTo(project.uuid());
+    assertThat(result.getComponents(0).getKey()).isEqualTo(project.key());
   }
 
   @Test
@@ -149,7 +144,7 @@ public class SearchActionTest {
       newMeasureDto(coverage, directoryDto, projectSnapshot).setValue(42.0d));
     db.commit();
 
-    SearchWsResponse result = callByComponentUuids(newArrayList(directoryDto.uuid(), file.uuid()), newArrayList("ncloc", "coverage", "new_violations"));
+    SearchWsResponse result = call(newArrayList(directoryDto.key(), file.key()), newArrayList("ncloc", "coverage", "new_violations"));
 
     // directory is not eligible for best value
     assertThat(result.getMeasuresList().stream()
@@ -169,7 +164,7 @@ public class SearchActionTest {
     expectedException.expect(IllegalArgumentException.class);
     expectedException.expectMessage("The 'metricKeys' parameter is missing");
 
-    callByComponentUuids(singletonList(project.uuid()), null);
+    call(singletonList(project.uuid()), null);
   }
 
   @Test
@@ -179,7 +174,7 @@ public class SearchActionTest {
     expectedException.expect(IllegalArgumentException.class);
     expectedException.expectMessage("Metric keys must be provided");
 
-    callByComponentUuids(singletonList(project.uuid()), emptyList());
+    call(singletonList(project.uuid()), emptyList());
   }
 
   @Test
@@ -190,7 +185,7 @@ public class SearchActionTest {
     expectedException.expect(BadRequestException.class);
     expectedException.expectMessage("The following metrics are not found: ncloc, violations");
 
-    callByComponentUuids(singletonList(project.uuid()), newArrayList("violations", "complexity", "ncloc"));
+    call(singletonList(project.key()), newArrayList("violations", "complexity", "ncloc"));
   }
 
   @Test
@@ -198,19 +193,9 @@ public class SearchActionTest {
     insertComplexityMetric();
 
     expectedException.expect(IllegalArgumentException.class);
-    expectedException.expectMessage("Either component ids or component keys must be provided, not both");
-
-    call(null, null, singletonList("complexity"));
-  }
-
-  @Test
-  public void fail_if_empty_component_uuid() {
-    insertComplexityMetric();
-
-    expectedException.expect(IllegalArgumentException.class);
-    expectedException.expectMessage("Either component ids or component keys must be provided, not both");
+    expectedException.expectMessage("Component keys must be provided");
 
-    callByComponentUuids(emptyList(), singletonList("complexity"));
+    call(null, singletonList("complexity"));
   }
 
   @Test
@@ -218,20 +203,9 @@ public class SearchActionTest {
     insertComplexityMetric();
 
     expectedException.expect(IllegalArgumentException.class);
-    expectedException.expectMessage("Either component ids or component keys must be provided, not both");
-
-    callByComponentKeys(emptyList(), singletonList("complexity"));
-  }
-
-  @Test
-  public void fail_if_unknown_component_uuid() {
-    insertComplexityMetric();
-    ComponentDto project = componentDb.insertProject();
-
-    expectedException.expect(IllegalArgumentException.class);
-    expectedException.expectMessage("The following component ids are not found: ANOTHER_PROJECT_ID, YOUR_PROJECT_ID");
+    expectedException.expectMessage("Component keys must be provided");
 
-    callByComponentUuids(newArrayList("YOUR_PROJECT_ID", project.uuid(), "ANOTHER_PROJECT_ID"), singletonList("complexity"));
+    call(emptyList(), singletonList("complexity"));
   }
 
   @Test
@@ -242,18 +216,7 @@ public class SearchActionTest {
     expectedException.expect(IllegalArgumentException.class);
     expectedException.expectMessage("The following component keys are not found: ANOTHER_PROJECT_KEY, YOUR_PROJECT_KEY");
 
-    callByComponentKeys(newArrayList("YOUR_PROJECT_KEY", project.key(), "ANOTHER_PROJECT_KEY"), singletonList("complexity"));
-  }
-
-  @Test
-  public void fail_if_component_id_and_key() {
-    ComponentDto project = componentDb.insertProject();
-    ComponentDto anotherProject = componentDb.insertProject();
-
-    expectedException.expect(IllegalArgumentException.class);
-    expectedException.expectMessage("Either component ids or component keys must be provided, not both");
-
-    call(singletonList(project.uuid()), singletonList(anotherProject.key()), singletonList("complexity"));
+    call(newArrayList("YOUR_PROJECT_KEY", project.key(), "ANOTHER_PROJECT_KEY"), singletonList("complexity"));
   }
 
   @Test
@@ -267,7 +230,7 @@ public class SearchActionTest {
     expectedException.expect(IllegalArgumentException.class);
     expectedException.expectMessage("101 components provided, more than maximum authorized (100)");
 
-    callByComponentUuids(uuids, singletonList("complexity"));
+    call(uuids, singletonList("complexity"));
   }
 
   @Test
@@ -281,7 +244,7 @@ public class SearchActionTest {
     expectedException.expect(IllegalArgumentException.class);
     expectedException.expectMessage("101 components provided, more than maximum authorized (100)");
 
-    callByComponentKeys(keys, singletonList("complexity"));
+    call(keys, singletonList("complexity"));
   }
 
   @Test
@@ -291,13 +254,12 @@ public class SearchActionTest {
     assertThat(result.key()).isEqualTo("search");
     assertThat(result.isPost()).isFalse();
     assertThat(result.isInternal()).isTrue();
-    assertThat(result.since()).isEqualTo("6.1");
-    assertThat(result.params()).hasSize(3);
+    assertThat(result.since()).isEqualTo("6.2");
+    assertThat(result.params()).hasSize(2);
     assertThat(result.responseExampleAsString()).isNotEmpty();
     assertThat(result.description()).isEqualToIgnoringWhitespace("" +
       "Search for component measures ordered by component names.<br>" +
       "At most 100 components can be provided.<br>" +
-      "Either 'componentIds' or 'componentKeys' must be provided, not both.<br>" +
       "Requires one of the following permissions:" +
       "<ul>" +
       " <li>'Administer System'</li>" +
@@ -306,21 +268,10 @@ public class SearchActionTest {
       "</ul>");
   }
 
-  private SearchWsResponse callByComponentUuids(@Nullable List<String> uuids, @Nullable List<String> metrics) {
-    return call(uuids, null, metrics);
-  }
-
-  private SearchWsResponse callByComponentKeys(@Nullable List<String> keys, @Nullable List<String> metrics) {
-    return call(null, keys, metrics);
-  }
-
-  private SearchWsResponse call(@Nullable List<String> uuids, @Nullable List<String> keys, @Nullable List<String> metrics) {
+  private SearchWsResponse call(@Nullable List<String> keys, @Nullable List<String> metrics) {
     TestRequest request = ws.newRequest()
       .setMediaType(PROTOBUF);
 
-    if (uuids != null) {
-      request.setParam(PARAM_COMPONENT_IDS, String.join(",", uuids));
-    }
     if (keys != null) {
       request.setParam(PARAM_COMPONENT_KEYS, String.join(",", keys));
     }
@@ -405,12 +356,14 @@ public class SearchActionTest {
     return metric;
   }
 
-  private void insertJsonExampleData() {
+  private List<String> insertJsonExampleData() {
+    List<String> componentKeys = new ArrayList<>();
     ComponentDto project = newProjectDto("project-id")
       .setKey("MY_PROJECT")
       .setName("My Project")
       .setDescription("My Project Description")
       .setQualifier(Qualifiers.PROJECT);
+    componentKeys.add(project.key());
     componentDb.insertComponent(project);
     SnapshotDto projectSnapshot = dbClient.snapshotDao().insert(dbSession, newAnalysis(project)
       .setPeriodDate(1, parseDateTime("2016-01-11T10:49:50+0100").getTime())
@@ -430,17 +383,21 @@ public class SearchActionTest {
       .setLanguage("java")
       .setQualifier(Qualifiers.FILE)
       .setPath("src/main/java/com/sonarsource/markdown/impl/ElementImpl.java"));
-    componentDb.insertComponent(newFileDto(project, null)
+    componentKeys.add(file1.key());
+    ComponentDto file = newFileDto(project, null)
       .setUuid("AVIwDXE_bJbJqrw6wFwJ")
       .setKey("com.sonarsource:java-markdown:src/test/java/com/sonarsource/markdown/impl/ElementImplTest.java")
       .setName("ElementImplTest.java")
       .setLanguage("java")
       .setQualifier(Qualifiers.UNIT_TEST_FILE)
-      .setPath("src/test/java/com/sonarsource/markdown/impl/ElementImplTest.java"));
+      .setPath("src/test/java/com/sonarsource/markdown/impl/ElementImplTest.java");
+    componentKeys.add(file.key());
+    componentDb.insertComponent(file);
     ComponentDto dir = componentDb.insertComponent(newDirectory(project, "src/main/java/com/sonarsource/markdown/impl")
       .setUuid("AVIwDXE-bJbJqrw6wFv8")
       .setKey("com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl")
       .setQualifier(Qualifiers.DIRECTORY));
+    componentKeys.add(dir.key());
 
     MetricDto complexity = insertComplexityMetric();
     dbClient.measureDao().insert(dbSession,
@@ -478,5 +435,6 @@ public class SearchActionTest {
         .setVariation(3, 255.0d));
 
     db.commit();
+    return componentKeys;
   }
 }
index d884f76cbd1b328d7800dada289cc199ead2c35b..49ce3efb27e56a796710c2ddf3810af1cafad112 100644 (file)
@@ -43,6 +43,7 @@ public class MeasuresWsParameters {
   public static final String PARAM_ADDITIONAL_FIELDS = "additionalFields";
   public static final String PARAM_COMPONENT_ID = "componentId";
   public static final String PARAM_COMPONENT_KEY = "componentKey";
+  public static final String PARAM_COMPONENT_KEYS = "componentKeys";
   public static final String PARAM_DEVELOPER_ID = "developerId";
   public static final String PARAM_DEVELOPER_KEY = "developerKey";
   public static final String ADDITIONAL_METRICS = "metrics";
index 7beedebec9f971ccd001d766923cce0940272480..a9e767729703527f1adfcb56729611bc303eec77 100644 (file)
@@ -23,18 +23,15 @@ package org.sonarqube.ws.client.measure;
 import java.util.List;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static java.util.Objects.requireNonNull;
 
 public class SearchRequest {
   public static final int MAX_NB_COMPONENTS = 100;
 
   private final List<String> metricKeys;
-  private final List<String> componentIds;
   private final List<String> componentKeys;
 
   public SearchRequest(Builder builder) {
     metricKeys = builder.metricKeys;
-    componentIds = builder.componentIds;
     componentKeys = builder.componentKeys;
   }
 
@@ -42,20 +39,8 @@ public class SearchRequest {
     return metricKeys;
   }
 
-  public boolean hasComponentIds() {
-    return componentIds != null;
-  }
-
-  public List<String> getComponentIds() {
-    return requireNonNull(componentIds, "No component id in request");
-  }
-
-  public boolean hasComponentKeys() {
-    return componentKeys != null;
-  }
-
   public List<String> getComponentKeys() {
-    return requireNonNull(componentKeys, "No component key in request");
+    return componentKeys;
   }
 
   public static Builder builder() {
@@ -64,7 +49,6 @@ public class SearchRequest {
 
   public static class Builder {
     private List<String> metricKeys;
-    private List<String> componentIds;
     private List<String> componentKeys;
 
     private Builder() {
@@ -76,11 +60,6 @@ public class SearchRequest {
       return this;
     }
 
-    public Builder setComponentIds(List<String> componentIds) {
-      this.componentIds = componentIds;
-      return this;
-    }
-
     public Builder setComponentKeys(List<String> componentKeys) {
       this.componentKeys = componentKeys;
       return this;
@@ -88,16 +67,10 @@ public class SearchRequest {
 
     public SearchRequest build() {
       checkArgument(metricKeys != null && !metricKeys.isEmpty(), "Metric keys must be provided");
-      checkArgument(
-        (componentIds != null && !componentIds.isEmpty())
-          ^ (componentKeys != null && !componentKeys.isEmpty()),
-        "Either component ids or component keys must be provided, not both");
-      int nbComponents = componentIds == null ? componentKeys.size() : componentIds.size();
-      checkArgument((componentIds != null && componentIds.size() < MAX_NB_COMPONENTS)
-        || (componentKeys != null && componentKeys.size() < MAX_NB_COMPONENTS),
-        "%s components provided, more than maximum authorized (%s)",
-        nbComponents,
-        MAX_NB_COMPONENTS);
+      checkArgument(componentKeys != null && !componentKeys.isEmpty(), "Component keys must be provided");
+      int nbComponents = componentKeys.size();
+      checkArgument(nbComponents < MAX_NB_COMPONENTS,
+        "%s components provided, more than maximum authorized (%s)", nbComponents, MAX_NB_COMPONENTS);
       return new SearchRequest(this);
     }
   }
index ee6de73dfd5881867dd8692ec9ad2e31c512ee01..6e174d78ed5a3d7e057fe8b92817daff27672d68 100644 (file)
@@ -35,18 +35,6 @@ public class SearchRequestTest {
 
   SearchRequest.Builder underTest = SearchRequest.builder();
 
-  @Test
-  public void with_component_ids() {
-    SearchRequest result = underTest
-      .setMetricKeys(singletonList("metric"))
-      .setComponentIds(singletonList("uuid"))
-      .build();
-
-    assertThat(result.getMetricKeys()).containsExactly("metric");
-    assertThat(result.getComponentIds()).containsExactly("uuid");
-    assertThat(result.hasComponentKeys()).isFalse();
-  }
-
   @Test
   public void with_component_keys() {
     SearchRequest result = underTest
@@ -56,7 +44,6 @@ public class SearchRequestTest {
 
     assertThat(result.getMetricKeys()).containsExactly("metric");
     assertThat(result.getComponentKeys()).containsExactly("key");
-    assertThat(result.hasComponentIds()).isFalse();
   }
 
   @Test
@@ -80,27 +67,6 @@ public class SearchRequestTest {
     underTest.build();
   }
 
-  @Test
-  public void fail_when_component_ids_and_keys_provided() {
-    expectExceptionOnComponents();
-
-    underTest
-      .setMetricKeys(singletonList("metric"))
-      .setComponentIds(singletonList("uuid"))
-      .setComponentKeys(singletonList("key"))
-      .build();
-  }
-
-  @Test
-  public void fail_when_component_ids_is_empty() {
-    expectExceptionOnComponents();
-
-    underTest
-      .setMetricKeys(singletonList("metric"))
-      .setComponentIds(emptyList())
-      .build();
-  }
-
   @Test
   public void fail_when_component_keys_is_empty() {
     expectExceptionOnComponents();
@@ -118,6 +84,6 @@ public class SearchRequestTest {
 
   private void expectExceptionOnComponents() {
     expectedException.expect(IllegalArgumentException.class);
-    expectedException.expectMessage("Either component ids or component keys must be provided, not both");
+    expectedException.expectMessage("Component keys must be provided");
   }
 }