Mercurial > hg > anteater
view src/de/mpiwg/anteater/species/scientific/impl/GNRDNameFinder.java @ 0:036535fcd179
anteater
author | jdamerow |
---|---|
date | Fri, 14 Sep 2012 10:30:43 +0200 |
parents | |
children |
line wrap: on
line source
package de.mpiwg.anteater.species.scientific.impl; import java.net.URI; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriBuilder; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; import com.sun.jersey.core.util.MultivaluedMapImpl; import de.mpiwg.anteater.logging.IAnteaterLogger; import de.mpiwg.anteater.species.scientific.IScientificNamesFinder; import de.mpiwg.anteater.xml.INameFinderParser; import de.mpiwg.anteater.xml.impl.GNRDXMLParser; public class GNRDNameFinder implements IScientificNamesFinder { public static final String STATUS_WAITING = "303"; public static final String STATUS_DONE = "200"; public final static String COMPONENT_NAME = GNRDNameFinder.class.getSimpleName(); private IAnteaterLogger logger; public GNRDNameFinder(IAnteaterLogger logger) { this.logger = logger; } @Override public String findScientificNames(String text) { logger.logMessage(COMPONENT_NAME, "Asking GNRD service for names..."); ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(getBaseURI()); Client clientPollCall = Client.create(config); WebResource pollService = null; MultivaluedMap<String, String> values = new MultivaluedMapImpl(); values.add("text", text); String result = service.accept(MediaType.TEXT_XML).post(String.class, values); while (true) { INameFinderParser parser = new GNRDXMLParser(result); String status = parser.getStatus(); logger.logMessage(COMPONENT_NAME, "Polling URL: " + parser.getTokenURL()); logger.logMessageWithoutNewLine(COMPONENT_NAME, "Polling for results..."); if (status.trim().equals(STATUS_WAITING)) { logger.logMessage("waiting 10 seconds before retry."); // wait 2 sec before polling try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (pollService == null) { String pollURL = parser.getTokenURL(); pollService = clientPollCall.resource(createBaseURI(pollURL)); } result = pollService.accept(MediaType.TEXT_XML).get(String.class); } else { logger.logMessage("results received."); break; } } if (result == null || result.trim().isEmpty()) return null; return result; } protected URI getBaseURI() { return UriBuilder.fromUri("http://gnrd.globalnames.org/") .path("name_finder.xml").build(); } public URI createBaseURI(String uri) { return UriBuilder.fromUri(uri).build(); } }