
com.gyftedstore.currency.rates.cca.CurrencyConverterExchange Maven / Gradle / Ivy
package com.gyftedstore.currency.rates.cca;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.gyftedstore.currency.rates.ExchangeProvider;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
import java.util.LinkedHashMap;
import java.util.Map;
@Slf4j
public class CurrencyConverterExchange implements ExchangeProvider {
public static final String PLUGIN_NAME = "CurrencyConverterAPI";
private static final String QRY_FROM = "from";
private static final String QRY_TO = "to";
private CurrencyConverterApiProperties config;
private RestTemplate client;
private JsonParser parser = new JsonParser();
public CurrencyConverterExchange(CurrencyConverterApiProperties config, RestTemplate client) {
this.config = config;
this.client = client;
}
@Override
public String getName() {
return PLUGIN_NAME;
}
@Override
public Double getRate(String from, String to) {
String pair = String.format("%s_%s", from, to);
LinkedHashMap values = new LinkedHashMap<>(config.getParams());
values.putAll(Map.of(QRY_FROM, from, QRY_TO, to));
try {
String url = UriComponentsBuilder.fromHttpUrl(config.getBaseUrl())
.buildAndExpand(values)
.toUriString();
log.trace("calling '{}'", url);
ResponseEntity response = client.getForEntity(URI.create(url), String.class);
if (response.getStatusCode().is2xxSuccessful()) {
JsonObject o = parser.parse(response.getBody()).getAsJsonObject();
return o.get(pair).getAsDouble();
}
log.warn("unespected response status: {}", response.getStatusCode());
} catch (Exception ex) {
log.error("error calling exchange API for pair {}: {}", pair, ex.getLocalizedMessage());
}
return null;
}
@Override
public boolean supports(String delimiter) {
return getName().equalsIgnoreCase(delimiter);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy