Browse Source

Fix quality flaw in quality gate web services

tags/5.2-RC1
Simon Brandhof 9 years ago
parent
commit
37b5e0d479
18 changed files with 69 additions and 113 deletions
  1. 8
    0
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/BaseQGateWsAction.java
  2. 7
    8
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesAppAction.java
  3. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesCopyAction.java
  4. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesCreateAction.java
  5. 5
    5
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesCreateConditionAction.java
  6. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesDeleteConditionAction.java
  7. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesDeselectAction.java
  8. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesDestroyAction.java
  9. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesListAction.java
  10. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesRenameAction.java
  11. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSearchAction.java
  12. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSelectAction.java
  13. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSetAsDefaultAction.java
  14. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesShowAction.java
  15. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesUnsetDefaultAction.java
  16. 5
    5
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesUpdateConditionAction.java
  17. 7
    59
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesWs.java
  18. 1
    0
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/package-info.java

+ 8
- 0
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/BaseQGateWsAction.java View File

@@ -0,0 +1,8 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.server.ws.WsAction;

public interface BaseQGateWsAction extends WsAction {

// Marker interface
}

+ 7
- 8
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesAppAction.java View File

@@ -23,7 +23,6 @@ import org.apache.commons.lang.BooleanUtils;
import org.sonar.api.i18n.I18n;
import org.sonar.api.measures.Metric;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.text.JsonWriter;
@@ -32,7 +31,7 @@ import org.sonar.server.qualitygate.QualityGates;

import java.util.Locale;

