Project

General

Profile

Download (6.31 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2015 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9
package org.bgbm.biovel.drf.query;
10

    
11
import java.io.IOException;
12
import java.net.URI;
13
import java.net.URISyntaxException;
14
import java.nio.charset.Charset;
15
import java.util.ArrayList;
16
import java.util.EnumSet;
17
import java.util.Iterator;
18
import java.util.List;
19
import java.util.Map;
20

    
21
import org.apache.http.HttpHost;
22
import org.apache.http.HttpResponse;
23
import org.apache.http.client.ClientProtocolException;
24
import org.apache.http.client.HttpClient;
25
import org.apache.http.client.methods.HttpGet;
26
import org.apache.http.impl.client.DefaultHttpClient;
27
import org.apache.http.util.EntityUtils;
28
import org.bgbm.biovel.drf.checklist.DRFChecklistException;
29
import org.bgbm.biovel.drf.checklist.RESTURIBuilder;
30
import org.bgbm.biovel.drf.checklist.SearchMode;
31
import org.bgbm.biovel.drf.tnr.msg.Query;
32
import org.bgbm.biovel.drf.tnr.msg.Query.Request;
33
import org.slf4j.Logger;
34
import org.slf4j.LoggerFactory;
35

    
36
/**
37
 * @author a.kohlbecker
38
 * @date Sep 30, 2015
39
 *
40
 */
41
public class RestClient implements IQueryClient{
42

    
43
    protected Logger logger = LoggerFactory.getLogger(RestClient.class);
44

    
45
    public final static String QUERY_PLACEHOLDER = "{q}";
46

    
47
    private final HttpHost httpHost;
48

    
49
    public HttpHost getHost() {
50
        return this.httpHost;
51
    }
52

    
53
    public RestClient(HttpHost httpHost) {
54
        this.httpHost = httpHost;
55
    }
56

    
57
    /**
58
     * Sends a GET request to the REST service specified by the <code>uri</code>
59
     * parameter and returns the response body as <code>String</code>
60
     *
61
     * @param uri
62
     *            the REST service uri to send a GET request to
63
     * @return the response body
64
     * @throws DRFChecklistException
65
     */
66
    public String processRESTService(URI uri) throws DRFChecklistException {
67
        HttpClient client = new DefaultHttpClient();
68
        HttpGet request = new HttpGet(uri);
69

    
70
        try {
71
            logger.debug(">> Request URI: " + request.getRequestLine().getUri());
72
            HttpResponse response = client.execute(request);
73

    
74
            String responseBody = EntityUtils.toString(response.getEntity(),Charset.forName("UTF-8"));
75
            logger.debug("<< Response: " + response.getStatusLine());
76
            logger.trace(responseBody);
77
            logger.trace("==============");
78

    
79
            return responseBody;
80

    
81
        } catch (ClientProtocolException e1) {
82
            e1.printStackTrace();
83
//            throw new DRFChecklistException(e1);
84
        } catch (IOException e) {
85
            e.printStackTrace();
86
            throw new DRFChecklistException(e);
87
        }
88
        return null;
89
    }
90

    
91
    public URI buildUriFromQueryStringList(List<String> queryList,
92
            String endpointSuffix,
93
            String queryKey,
94
            Map<String, String> paramMap) {
95

    
96
        RESTURIBuilder builder = new RESTURIBuilder(getHost().getHostName(),
97
                    getHost().getPort(),
98
                    endpointSuffix,
99
                    queryKey,
100
                    paramMap);
101

    
102
        URI uri = null;
103
        Iterator<String> itrQuery = queryList.iterator();
104
        while(itrQuery.hasNext()) {
105
            builder.addQuery(itrQuery.next());
106
        }
107

    
108
        try {
109
            uri = builder.build();
110
        } catch (URISyntaxException e) {
111
            // TODO Auto-generated catch block
112
            //e.printStackTrace();
113
        }
114
        return uri;
115
    }
116

    
117
    public URI buildUriFromQueryString(String query,
118
            String endpointSuffix,
119
            String queryKey,
120
            Map<String, String> paramMap) {
121

    
122
        RESTURIBuilder builder = new RESTURIBuilder(getHost().getHostName(),
123
                    getHost().getPort(),
124
                    endpointSuffix,
125
                    queryKey,
126
                    paramMap);
127

    
128
        URI uri = null;
129

    
130
        builder.addQuery(query);
131

    
132
        try {
133
            uri = builder.build();
134
        } catch (URISyntaxException e) {
135
            // TODO Auto-generated catch block
136
            //e.printStackTrace();
137
        }
138
        return uri;
139
    }
140

    
141
    public URI buildUriFromQueryString(String endpointUrl,
142
            Map<String, String> paramMap) {
143

    
144
        RESTURIBuilder builder = new RESTURIBuilder(getHost().getHostName(), getHost().getPort(),endpointUrl, paramMap);
145

    
146
        URI uri = null;
147

    
148
        try {
149
            uri = builder.build();
150
        } catch (URISyntaxException e) {
151
            // TODO Auto-generated catch block
152
            //e.printStackTrace();
153
        }
154
        return uri;
155
    }
156

    
157
    /**
158
     *
159
     * @param queryList
160
     * @param endpointSuffix
161
     * @param queryKey
162
     * @param likeModeWildcard the wildcard to add to the query string in case of like search modes
163
     * @param paramMap
164
     * @return
165
     */
166
    public URI buildUriFromQueryList(List<Query> queryList,
167
            String endpointSuffix,
168
            String queryKey,
169
            String likeModeWildcard,
170
            Map<String, String> paramMap) {
171

    
172
        List<String> queries = new ArrayList<String>();
173

    
174
        EnumSet<SearchMode> likeModes = EnumSet.of(SearchMode.scientificNameLike);
175

    
176
        for(Query query : queryList) {
177
            Request tnrRequest = query.getRequest();
178
            String queryString = tnrRequest.getQueryString();
179
            if(likeModes.contains(SearchMode.valueOf(tnrRequest.getSearchMode()))){
180
                queryString += likeModeWildcard;
181
            }
182
            queries.add(queryString);
183
        }
184

    
185
        logger.debug("Query size : " + queries.size());
186

    
187
        return buildUriFromQueryStringList(queries,
188
                endpointSuffix,
189
                queryKey,
190
                paramMap);
191
    }
192

    
193
    public URI buildUriFromQuery(Query query,
194
            String endpointSuffix,
195
            String queryKey,
196
            Map<String, String> paramMap) {
197
        return buildUriFromQueryString(query.getRequest().getQueryString(),
198
                endpointSuffix,
199
                queryKey,
200
                paramMap);
201
    }
202

    
203
    public URI buildUriFromQuery(Query query,
204
            String regexpUrl,
205
            Map<String, String> paramMap) {
206
        String url = regexpUrl.replace(QUERY_PLACEHOLDER, query.getRequest().getQueryString());
207
        return buildUriFromQueryString(url, paramMap);
208
    }
209

    
210

    
211

    
212
}
(2-2/3)