public Map identify()

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;
    }