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