]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8303 Add type parameter to WS api/rules/create
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 12 Oct 2017 13:33:38 +0000 (15:33 +0200)
committerStas Vilchik <stas.vilchik@sonarsource.com>
Tue, 17 Oct 2017 08:03:56 +0000 (10:03 +0200)
server/sonar-server/src/main/java/org/sonar/server/rule/NewCustomRule.java
server/sonar-server/src/main/java/org/sonar/server/rule/RuleCreator.java
server/sonar-server/src/main/java/org/sonar/server/rule/ws/CreateAction.java
server/sonar-server/src/test/java/org/sonar/server/rule/ws/CreateActionTest.java

index 2d82b22cc32dfbb3807eb662a49dc38b02c443b9..be9eb8f81273c306199adc35da34c3ca4de02022 100644 (file)
@@ -27,6 +27,7 @@ import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
+import org.sonar.api.rules.RuleType;
 
 public class NewCustomRule {
 
@@ -37,6 +38,7 @@ public class NewCustomRule {
   private String markdownDescription;
   private String severity;
   private RuleStatus status;
+  private RuleType type;
   private final Map<String, String> parameters = Maps.newHashMap();
 
   private boolean preventReactivation = false;
@@ -104,6 +106,16 @@ public class NewCustomRule {
     return this;
   }
 
+  @CheckForNull
+  public RuleType type() {
+    return type;
+  }
+
+  public NewCustomRule setType(@Nullable RuleType type) {
+    this.type = type;
+    return this;
+  }
+
   @CheckForNull
   public String parameter(final String paramKey) {
     return parameters.get(paramKey);
index f9ad9c6ce6ab9ffe5734d9cd96b88de3df5cd736..725550f1eb7fd86e113046b8a406df8eefa4d7ac 100644 (file)
@@ -166,13 +166,13 @@ public class RuleCreator {
       .setDescriptionFormat(Format.MARKDOWN)
       .setSeverity(newRule.severity())
       .setStatus(newRule.status())
+      .setType(newRule.type() == null ? templateRuleDto.getType() : newRule.type().getDbConstant())
       .setLanguage(templateRuleDto.getLanguage())
       .setDefRemediationFunction(templateRuleDto.getDefRemediationFunction())
       .setDefRemediationGapMultiplier(templateRuleDto.getDefRemediationGapMultiplier())
       .setDefRemediationBaseEffort(templateRuleDto.getDefRemediationBaseEffort())
       .setGapDescription(templateRuleDto.getGapDescription())
       .setSystemTags(templateRuleDto.getSystemTags())
-      .setType(templateRuleDto.getType())
       .setCreatedAt(system2.now())
       .setUpdatedAt(system2.now());
     dbClient.ruleDao().insert(dbSession, ruleDefinition);
index d0625002a035302326215302614c6f527dbbeef4..9b0a465b25817fbe932e41cbfef88513d5a81763 100644 (file)
@@ -26,6 +26,7 @@ import java.util.Optional;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
+import org.sonar.api.rules.RuleType;
 import org.sonar.api.server.ws.Change;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
@@ -43,11 +44,9 @@ import org.sonarqube.ws.Rules;
 import static com.google.common.base.Strings.isNullOrEmpty;
 import static java.net.HttpURLConnection.HTTP_CONFLICT;
 import static java.util.Collections.singletonList;
+import static org.sonar.core.util.Protobuf.setNullable;
 import static org.sonar.server.ws.WsUtils.writeProtobuf;
 
-/**
- * @since 4.4
- */
 public class CreateAction implements RulesWsAction {
 
   public static final String PARAM_CUSTOM_KEY = "custom_key";
@@ -56,6 +55,7 @@ public class CreateAction implements RulesWsAction {
   public static final String PARAM_SEVERITY = "severity";
   public static final String PARAM_STATUS = "status";
   public static final String PARAM_TEMPLATE_KEY = "template_key";
+  public static final String PARAM_TYPE = "type";
   public static final String PARAMS = "params";
 
   public static final String PARAM_PREVENT_REACTIVATION = "prevent_reactivation";
@@ -132,6 +132,11 @@ public class CreateAction implements RulesWsAction {
       .setDescription("If set to true and if the rule has been deactivated (status 'REMOVED'), a status 409 will be returned")
       .setDefaultValue(false)
       .setBooleanPossibleValues();
+
+    action.createParam(PARAM_TYPE)
+      .setDescription("Rule type")
+      .setSince("6.7")
+      .setPossibleValues(RuleType.names());
   }
 
   @Override
@@ -150,6 +155,7 @@ public class CreateAction implements RulesWsAction {
         if (!isNullOrEmpty(params)) {
           newRule.setParameters(KeyValueFormat.parse(params));
         }
+        setNullable(request.param(PARAM_TYPE), t -> newRule.setType(RuleType.valueOf(t)));
         writeResponse(dbSession, request, response, ruleCreator.create(dbSession, newRule));
       } catch (ReactivationException e) {
         response.stream().setStatus(HTTP_CONFLICT);
index 366d1cbdb4c9f338bd26c2aff761a187c62f3e37..16d7eb73674d7afdd34a217553936656aae9c38d 100644 (file)
@@ -50,6 +50,8 @@ import static org.mockito.AdditionalAnswers.returnsFirstArg;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
+import static org.sonar.api.rules.RuleType.BUG;
+import static org.sonar.api.rules.RuleType.CODE_SMELL;
 import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES;
 import static org.sonar.db.rule.RuleTesting.newCustomRule;
 import static org.sonar.db.rule.RuleTesting.newTemplateRule;
@@ -84,7 +86,7 @@ public class CreateActionTest {
   public void create_custom_rule() {
     logInAsQProfileAdministrator();
     // Template rule
-    RuleDto templateRule = newTemplateRule(RuleKey.of("java", "S001"), db.getDefaultOrganization());
+    RuleDto templateRule = newTemplateRule(RuleKey.of("java", "S001"), db.getDefaultOrganization()).setType(CODE_SMELL);
     db.rules().insert(templateRule.getDefinition());
     db.rules().insertOrUpdateMetadata(templateRule.getMetadata().setRuleId(templateRule.getId()));
     db.rules().insertRuleParam(templateRule.getDefinition(), param -> param.setName("regex").setType("STRING").setDescription("Reg ex").setDefaultValue(".*"));
@@ -96,6 +98,7 @@ public class CreateActionTest {
       .setParam("markdown_description", "Description")
       .setParam("severity", "MAJOR")
       .setParam("status", "BETA")
+      .setParam("type", BUG.name())
       .setParam("params", "regex=a.*")
       .execute().getInput();
 
@@ -107,6 +110,7 @@ public class CreateActionTest {
       "    \"htmlDesc\": \"Description\",\n" +
       "    \"severity\": \"MAJOR\",\n" +
       "    \"status\": \"BETA\",\n" +
+      "    \"type\": \"BUG\",\n" +
       "    \"internalKey\": \"InternalKeyS001\",\n" +
       "    \"isTemplate\": false,\n" +
       "    \"templateKey\": \"java:S001\",\n" +