Project

General

Profile

1
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
    @Value("${aai.registry.url}")
22
    private String registryUrl;
23

    
24
    @Value("${aai.registry.authentication.username}")
25
    private String user;
26

    
27
    @Value("${aai.registry.authentication.password}")
28
    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
        ResponseEntity<String> responseEntity = restTemplate.exchange(registryUrl + path, HttpMethod.POST, request, String.class);
36
        return getResponseEntityAsJsonElement(responseEntity);
37
    }
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
        ResponseEntity<String> responseEntity = restTemplate.exchange(registryUrl + path, HttpMethod.PUT, request, String.class);
45
        return getResponseEntityAsJsonElement(responseEntity);
46
    }
47

    
48
    public JsonElement get(String path, Map<String, String> params) {
49
        RestTemplate restTemplate = new RestTemplate();
50
        String url = registryUrl + path + ((params != null) ? createParams(params) : null);
51
        ResponseEntity<String> responseEntity = restTemplate.exchange
52
                (url, HttpMethod.GET, new HttpEntity<>(createHeaders(user, password)), String.class);
53
        return getResponseEntityAsJsonElement(responseEntity);
54
    }
55

    
56
    public JsonElement delete(String path) {
57
        RestTemplate restTemplate = new RestTemplate();
58
        String url = registryUrl + path;
59
        ResponseEntity<String> responseEntity = restTemplate.exchange
60
                (url, HttpMethod.DELETE, new HttpEntity<>(createHeaders(user, password)), String.class);
61
        return getResponseEntityAsJsonElement(responseEntity);
62
    }
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

    
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
}
(4-4/6)