public class QGatesAppAction implements RequestHandler {
public class QGatesAppAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -46,7 +45,8 @@ public class QGatesAppAction implements RequestHandler {
this.i18n = i18n;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
controller.createAction("app")
.setInternal(true)
.setDescription("Get initialization items for the admin UI. For internal use")
@@ -69,7 +69,7 @@ public class QGatesAppAction implements RequestHandler {

private void addPeriods(JsonWriter writer) {
writer.name("periods").beginArray();
for (int i=0; i < 3; i ++) {
for (int i = 0; i < 3; i++) {
writer.beginObject().prop("key", (long) i + 1).prop("text", periods.label(i + 1)).endObject();
}
addProjectPeriod(4, writer);
@@ -80,12 +80,12 @@ public class QGatesAppAction implements RequestHandler {
private void addProjectPeriod(int periodIndex, JsonWriter writer) {
writer.beginObject().prop("key", periodIndex).prop("text",
i18n.message(Locale.getDefault(), "quality_gates.project_period", "Period " + periodIndex, periodIndex)
).endObject();
).endObject();
}

private void addMetrics(JsonWriter writer) {
writer.name("metrics").beginArray();
for (Metric metric: qualityGates.gateMetrics()) {
for (Metric metric : qualityGates.gateMetrics()) {
writer.beginObject()
.prop("id", metric.getId())
.prop("key", metric.getKey())
@@ -93,10 +93,9 @@ public class QGatesAppAction implements RequestHandler {
.prop("type", metric.getType().toString())
.prop("domain", metric.getDomain())
.prop("hidden", BooleanUtils.isNotFalse(metric.isHidden()))
.endObject();
.endObject();
}
writer.endArray();
}


}

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesCopyAction.java View File

@@ -21,14 +21,13 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.qualitygate.db.QualityGateDto;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesCopyAction implements RequestHandler {
public class QGatesCopyAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -36,7 +35,8 @@ public class QGatesCopyAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("copy")
.setDescription("Copy a Quality Gate. Require Administer Quality Profiles and Gates permission")
.setPost(true)

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesCreateAction.java View File

@@ -21,14 +21,13 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.qualitygate.db.QualityGateDto;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesCreateAction implements RequestHandler {
public class QGatesCreateAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -36,7 +35,8 @@ public class QGatesCreateAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("create")
.setDescription("Create a Quality Gate. Require Administer Quality Profiles and Gates permission")
.setSince("4.3")

+ 5
- 5
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesCreateConditionAction.java View File

@@ -21,12 +21,11 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesCreateConditionAction implements RequestHandler {
public class QGatesCreateConditionAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -34,7 +33,8 @@ public class QGatesCreateConditionAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction createCondition = controller.createAction("create_condition")
.setDescription("Add a new condition to a quality gate. Require Administer Quality Profiles and Gates permission")
.setPost(true)
@@ -60,8 +60,8 @@ public class QGatesCreateConditionAction implements RequestHandler {
request.param(QGatesWs.PARAM_WARNING),
request.param(QGatesWs.PARAM_ERROR),
request.paramAsInt(QGatesWs.PARAM_PERIOD)
), response.newJsonWriter()
).close();
), response.newJsonWriter()
).close();
}

}

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesDeleteConditionAction.java View File

@@ -21,12 +21,11 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesDeleteConditionAction implements RequestHandler {
public class QGatesDeleteConditionAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -34,7 +33,8 @@ public class QGatesDeleteConditionAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction createCondition = controller.createAction("delete_condition")
.setDescription("Delete a condition from a quality gate. Require Administer Quality Profiles and Gates permission")
.setPost(true)

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesDeselectAction.java View File

@@ -21,12 +21,11 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesDeselectAction implements RequestHandler {
public class QGatesDeselectAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -34,7 +33,8 @@ public class QGatesDeselectAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("deselect")
.setDescription("Remove the association of a project from a quality gate. Require Administer Quality Profiles and Gates permission")
.setPost(true)

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesDestroyAction.java View File

@@ -21,12 +21,11 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesDestroyAction implements RequestHandler {
public class QGatesDestroyAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -34,7 +33,8 @@ public class QGatesDestroyAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("destroy")
.setDescription("Delete a Quality Gate. Require Administer Quality Profiles and Gates permission")
.setSince("4.3")

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesListAction.java View File

@@ -22,14 +22,13 @@ package org.sonar.server.qualitygate.ws;

import com.google.common.io.Resources;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.qualitygate.db.QualityGateDto;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesListAction implements RequestHandler {
public class QGatesListAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -37,7 +36,8 @@ public class QGatesListAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
controller.createAction("list")
.setDescription("Get a list of quality gates")
.setSince("4.3")

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesRenameAction.java View File

@@ -21,14 +21,13 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.qualitygate.db.QualityGateDto;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesRenameAction implements RequestHandler {
public class QGatesRenameAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -36,7 +35,8 @@ public class QGatesRenameAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("rename")
.setDescription("Rename a Quality Gate. Require Administer Quality Profiles and Gates permission")
.setPost(true)

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSearchAction.java View File

@@ -22,7 +22,6 @@ package org.sonar.server.qualitygate.ws;

import com.google.common.io.Resources;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.text.JsonWriter;
@@ -30,7 +29,7 @@ import org.sonar.core.qualitygate.db.ProjectQgateAssociation;
import org.sonar.core.qualitygate.db.ProjectQgateAssociationQuery;
import org.sonar.server.qualitygate.QgateProjectFinder;

public class QGatesSearchAction implements RequestHandler {
public class QGatesSearchAction implements BaseQGateWsAction {

private final QgateProjectFinder projectFinder;

@@ -38,7 +37,8 @@ public class QGatesSearchAction implements RequestHandler {
this.projectFinder = projectFinder;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("search")
.setDescription("Search for projects associated (or not) to a quality gate")
.setSince("4.3")

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSelectAction.java View File

@@ -21,12 +21,11 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesSelectAction implements RequestHandler {
public class QGatesSelectAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -34,7 +33,8 @@ public class QGatesSelectAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("select")
.setDescription("Associate a project to a quality gate. Require Administer Quality Profiles and Gates permission")
.setPost(true)

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSetAsDefaultAction.java View File

@@ -21,12 +21,11 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesSetAsDefaultAction implements RequestHandler {
public class QGatesSetAsDefaultAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -34,7 +33,8 @@ public class QGatesSetAsDefaultAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("set_as_default")
.setDescription("Set a quality gate as the default quality gate. Require Administer Quality Profiles and Gates permission")
.setSince("4.3")

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesShowAction.java View File

@@ -22,7 +22,6 @@ package org.sonar.server.qualitygate.ws;

import com.google.common.io.Resources;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.text.JsonWriter;
@@ -35,7 +34,7 @@ import javax.annotation.Nullable;

import java.util.Collection;

public class QGatesShowAction implements RequestHandler {
public class QGatesShowAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -43,7 +42,8 @@ public class QGatesShowAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("show")
.setDescription("Display the details of a quality gate")
.setSince("4.3")

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesUnsetDefaultAction.java View File

@@ -21,12 +21,11 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesUnsetDefaultAction implements RequestHandler {
public class QGatesUnsetDefaultAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -34,7 +33,8 @@ public class QGatesUnsetDefaultAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("unset_default")
.setDescription("Unset a quality gate as the default quality gate. Require Administer Quality Profiles and Gates permission")
.setSince("4.3")

+ 5
- 5
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesUpdateConditionAction.java View File

@@ -21,12 +21,11 @@
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.qualitygate.QualityGates;

public class QGatesUpdateConditionAction implements RequestHandler {
public class QGatesUpdateConditionAction implements BaseQGateWsAction {

private final QualityGates qualityGates;

@@ -34,7 +33,8 @@ public class QGatesUpdateConditionAction implements RequestHandler {
this.qualityGates = qualityGates;
}

void define(WebService.NewController controller) {
@Override
public void define(WebService.NewController controller) {
WebService.NewAction createCondition = controller.createAction("update_condition")
.setDescription("Update a condition attached to a quality gate. Require Administer Quality Profiles and Gates permission")
.setPost(true)
@@ -60,8 +60,8 @@ public class QGatesUpdateConditionAction implements RequestHandler {
request.param(QGatesWs.PARAM_WARNING),
request.param(QGatesWs.PARAM_ERROR),
request.paramAsInt(QGatesWs.PARAM_PERIOD)
), response.newJsonWriter()
).close();
), response.newJsonWriter()
).close();
}

}

+ 7
- 59
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesWs.java View File

@@ -42,46 +42,10 @@ public class QGatesWs implements WebService {
static final String PARAM_PROJECT_ID = "projectId";
static final String PARAM_ID = "id";

private final QGatesListAction listAction;
private final QGatesShowAction showAction;
private final QGatesSearchAction searchAction;

private final QGatesCreateAction createAction;
private final QGatesCopyAction copyAction;
private final QGatesSetAsDefaultAction setAsDefaultAction;
private final QGatesUnsetDefaultAction unsetAction;
private final QGatesDestroyAction destroyAction;
private final QGatesRenameAction renameAction;

private final QGatesCreateConditionAction createConditionAction;
private final QGatesUpdateConditionAction updateConditionAction;
private final QGatesDeleteConditionAction deleteConditionAction;

private final QGatesSelectAction selectAction;
private final QGatesDeselectAction deselectAction;

private final QGatesAppAction appAction;

public QGatesWs(QGatesListAction listAction, QGatesShowAction showAction, QGatesSearchAction searchAction,
QGatesCreateAction createAction, QGatesCopyAction copyAction, QGatesDestroyAction destroyAction, QGatesRenameAction renameAction,
QGatesSetAsDefaultAction setAsDefaultAction, QGatesUnsetDefaultAction unsetAction,
QGatesCreateConditionAction createConditionAction, QGatesUpdateConditionAction updateConditionAction, QGatesDeleteConditionAction deleteConditionAction,
QGatesSelectAction selectAction, QGatesDeselectAction deselectAction, QGatesAppAction appAction) {
this.listAction = listAction;
this.showAction = showAction;
this.searchAction = searchAction;
this.createAction = createAction;
this.destroyAction = destroyAction;
this.renameAction = renameAction;
this.unsetAction = unsetAction;
this.createConditionAction = createConditionAction;
this.updateConditionAction = updateConditionAction;
this.deleteConditionAction = deleteConditionAction;
this.selectAction = selectAction;
this.deselectAction = deselectAction;
this.copyAction = copyAction;
this.setAsDefaultAction = setAsDefaultAction;
this.appAction = appAction;
private final BaseQGateWsAction[] actions;

public QGatesWs(BaseQGateWsAction... actions) {
this.actions = actions;
}

@Override
@@ -90,25 +54,9 @@ public class QGatesWs implements WebService {
.setSince("4.3")
.setDescription("This service manages quality gates, including conditions and project association");

listAction.define(controller);
showAction.define(controller);
searchAction.define(controller);

createAction.define(controller);
renameAction.define(controller);
copyAction.define(controller);
destroyAction.define(controller);
setAsDefaultAction.define(controller);
unsetAction.define(controller);

createConditionAction.define(controller);
updateConditionAction.define(controller);
deleteConditionAction.define(controller);

selectAction.define(controller);
deselectAction.define(controller);

appAction.define(controller);
for (BaseQGateWsAction action : actions) {
action.define(controller);
}

controller.done();
}

+ 1
- 0
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/package-info.java View File

@@ -21,3 +21,4 @@
package org.sonar.server.qualitygate.ws;

import javax.annotation.ParametersAreNonnullByDefault;


Loading…
Cancel
Save