All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.mstream.trader.datafeed.stocks.quandl.UriBuilder Maven / Gradle / Ivy

The newest version!
package io.mstream.trader.datafeed.stocks.quandl;


import io.mstream.trader.commons.config.model.DownstreamService;
import io.mstream.trader.datafeed.stocks.Stock;
import org.slf4j.Logger;

import javax.inject.Inject;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.function.Supplier;

import static java.lang.String.format;
import static org.slf4j.LoggerFactory.getLogger;


class UriBuilder {
    
    private static final Logger LOGGER = getLogger(UriBuilder.class);
    
    private static final String PRICE_PATH_FORMAT =
            "/api/v3/datasets/WIKI/%s" +
                    ".json?column_index=4&end_date=%s&limit=1&api_key=%s";
    
    private final Supplier quandlApiKeySupplier;
    
    private final Supplier configSupplier;
    
    private final DateTimeFormatter dateFormatter;
    
    @Inject
    public UriBuilder(
            Supplier quandlApiKeySupplier,
            @Quandl
                    Supplier configSupplier,
            @Quandl
                    DateTimeFormatter dateFormatter
    ) {
        
        this.quandlApiKeySupplier = quandlApiKeySupplier;
        this.configSupplier = configSupplier;
        this.dateFormatter = dateFormatter;
    }
    
    public URI stockPrice(Stock stock, LocalDate date) {
    
        return createUri(
                format(
                        PRICE_PATH_FORMAT,
                        stock.getName(),
                        dateFormatter.format(date),
                        quandlApiKeySupplier.get()
                )
        );
    }
    
    private URI createUri(String path) {
        
        String baseUrl = configSupplier
                .get()
                .getUrl()
                .url();
        URI uri = null;
        try {
            uri = new URI(baseUrl + path);
            LOGGER.debug("created uri: {}", uri);
        } catch (URISyntaxException e) {
            LOGGER.error("could not create uri from path: {}", path);
        }
        return uri;
    }
    
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy