]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4535 BadRequestException is now immutable
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 17 Dec 2013 12:40:41 +0000 (13:40 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 17 Dec 2013 12:40:41 +0000 (13:40 +0100)
sonar-server/src/main/java/org/sonar/server/exceptions/BadRequestException.java
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java
sonar-server/src/main/java/org/sonar/server/rule/ProfileRuleQuery.java
sonar-server/src/test/java/org/sonar/server/exceptions/BadRequestExceptionTest.java

index ee792637e5c87891a42e0576f7d1220592c303fb..e0bff2fafbb372b9a570050aeafdc2cecdad4a8a 100644 (file)
@@ -36,31 +36,44 @@ public class BadRequestException extends ServerException {
 
   private static final int BAD_REQUEST = 400;
 
-  private final List<Message> errors = newArrayList();
+  private List<Message> errors = newArrayList();
 
   public BadRequestException(String message) {
     super(BAD_REQUEST, message);
   }
 
+  public BadRequestException(String message, List<Message> errors) {
+    super(BAD_REQUEST, message);
+    this.errors = errors;
+  }
+
   public BadRequestException(@Nullable String message, @Nullable String l10nKey, @Nullable Object[] l10nParams) {
     super(BAD_REQUEST, message, l10nKey, l10nParams);
   }
 
+  public BadRequestException(@Nullable String message, @Nullable String l10nKey, @Nullable Object[] l10nParams, List<Message> errors) {
+    super(BAD_REQUEST, message, l10nKey, l10nParams);
+    this.errors = errors;
+  }
+
   public static BadRequestException of(String message) {
     return new BadRequestException(message);
   }
 
-  public static BadRequestException ofL10n(String l10nKey, Object... l10nParams) {
-    return new BadRequestException(null, l10nKey, l10nParams);
+  public static BadRequestException of(String message, List<Message> errors) {
+    return new BadRequestException(message, errors);
   }
 
-  public BadRequestException addError(String text) {
-    return addError(Message.of(text));
+  public static BadRequestException of(List<Message> errors) {
+    return new BadRequestException(null, errors);
   }
 
-  public BadRequestException addError(Message message) {
-    errors.add(message);
-    return this;
+  public static BadRequestException ofL10n(String l10nKey, Object... l10nParams) {
+    return new BadRequestException(null, l10nKey, l10nParams);
+  }
+
+  public static BadRequestException ofL10n(List<Message> errors, String l10nKey, Object... l10nParams) {
+    return new BadRequestException(null, l10nKey, l10nParams, errors);
   }
 
   /**
@@ -141,9 +154,4 @@ public class BadRequestException extends ServerException {
     }
   }
 
-  public void checkMessages() {
-    if (! errors.isEmpty()) {
-      throw this;
-    }
-  }
 }
index b23c7cd1904e96d83ace19854e7a42aa1e5331e7..3332e99b08b83ef2d59f6da460b7c031f7e328bb 100644 (file)
@@ -155,14 +155,13 @@ public class QProfileOperations implements ServerComponent {
   }
 
   private void processValidationMessages(ValidationMessages messages, NewProfileResult result) {
-    BadRequestException exception = BadRequestException.of("Fail to create profile");
-    for (String error : messages.getErrors()) {
-      exception.addError(error);
-    }
-    if (!exception.errors().isEmpty()) {
-      throw exception;
+    if (!messages.getErrors().isEmpty()) {
+      List<BadRequestException.Message> errors = newArrayList();
+      for (String error : messages.getErrors()) {
+        errors.add(BadRequestException.Message.of(error));
+      }
+      throw BadRequestException.of("Fail to create profile", errors);
     }
-
     result.setWarnings(messages.getWarnings());
     result.setInfos(messages.getInfos());
   }
index a24ca5bed4357cdedc9127c5a72fa6aa43b4d55f..7abd37ca1511c29ab5dc5c5f14a3afb88b6c6d85 100644 (file)
@@ -33,6 +33,8 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+import static com.google.common.collect.Lists.newArrayList;
+
 /**
  * @since 4.2
  */
@@ -57,16 +59,16 @@ public class ProfileRuleQuery {
   }
 
   public static ProfileRuleQuery parse(Map<String, Object> params) {
-    BadRequestException validationException = BadRequestException.of("Incorrect rule search parameters");
+    List<BadRequestException.Message> errors = newArrayList();
 
-    validatePresenceOf(params, validationException, PARAM_PROFILE_ID);
+    validatePresenceOf(params, errors, PARAM_PROFILE_ID);
 
     ProfileRuleQuery result = new ProfileRuleQuery();
 
     try {
       result.profileId = RubyUtils.toInteger(params.get(PARAM_PROFILE_ID));
     } catch (Exception badProfileId) {
-      validationException.addError("profileId could not be parsed");
+      errors.add(BadRequestException.Message.of("profileId could not be parsed"));
     }
 
 
@@ -83,15 +85,16 @@ public class ProfileRuleQuery {
       result.addStatuses(optionalVarargs(params.get(PARAM_STATUSES)));
     }
 
-    validationException.checkMessages();
-
+    if (!errors.isEmpty()) {
+      throw BadRequestException.of("Incorrect rule search parameters", errors);
+    }
     return result;
   }
 
-  private static void validatePresenceOf(Map<String, Object> params, BadRequestException validationException, String... paramNames) {
+  private static void validatePresenceOf(Map<String, Object> params, List<BadRequestException.Message> errors, String... paramNames) {
     for (String param: paramNames) {
       if (params.get(param) == null) {
-        validationException.addError("Missing parameter "+param);
+        errors.add(BadRequestException.Message.of("Missing parameter " + param));
       }
     }
   }
index 770d9d3071f963ef40c01766f0b25d11b79aa61e..ce8518641ea6e8738b3a796d020c6e89f1c972be 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.server.exceptions;
 
 import org.junit.Test;
 
+import static com.google.common.collect.Lists.newArrayList;
 import static org.fest.assertions.Assertions.assertThat;
 
 public class BadRequestExceptionTest {
@@ -42,8 +43,7 @@ public class BadRequestExceptionTest {
 
   @Test
   public void test_text_error_message() throws Exception {
-    BadRequestException exception = BadRequestException.of("error");
-    exception.addError("new error");
+    BadRequestException exception = BadRequestException.of("error", newArrayList(BadRequestException.Message.of("new error")));
 
     assertThat(exception.errors()).hasSize(1);
     assertThat(exception.errors().get(0).text()).isEqualTo("new error");