dnet-applications/apps/dnet-is-application/src/main/java/eu/dnetlib/is/context/ContextRestController.java

95 lines
3.2 KiB
Java

package eu.dnetlib.is.context;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.DocumentException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import eu.dnetlib.is.context.model.Category;
import eu.dnetlib.is.context.model.Context;
import eu.dnetlib.is.context.model.CtxChildInfo;
import eu.dnetlib.is.context.model.repository.CategoryRepository;
import eu.dnetlib.is.context.model.repository.ConceptLevel0Repository;
import eu.dnetlib.is.context.model.repository.ConceptLevel1Repository;
import eu.dnetlib.is.context.model.repository.ConceptLevel2Repository;
import eu.dnetlib.is.context.model.repository.ContextRepository;
@RestController
@RequestMapping("/api/contexts")
public class ContextRestController {
@Autowired
private ContextRepository contextRepository;
@Autowired
private CategoryRepository categoryRepository;
@Autowired
private ConceptLevel0Repository conceptLevel0Repository;
@Autowired
private ConceptLevel1Repository conceptLevel1Repository;
@Autowired
private ConceptLevel2Repository conceptLevel2Repository;
@Autowired
private ContextImporter contextImporter;
private static final Log log = LogFactory.getLog(ContextRestController.class);
@GetMapping("/")
public List<Context> listContexts() {
return contextRepository.findAll()
.stream()
.sorted((v1, v2) -> StringUtils.compareIgnoreCase(v1.getId(), v2.getId()))
.collect(Collectors.toList());
}
@GetMapping("/{ctxId}")
public Context getContext(@PathVariable final String ctxId) {
return contextRepository.getById(ctxId);
}
@GetMapping("/{parent}/categories")
public Iterable<Category> listCategories(@PathVariable final String parent) {
return categoryRepository.findByParentOrderById(parent);
}
@GetMapping("/{level}/{parent}/concepts")
public Iterable<? extends CtxChildInfo> listCategories(@PathVariable final int level, @PathVariable final String parent) {
switch (level) {
case 0:
return conceptLevel0Repository.findByParentOrderById(parent);
case 1:
return conceptLevel1Repository.findByParentOrderById(parent);
case 2:
return conceptLevel2Repository.findByParentOrderById(parent);
default:
throw new RuntimeException("Invalid concept level - valid levels are 0, 1, 2");
}
}
@PostMapping(value = "/load", consumes = "text/plain")
public List<String> loadFromOldProfile(final HttpServletRequest request) throws DocumentException, IOException {
final String xml = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
contextImporter.loadFromOldProfile(xml);
return Arrays.asList("Done.");
}
}