package edu.asu.spring.quadriga.conceptpower.impl; import java.util.HashMap; import java.util.Map; import javax.inject.Inject; import javax.inject.Named; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import edu.asu.spring.quadriga.conceptpower.IConceptpowerConnector; import edu.asu.spring.quadriga.domain.impl.ConceptpowerReply; import edu.asu.spring.quadriga.web.workbench.AddCollaboratorController; /** * This class provides functionality to search Conceptpower. * * @author Julia Damerow, satyaswaroop * */ @Service public class ConceptpowerConnector implements IConceptpowerConnector { private static final Logger logger = LoggerFactory.getLogger(ConceptpowerConnector.class); @Inject @Named("restTemplate") private RestTemplate restTemplate; @Autowired @Qualifier("conceptPowerURL") private String conceptURL; @Autowired @Qualifier("searchConceptPowerURLPath") private String searchURL; @Autowired @Qualifier("searchConceptpowerEndpoint") private String searchEndpoint; @Autowired @Qualifier("updateConceptPowerURLPath") private String idUrl; /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.conceptpower.impl.IConceptpowerConnector#search( * java.lang.String, java.lang.String) */ @Override @Cacheable(value = "concepts") public ConceptpowerReply search(String item, String pos) { Map<String, String> vars = new HashMap<String, String>(); vars.put("name", item); vars.put("pos", pos); return restTemplate.getForObject(conceptURL + searchURL + "{name}/{pos}", ConceptpowerReply.class, vars); } /** * Searches Conceptpower for the given term using Conceptpowers search API. * Search query consists of word=searchTerm. * * @param searchTerm * Term to search for. * @return */ @Override @Cacheable(value = "concepts") public ConceptpowerReply search(String searchTerm) { Map<String, String> vars = new HashMap<String, String>(); vars.put("searchterm", searchTerm); return restTemplate.getForObject(conceptURL + searchEndpoint + "?word={searchterm}", ConceptpowerReply.class, vars); } /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.conceptpower.impl.IConceptpowerConnector#getById( * java.lang.String) */ @Override @Cacheable(value = "concepts", key = "#id") public ConceptpowerReply getById(String id) { Map<String, String> vars = new HashMap<String, String>(); // vars.put("name", id); String url = conceptURL + idUrl + id.trim(); try { return restTemplate.getForObject(url, ConceptpowerReply.class, vars); } catch (Exception ex) { logger.error("Offending id: " + id); logger.error("Could not get concept", ex); return null; } } }