diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2016-06-29 12:04:54 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2016-07-01 18:00:26 +0200 |
commit | 39c40ef59f3f7e51bf05db4579e4d5e230168407 (patch) | |
tree | 10091133c55455e9b6d467eac66da7d43330a6f3 /sonar-plugin-api | |
parent | fd2274207aa77bb13d5d660fe339a7f710a4a4b5 (diff) | |
download | sonarqube-39c40ef59f3f7e51bf05db4579e4d5e230168407.tar.gz sonarqube-39c40ef59f3f7e51bf05db4579e4d5e230168407.zip |
SONAR-1891 Add upload plugin WS
Diffstat (limited to 'sonar-plugin-api')
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(); } } |