blob: ae60dca71868be7696218bfb9ed7d72116109c8b [file] [log] [blame]
package de.ids_mannheim.korap.core.web.controller;
import java.io.IOException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.fasterxml.jackson.databind.JsonNode;
import de.ids_mannheim.korap.core.service.AnnotationService;
import de.ids_mannheim.korap.dto.FoundryDto;
import de.ids_mannheim.korap.dto.LayerDto;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.utils.JsonUtils;
import de.ids_mannheim.korap.web.KustvaktResponseHandler;
import de.ids_mannheim.korap.web.filter.APIVersionFilter;
import de.ids_mannheim.korap.web.filter.DemoUserFilter;
import de.ids_mannheim.korap.web.utils.ResourceFilters;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
/**
* Provides services regarding annotation related information.
*
* @author margaretha
*
*/
@Controller
@Path("/{version}/annotation/")
@ResourceFilters({ APIVersionFilter.class, DemoUserFilter.class})
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public class AnnotationController {
@Autowired
private KustvaktResponseHandler kustvaktResponseHandler;
@Autowired
private AnnotationService annotationService;
/**
* Returns information about all supported layers
*
* @return a json serialization of all supported layers
*/
@GET
@Path("layers")
public List<LayerDto> getLayers () {
return annotationService.getLayerDtos();
}
/**
* Returns a list of foundry descriptions.
*
* @param codes
* foundry-layer code or a Kleene-star
* @param language
* 2-letter language code (description language)
* @return a list of foundry, layer, value information in json
*/
@SuppressWarnings("unchecked")
@POST
@Path("description")
@Consumes(MediaType.APPLICATION_JSON)
public List<FoundryDto> getFoundryDescriptions (String json) {
if (json == null || json.isEmpty()) {
throw kustvaktResponseHandler.throwit(
new KustvaktException(StatusCodes.MISSING_PARAMETER,
"Missing a json string.", ""));
}
JsonNode node;
try {
node = JsonUtils.readTree(json);
}
catch (KustvaktException e1) {
throw kustvaktResponseHandler.throwit(e1);
}
String language;
if (!node.has("language")) {
language = "en";
}
else {
language = node.get("language").asText();
if (language == null || language.isEmpty()) {
language = "en";
}
else if (!(language.equals("en") || language.equals("de"))) {
throw kustvaktResponseHandler.throwit(
new KustvaktException(StatusCodes.UNSUPPORTED_VALUE,
"Unsupported value:", language));
}
}
List<String> codes;
try {
codes = JsonUtils.convert(node.get("codes"), List.class);
}
catch (IOException | NullPointerException e) {
throw kustvaktResponseHandler.throwit(new KustvaktException(
StatusCodes.INVALID_ARGUMENT, "Bad argument:", json));
}
if (codes == null || codes.isEmpty()) {
throw kustvaktResponseHandler.throwit(
new KustvaktException(StatusCodes.MISSING_ATTRIBUTE,
"codes is null or empty", "codes"));
}
try {
return annotationService.getFoundryDtos(codes, language);
}
catch (KustvaktException e) {
throw kustvaktResponseHandler.throwit(e);
}
}
}