aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2016-06-29 12:04:54 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2016-07-01 18:00:26 +0200
commit39c40ef59f3f7e51bf05db4579e4d5e230168407 (patch)
tree10091133c55455e9b6d467eac66da7d43330a6f3 /sonar-plugin-api
parentfd2274207aa77bb13d5d660fe339a7f710a4a4b5 (diff)
downloadsonarqube-39c40ef59f3f7e51bf05db4579e4d5e230168407.tar.gz
sonarqube-39c40ef59f3f7e51bf05db4579e4d5e230168407.zip
SONAR-1891 Add upload plugin WS
Diffstat (limited to 'sonar-plugin-api')
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java20
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/PartImpl.java45
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/SimpleGetRequest.java12
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java13
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java32
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java39
6 files changed, 147 insertions, 14 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java
index 50dbabfdc58..48d9f427b2e 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java
@@ -19,6 +19,8 @@
*/
package org.sonar.api.server.ws;
+import static com.google.common.base.Preconditions.checkArgument;
+
import com.google.common.annotations.Beta;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
@@ -122,6 +124,15 @@ public abstract class Request {
@CheckForNull
public abstract InputStream paramAsInputStream(String key);
+ @CheckForNull
+ public abstract Part paramAsPart(String key);
+
+ public Part mandatoryParamAsPart(String key) {
+ Part part = paramAsPart(key);
+ checkArgument(part != null, "The '%s' parameter is missing", key);
+ return part;
+ }
+
/**
* @deprecated to be dropped in 4.4. Default values are declared in ws metadata
*/
@@ -270,4 +281,13 @@ public abstract class Request {
* @since 6.0
*/
public abstract String getPath();
+
+ /**
+ * @since 6.0
+ */
+ public interface Part {
+ InputStream getInputStream();
+
+ String getFileName();
+ }
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/PartImpl.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/PartImpl.java
new file mode 100644
index 00000000000..a0d61f3a5e0
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/PartImpl.java
@@ -0,0 +1,45 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.api.server.ws.internal;
+
+import java.io.InputStream;
+import org.sonar.api.server.ws.Request;
+
+public class PartImpl implements Request.Part {
+
+ private final InputStream inputStream;
+ private final String fileName;
+
+ public PartImpl(InputStream inputStream, String fileName) {
+ this.inputStream = inputStream;
+ this.fileName = fileName;
+ }
+
+ @Override
+ public InputStream getInputStream() {
+ return inputStream;
+ }
+
+ @Override
+ public String getFileName() {
+ return fileName;
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/SimpleGetRequest.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/SimpleGetRequest.java
index 3e583f691a1..9b2348f48d2 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/SimpleGetRequest.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/SimpleGetRequest.java
@@ -37,6 +37,7 @@ import org.sonar.api.server.ws.Request;
public class SimpleGetRequest extends Request {
private final Map<String, String> params = Maps.newHashMap();
+ private final Map<String, Part> parts = Maps.newHashMap();
private String mediaType = "application/json";
private String path;
@@ -83,6 +84,16 @@ public class SimpleGetRequest extends Request {
}
@Override
+ public Part paramAsPart(String key) {
+ return parts.get(key);
+ }
+
+ public SimpleGetRequest setPart(String key, InputStream input, String fileName) {
+ parts.put(key, new PartImpl(input, fileName));
+ return this;
+ }
+
+ @Override
public LocalConnector localConnector() {
throw new UnsupportedOperationException();
}
@@ -96,4 +107,5 @@ public class SimpleGetRequest extends Request {
this.path = path;
return this;
}
+
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
index 58615ec636e..fd1c2e2270d 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
@@ -19,6 +19,8 @@
*/
package org.sonar.api.server.ws.internal;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
@@ -34,8 +36,6 @@ import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.log.Loggers;
-import static com.google.common.base.Preconditions.checkNotNull;
-
/**
* @since 4.2
*/
@@ -74,6 +74,12 @@ public abstract class ValidatingRequest extends Request {
return readInputStreamParam(key);
}
+ @Override
+ @CheckForNull
+ public Part paramAsPart(String key) {
+ return readPart(key);
+ }
+
@CheckForNull
private String param(String key, boolean validateValue) {
WebService.Param definition = action.param(key);
@@ -139,6 +145,9 @@ public abstract class ValidatingRequest extends Request {
@CheckForNull
protected abstract InputStream readInputStreamParam(String key);
+ @CheckForNull
+ protected abstract Part readPart(String key);
+
private static void validate(String value, WebService.Param definition) {
Set<String> possibleValues = definition.possibleValues();
if (possibleValues != null && !possibleValues.contains(value)) {
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java
index a8b939ee116..8f6613176c5 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java
@@ -32,6 +32,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.rule.RuleStatus;
+import org.sonar.api.server.ws.internal.PartImpl;
import org.sonar.api.server.ws.internal.ValidatingRequest;
import org.sonar.api.utils.DateUtils;
@@ -259,9 +260,30 @@ public class RequestTest {
assertThat(IOUtils.toString(underTest.setParam("a_string", "foo").paramAsInputStream("a_string"))).isEqualTo("foo");
}
+ @Test
+ public void param_as_part() throws Exception {
+ InputStream inputStream = mock(InputStream.class);
+ underTest.setPart("key", inputStream, "filename");
+
+ Request.Part part = underTest.paramAsPart("key");
+ assertThat(part.getInputStream()).isEqualTo(inputStream);
+ assertThat(part.getFileName()).isEqualTo("filename");
+
+ assertThat(underTest.paramAsPart("unknown")).isNull();
+ }
+
+ @Test
+ public void mandatory_param_as_part() throws Exception {
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("The 'required_param' parameter is missing");
+
+ underTest.mandatoryParamAsPart("required_param");
+ }
+
private static class FakeRequest extends ValidatingRequest {
private final Map<String, String> params = Maps.newHashMap();
+ private final Map<String, Part> parts = Maps.newHashMap();
@Override
public String method() {
@@ -301,6 +323,16 @@ public class RequestTest {
return param == null ? null : IOUtils.toInputStream(param);
}
+
+ @Override
+ protected Part readPart(String key) {
+ return parts.get(key);
+ }
+
+ public FakeRequest setPart(String key, InputStream input, String fileName) {
+ parts.put(key, new PartImpl(input, fileName));
+ return this;
+ }
}
private static class FakeWs implements WebService {
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java
index 9d80da9247f..08f69177262 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/internal/SimpleGetRequestTest.java
@@ -19,29 +19,44 @@
*/
package org.sonar.api.server.ws.internal;
-import org.junit.Test;
-
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+import java.io.InputStream;
+import org.junit.Test;
+import org.sonar.api.server.ws.Request;
public class SimpleGetRequestTest {
+ SimpleGetRequest underTest = new SimpleGetRequest();
+
@Test
public void method() {
- SimpleGetRequest request = new SimpleGetRequest();
- assertThat(request.method()).isEqualTo("GET");
+ assertThat(underTest.method()).isEqualTo("GET");
- request.setParam("foo", "bar");
- assertThat(request.param("foo")).isEqualTo("bar");
- assertThat(request.param("unknown")).isNull();
+ underTest.setParam("foo", "bar");
+ assertThat(underTest.param("foo")).isEqualTo("bar");
+ assertThat(underTest.param("unknown")).isNull();
}
@Test
public void has_param() {
- SimpleGetRequest request = new SimpleGetRequest();
- assertThat(request.method()).isEqualTo("GET");
+ assertThat(underTest.method()).isEqualTo("GET");
+
+ underTest.setParam("foo", "bar");
+ assertThat(underTest.hasParam("foo")).isTrue();
+ assertThat(underTest.hasParam("unknown")).isFalse();
+ }
+
+ @Test
+ public void get_part() throws Exception {
+ InputStream inputStream = mock(InputStream.class);
+ underTest.setPart("key", inputStream, "filename");
+
+ Request.Part part = underTest.paramAsPart("key");
+ assertThat(part.getInputStream()).isEqualTo(inputStream);
+ assertThat(part.getFileName()).isEqualTo("filename");
- request.setParam("foo", "bar");
- assertThat(request.hasParam("foo")).isTrue();
- assertThat(request.hasParam("unknown")).isFalse();
+ assertThat(underTest.paramAsPart("unknown")).isNull();
}
}