Commit 4b24a5bb authored by Piotr Gawron's avatar Piotr Gawron
Browse files

documentation for image conversion API end points

parent a5178600
...@@ -69,12 +69,12 @@ public class ConvertController extends BaseController { ...@@ -69,12 +69,12 @@ public class ConvertController extends BaseController {
} }
@RequestMapping(value = "/", method = { RequestMethod.GET, RequestMethod.POST }) @RequestMapping(value = "/", method = { RequestMethod.GET, RequestMethod.POST })
public Map<String, Object> getInformation() { public Map<String, ?> getInformation() {
return convertController.getInformation(); return convertController.getInformation();
} }
@RequestMapping(value = "/image/", method = { RequestMethod.GET, RequestMethod.POST }) @RequestMapping(value = "/image/", method = { RequestMethod.GET, RequestMethod.POST })
public Map<String, Object> getInformationImage() { public Map<String, ?> getInformationImage() {
return convertController.getInformationImage(); return convertController.getInformationImage();
} }
......
...@@ -148,17 +148,17 @@ public class ConvertRestImpl extends BaseRestImpl { ...@@ -148,17 +148,17 @@ public class ConvertRestImpl extends BaseRestImpl {
return new ByteArrayInputStream(out.toByteArray()); return new ByteArrayInputStream(out.toByteArray());
} }
public Map<String, Object> getInformation() { public Map<String, List<Map<String, List<String>>>> getInformation() {
Map<String, Object> info = new LinkedHashMap<>(); Map<String, List<Map<String, List<String>>>> info = new LinkedHashMap<>();
List<Object> converters = new ArrayList<>(); List<Map<String, List<String>>> converters = new ArrayList<>();
for (Converter converter : getModelConverters()) { for (Converter converter : getModelConverters()) {
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
names.add(removeWhiteSpaces(converter.getCommonName())); names.add(removeWhiteSpaces(converter.getCommonName()));
names.add(converter.getClass().getCanonicalName()); names.add(converter.getClass().getCanonicalName());
Map<String, Object> names_item = new LinkedHashMap<>(); Map<String, List<String>> names_item = new LinkedHashMap<>();
names_item.put("available_names", names); names_item.put("available_names", names);
converters.add(names_item); converters.add(names_item);
} }
...@@ -168,10 +168,10 @@ public class ConvertRestImpl extends BaseRestImpl { ...@@ -168,10 +168,10 @@ public class ConvertRestImpl extends BaseRestImpl {
return info; return info;
} }
public Map<String, Object> getInformationImage() { public Map<String, List<Map<String, List<String>>>> getInformationImage() {
Map<String, Object> info = getInformation(); Map<String, List<Map<String, List<String>>>> info = getInformation();
List<Object> generators = new ArrayList<>(); List<Map<String, List<String>>> generators = new ArrayList<>();
ImageGenerators igs = new ImageGenerators(); ImageGenerators igs = new ImageGenerators();
for (Pair<String, Class<? extends AbstractImageGenerator>> generator : igs.getAvailableImageGenerators()) { for (Pair<String, Class<? extends AbstractImageGenerator>> generator : igs.getAvailableImageGenerators()) {
...@@ -179,7 +179,7 @@ public class ConvertRestImpl extends BaseRestImpl { ...@@ -179,7 +179,7 @@ public class ConvertRestImpl extends BaseRestImpl {
names.add(igs.getExtension(generator.getRight())); names.add(igs.getExtension(generator.getRight()));
names.add(generator.getRight().getCanonicalName()); names.add(generator.getRight().getCanonicalName());
Map<String, Object> names_item = new LinkedHashMap<>(); Map<String, List<String>> names_item = new LinkedHashMap<>();
names_item.put("available_names", names); names_item.put("available_names", names);
generators.add(names_item); generators.add(names_item);
} }
......
...@@ -44,7 +44,7 @@ public class ConvertRestImplTest extends RestTestFunctions { ...@@ -44,7 +44,7 @@ public class ConvertRestImplTest extends RestTestFunctions {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Test @Test
public void testGetInformation() throws Exception { public void testGetInformation() throws Exception {
Map<String, Object> result = convertRestImpl.getInformationImage(); Map<String, ?> result = convertRestImpl.getInformationImage();
assertTrue(result.keySet().size() == 2); assertTrue(result.keySet().size() == 2);
assertNotNull(result.get("inputs")); assertNotNull(result.get("inputs"));
assertNotNull(result.get("outputs")); assertNotNull(result.get("outputs"));
...@@ -59,7 +59,7 @@ public class ConvertRestImplTest extends RestTestFunctions { ...@@ -59,7 +59,7 @@ public class ConvertRestImplTest extends RestTestFunctions {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Test @Test
public void testGetInformationImage() throws Exception { public void testGetInformationImage() throws Exception {
Map<String, Object> result = convertRestImpl.getInformationImage(); Map<String, ?> result = convertRestImpl.getInformationImage();
assertTrue(result.keySet().size() == 2); assertTrue(result.keySet().size() == 2);
assertNotNull(result.get("inputs")); assertNotNull(result.get("inputs"));
assertNotNull(result.get("outputs")); assertNotNull(result.get("outputs"));
...@@ -162,7 +162,7 @@ public class ConvertRestImplTest extends RestTestFunctions { ...@@ -162,7 +162,7 @@ public class ConvertRestImplTest extends RestTestFunctions {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private List<String> extractIdsFromOutputs(Map<String, Object> infoObject) { private List<String> extractIdsFromOutputs(Map<String, ?> infoObject) {
List<String> ids = new ArrayList<>(); List<String> ids = new ArrayList<>();
for (Map<String, List<String>> o : (List<Map<String, List<String>>>) infoObject.get("outputs")) { for (Map<String, List<String>> o : (List<Map<String, List<String>>>) infoObject.get("outputs")) {
ids.add(o.get("available_names").get(0)); ids.add(o.get("available_names").get(0));
...@@ -174,8 +174,8 @@ public class ConvertRestImplTest extends RestTestFunctions { ...@@ -174,8 +174,8 @@ public class ConvertRestImplTest extends RestTestFunctions {
throws SBMLException, SecurityException, InvalidInputDataExecption, InconsistentModelException, throws SBMLException, SecurityException, InvalidInputDataExecption, InconsistentModelException,
IOException, ConverterException, XMLStreamException, DrawingException, QueryException { IOException, ConverterException, XMLStreamException, DrawingException, QueryException {
Map<String, Object> info = convertRestImpl.getInformation(); Map<String, ?> info = convertRestImpl.getInformation();
Map<String, Object> infoImage = convertRestImpl.getInformationImage(); Map<String, ?> infoImage = convertRestImpl.getInformationImage();
List<String> targets = new ArrayList<>(); List<String> targets = new ArrayList<>();
......
...@@ -27,8 +27,23 @@ include::{snippets}/converter/format_conversion/curl-request.adoc[] ...@@ -27,8 +27,23 @@ include::{snippets}/converter/format_conversion/curl-request.adoc[]
==== Path Parameters ==== Path Parameters
include::{snippets}/converter/format_conversion/path-parameters.adoc[] include::{snippets}/converter/format_conversion/path-parameters.adoc[]
== Convert network from an input format to an output image
=== List available formats
==== CURL sample
include::{snippets}/converter/list_image_formats/curl-request.adoc[]
==== Response Fields ==== Response Fields
include::{snippets}/converter/format_conversion/response-fields.adoc[] include::{snippets}/converter/list_image_formats/response-fields.adoc[]
==== Sample Response
include::{snippets}/converter/list_image_formats/response-body.adoc[]
=== Convert network from an input format to an output image
==== CURL sample
include::{snippets}/converter/image_conversion/curl-request.adoc[]
==== Path Parameters
include::{snippets}/converter/image_conversion/path-parameters.adoc[]
...@@ -2,8 +2,10 @@ package lcsb.mapviewer.web; ...@@ -2,8 +2,10 @@ package lcsb.mapviewer.web;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.restdocs.payload.PayloadDocumentation.*; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields;
import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName;
import static org.springframework.restdocs.request.RequestDocumentation.pathParameters; import static org.springframework.restdocs.request.RequestDocumentation.pathParameters;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
...@@ -11,16 +13,20 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. ...@@ -11,16 +13,20 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.*;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.RequestBuilder;
import lcsb.mapviewer.api.convert.ConvertRestImpl;
import lcsb.mapviewer.converter.ConverterParams; import lcsb.mapviewer.converter.ConverterParams;
import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.Model;
...@@ -29,6 +35,9 @@ import lcsb.mapviewer.model.map.species.Element; ...@@ -29,6 +35,9 @@ import lcsb.mapviewer.model.map.species.Element;
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
public class ConvertControllerIntegrationTest extends ControllerIntegrationTest { public class ConvertControllerIntegrationTest extends ControllerIntegrationTest {
@Autowired
private ConvertRestImpl converterRestImpl;
Logger logger = LogManager.getLogger(); Logger logger = LogManager.getLogger();
@Test @Test
...@@ -130,7 +139,7 @@ public class ConvertControllerIntegrationTest extends ControllerIntegrationTest ...@@ -130,7 +139,7 @@ public class ConvertControllerIntegrationTest extends ControllerIntegrationTest
File file = new File("src/test/resources/convert/cd-sample.xml"); File file = new File("src/test/resources/convert/cd-sample.xml");
String content = FileUtils.readFileToString(file, StandardCharsets.UTF_8); String content = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
RequestBuilder request = post("/convert/{inputFormat}:{outputFormat}", "CellDesigner_SBML", "GPML") RequestBuilder request = post("/convert/{inputFormat}:{outputFormat}", "CellDesigner_SBML", "GPML")
.header("post-filename","input_file.xml") .header("post-filename", "input_file.xml")
.content(content.getBytes("UTF-8")) .content(content.getBytes("UTF-8"))
.characterEncoding("UTF-8"); .characterEncoding("UTF-8");
...@@ -138,10 +147,67 @@ public class ConvertControllerIntegrationTest extends ControllerIntegrationTest ...@@ -138,10 +147,67 @@ public class ConvertControllerIntegrationTest extends ControllerIntegrationTest
.andDo(document("converter/format_conversion", .andDo(document("converter/format_conversion",
pathParameters( pathParameters(
parameterWithName("inputFormat") parameterWithName("inputFormat")
.description("input format (list of available formats be obtained from the /convert/ API)"), .description("input format, available options: " + getConverters()),
parameterWithName("outputFormat") parameterWithName("outputFormat")
.description("output format (list of available formats be obtained from the /convert/ API)")))) .description("output format, available options: " + getConverters()))))
.andExpect(status().is2xxSuccessful()); .andExpect(status().is2xxSuccessful());
} }
@Test
public void testListAvailableImageFormats() throws Exception {
RequestBuilder request = get("/convert/image/");
mockMvc.perform(request)
.andExpect(status().is2xxSuccessful())
.andDo(document("converter/list_image_formats",
responseFields(
fieldWithPath("inputs")
.description("list of available input formats")
.type("Array"),
fieldWithPath("inputs[].available_names")
.description("list of names that could be used for specific format")
.type("Array<String>"),
fieldWithPath("outputs")
.description("list of available input formats")
.type("Array"),
fieldWithPath("outputs[].available_names")
.description("list of names that could be used for specific format")
.type("Array<String>"))));
}
@Test
public void convertCellDesignerToSvg() throws Exception {
File file = new File("src/test/resources/convert/cd-sample.xml");
String content = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
RequestBuilder request = post("/convert/image/{inputFormat}:{outputFormat}", "CellDesigner_SBML", "png")
.header("post-filename", "input_file.xml")
.content(content.getBytes("UTF-8"))
.characterEncoding("UTF-8");
mockMvc.perform(request)
.andDo(document("converter/image_conversion",
pathParameters(
parameterWithName("inputFormat")
.description("input format, available options: " + getConverters()),
parameterWithName("outputFormat")
.description("output format, available options: " + getImageConverters()))))
.andExpect(status().is2xxSuccessful());
}
private String getConverters() {
List<String> converters = new ArrayList<>();
for (Map<String, List<String>> entry : converterRestImpl.getInformation().get("inputs")) {
converters.addAll(entry.get("available_names"));
}
return StringUtils.join(converters, ", ");
}
private String getImageConverters() {
List<String> converters = new ArrayList<>();
for (Map<String, List<String>> entry : converterRestImpl.getInformation().get("outputs")) {
converters.addAll(entry.get("available_names"));
}
return StringUtils.join(converters, ", ");
}
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment