package org.nextprot.api.build.controller;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jsondoc.core.annotation.Api;
import org.jsondoc.core.annotation.ApiMethod;
import org.jsondoc.core.pojo.ApiVerb;
import org.nextprot.api.commons.utils.StringUtils;
import org.nextprot.api.core.service.PublicationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
@Lazy
@Controller
@Api(name = "Publication", description = "Method to retrieve publications", group="Build rdf")
public class PublicationController {
@Autowired private PublicationService publicationService;
//TODO remove comment below
@Autowired
private ViewResolver viewResolver;
@ApiMethod(path = "/rdf/publication/{md5}", verb = ApiVerb.GET, description = "Exports one neXtProt publication.", produces = { "text/turtle"})
@RequestMapping("/rdf/publication/{md5}")
public String findOnePublicationByMd5(
@PathVariable("md5") String md5, Model model) {
model.addAttribute("publication", this.publicationService.findPublicationByMD5(md5));
model.addAttribute("prefix", true);
model.addAttribute("StringUtils", StringUtils.class);
return "publication";
}
@ApiMethod(path = "/rdf/publication/title/{title}", verb = ApiVerb.GET, description = "Exports one neXtProt publication.", produces = { "text/turtle"})
@RequestMapping("/rdf/publication/title/{title}")
public String findOnePublicationByTitle(
@PathVariable("title") String title, Model model) {
model.addAttribute("publication", this.publicationService.findPublicationByTitle(title));
model.addAttribute("prefix", true);
model.addAttribute("StringUtils", StringUtils.class);
return "publication";
}
@ApiMethod(path = "/rdf/publication", verb = ApiVerb.GET, description = "Exports the whole neXtProt publication ordered by year and title.", produces = { "text/turtle"})
@RequestMapping("/rdf/publication")
public void findAllPublication(Map<String,Object> model, HttpServletResponse response, HttpServletRequest request) throws Exception {
Boolean withPrefix=true;
View v = viewResolver.resolveViewName("publication", Locale.ENGLISH);
List<Long> publicationIds = this.publicationService.findAllPublicationIds();
for(Long pubId :publicationIds){
model.put("prefix", withPrefix);
model.put("StringUtils", StringUtils.class);
model.put("publication", this.publicationService.findPublicationById(pubId));
model.put("StringUtils", StringUtils.class);
v.render(model, request, response);
withPrefix=false;
}
//
// new ModelAndView("publication-list", model).compile().toString();
// response.getOutputStream().write(bytes);
// return "publication-list";
}
}