Mercurial > hg > anteater
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:036535fcd179 |
---|---|
1 package de.mpiwg.anteater.species.scientific.impl; | |
2 | |
3 import java.net.URI; | |
4 | |
5 import javax.ws.rs.core.MediaType; | |
6 import javax.ws.rs.core.MultivaluedMap; | |
7 import javax.ws.rs.core.UriBuilder; | |
8 | |
9 import com.sun.jersey.api.client.Client; | |
10 import com.sun.jersey.api.client.WebResource; | |
11 import com.sun.jersey.api.client.config.ClientConfig; | |
12 import com.sun.jersey.api.client.config.DefaultClientConfig; | |
13 import com.sun.jersey.core.util.MultivaluedMapImpl; | |
14 | |
15 import de.mpiwg.anteater.logging.IAnteaterLogger; | |
16 import de.mpiwg.anteater.species.scientific.IScientificNamesFinder; | |
17 import de.mpiwg.anteater.xml.INameFinderParser; | |
18 import de.mpiwg.anteater.xml.impl.GNRDXMLParser; | |
19 | |
20 public class GNRDNameFinder implements IScientificNamesFinder { | |
21 | |
22 public static final String STATUS_WAITING = "303"; | |
23 public static final String STATUS_DONE = "200"; | |
24 | |
25 public final static String COMPONENT_NAME = GNRDNameFinder.class.getSimpleName(); | |
26 | |
27 private IAnteaterLogger logger; | |
28 | |
29 public GNRDNameFinder(IAnteaterLogger logger) { | |
30 this.logger = logger; | |
31 } | |
32 | |
33 @Override | |
34 public String findScientificNames(String text) { | |
35 logger.logMessage(COMPONENT_NAME, "Asking GNRD service for names..."); | |
36 | |
37 ClientConfig config = new DefaultClientConfig(); | |
38 Client client = Client.create(config); | |
39 WebResource service = client.resource(getBaseURI()); | |
40 | |
41 Client clientPollCall = Client.create(config); | |
42 WebResource pollService = null; | |
43 | |
44 MultivaluedMap<String, String> values = new MultivaluedMapImpl(); | |
45 values.add("text", text); | |
46 | |
47 String result = service.accept(MediaType.TEXT_XML).post(String.class, values); | |
48 | |
49 while (true) { | |
50 INameFinderParser parser = new GNRDXMLParser(result); | |
51 String status = parser.getStatus(); | |
52 logger.logMessage(COMPONENT_NAME, "Polling URL: " + parser.getTokenURL()); | |
53 logger.logMessageWithoutNewLine(COMPONENT_NAME, "Polling for results..."); | |
54 | |
55 if (status.trim().equals(STATUS_WAITING)) { | |
56 logger.logMessage("waiting 10 seconds before retry."); | |
57 // wait 2 sec before polling | |
58 try { | |
59 Thread.sleep(10000); | |
60 } catch (InterruptedException e) { | |
61 // TODO Auto-generated catch block | |
62 e.printStackTrace(); | |
63 } | |
64 | |
65 if (pollService == null) { | |
66 String pollURL = parser.getTokenURL(); | |
67 pollService = clientPollCall.resource(createBaseURI(pollURL)); | |
68 } | |
69 | |
70 result = pollService.accept(MediaType.TEXT_XML).get(String.class); | |
71 } | |
72 else { | |
73 logger.logMessage("results received."); | |
74 break; | |
75 } | |
76 } | |
77 | |
78 if (result == null || result.trim().isEmpty()) | |
79 return null; | |
80 | |
81 return result; | |
82 } | |
83 | |
84 protected URI getBaseURI() { | |
85 return UriBuilder.fromUri("http://gnrd.globalnames.org/") | |
86 .path("name_finder.xml").build(); | |
87 } | |
88 | |
89 public URI createBaseURI(String uri) { | |
90 return UriBuilder.fromUri(uri).build(); | |
91 } | |
92 } |