in java/connectors/uniswap/src/main/java/com/epam/deltix/data/connectors/uniswap/subscriptions/TokenIdentifier.java [84:145]
public Map<String, Info> identify(final String... tokenSymbols) throws Exception {
if (tokenSymbols == null || tokenSymbols.length == 0) {
return Map.of();
}
final GraphQlQuery.Query query = QUERY_TEMPLATE.copy();
query.arguments().withWhere(
"symbol_in : [" +
Arrays.stream(tokenSymbols)
.map(s -> '"' + s + '"')
.collect(Collectors.joining(" ,"))
+ ']');
final HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
final HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(uri))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(query.toJson()))
.build();
final HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
final int statusCode = response.statusCode();
if (statusCode != 200) {
throw new IOException("Unexpected status code of the response: " + statusCode);
}
final String responseBody = response.body();
if (responseBody == null) {
return Map.of();
}
final JsonObject root = new JsonValueParser().parseAndEoj(responseBody).asObjectRequired();
final JsonObject data = root.getObjectRequired("data");
final JsonArray tokens = data.getArrayRequired("tokens");
final Map<String, Info> result = new HashMap<>();
tokens.items()
.map(JsonValue::asObject)
.filter(Objects::nonNull)
.forEach(object -> {
final String id = object.getStringRequired("id");
final String symbol = object.getStringRequired("symbol");
final String name = object.getStringRequired("name");
final String txCount = object.getStringRequired("txCount");
final Info info = result.get(symbol);
final Info newInfo = new Info(id, symbol, name, txCount);
if (info != null && Integer.parseInt(info.txCount()) > Integer.parseInt(txCount)) {
System.out.println("Symbol " +
info + " was found. Skipping the duplicating one " + newInfo); // TODO: logging
return;
}
result.put(symbol, newInfo);
});
return result;
}