Project

General

Profile

1 60749 akoulalis
package eu.dnetlib.repo.manager.utils;
2
3
import com.google.gson.JsonElement;
4
import com.google.gson.JsonObject;
5
import com.google.gson.JsonParser;
6
import org.apache.commons.codec.binary.Base64;
7
import org.apache.log4j.Logger;
8
import org.springframework.beans.factory.annotation.Value;
9
import org.springframework.http.*;
10
import org.springframework.stereotype.Component;
11
import org.springframework.web.client.RestTemplate;
12
13
import java.nio.charset.Charset;
14
import java.util.Map;
15
16
@Component
17
public class HttpUtils {
18
19
    private static final Logger logger = Logger.getLogger(HttpUtils.class);
20
21 61422 spyroukon
    @Value("${aai.registry.url}")
22
    private String registryUrl;
23 60749 akoulalis
24 61422 spyroukon
    @Value("${aai.registry.authentication.username}")
25 60749 akoulalis
    private String user;
26
27 61422 spyroukon
    @Value("${aai.registry.authentication.password}")
28 60749 akoulalis
    private String password;
29
30
    public JsonElement post(String path, JsonObject body) {
31
        RestTemplate restTemplate = new RestTemplate();
32
        HttpHeaders headers = createHeaders(user, password);
33
        headers.setContentType(MediaType.APPLICATION_JSON);
34
        HttpEntity<String> request = new HttpEntity<>(body.toString(), headers);
35 61422 spyroukon
        ResponseEntity<String> responseEntity = restTemplate.exchange(registryUrl + path, HttpMethod.POST, request, String.class);
36 61363 spyroukon
        return getResponseEntityAsJsonElement(responseEntity);
37 60749 akoulalis
    }
38
39
    public JsonElement put(String path, JsonObject body) {
40
        RestTemplate restTemplate = new RestTemplate();
41
        HttpHeaders headers = createHeaders(user, password);
42
        headers.setContentType(MediaType.APPLICATION_JSON);
43
        HttpEntity<String> request = new HttpEntity<>(body.toString(), headers);
44 61422 spyroukon
        ResponseEntity<String> responseEntity = restTemplate.exchange(registryUrl + path, HttpMethod.PUT, request, String.class);
45 61363 spyroukon
        return getResponseEntityAsJsonElement(responseEntity);
46 60749 akoulalis
    }
47
48
    public JsonElement get(String path, Map<String, String> params) {
49
        RestTemplate restTemplate = new RestTemplate();
50 61422 spyroukon
        String url = registryUrl + path + ((params != null) ? createParams(params) : null);
51 60749 akoulalis
        ResponseEntity<String> responseEntity = restTemplate.exchange
52
                (url, HttpMethod.GET, new HttpEntity<>(createHeaders(user, password)), String.class);
53 61363 spyroukon
        return getResponseEntityAsJsonElement(responseEntity);
54 60749 akoulalis
    }
55
56
    public JsonElement delete(String path) {
57
        RestTemplate restTemplate = new RestTemplate();
58 61422 spyroukon
        String url = registryUrl + path;
59 60749 akoulalis
        ResponseEntity<String> responseEntity = restTemplate.exchange
60
                (url, HttpMethod.DELETE, new HttpEntity<>(createHeaders(user, password)), String.class);
61 61363 spyroukon
        return getResponseEntityAsJsonElement(responseEntity);
62 60749 akoulalis
    }
63
64
65
    private String createParams(Map<String, String> params) {
66
        StringBuilder ret = new StringBuilder("?");
67
        int count = 0;
68
        for (Map.Entry<String, String> param : params.entrySet()) {
69
            ret.append(param.getKey()).append("=").append(param.getValue());
70
            count++;
71
            if (count != params.entrySet().size()) {
72
                ret.append("&");
73
            }
74
        }
75
        return ret.toString();
76
    }
77
78
    private HttpHeaders createHeaders(String username, String password) {
79
        return new HttpHeaders() {{
80
            String auth = username + ":" + password;
81
            byte[] encodedAuth = Base64.encodeBase64(
82
                    auth.getBytes(Charset.forName("US-ASCII")));
83
            String authHeader = "Basic " + new String(encodedAuth);
84
            set("Authorization", authHeader);
85
        }};
86
    }
87 61363 spyroukon
88
    private JsonElement getResponseEntityAsJsonElement(ResponseEntity<String> responseEntity) {
89
        if (responseEntity != null && responseEntity.getBody() != null) {
90
            logger.info(responseEntity.getBody());
91
            try {
92
                return new JsonParser().parse(responseEntity.getBody());
93
            } catch (Exception e) {
94
                logger.warn("Could not parse response body", e);
95
            }
96
        }
97
        return null;
98
    }
99 60749 akoulalis
}