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

com.sportradar.unifiedodds.sdk.impl.DataWrapper Maven / Gradle / Ivy

/*
 * Copyright (C) Sportradar AG. See LICENSE for full license governing this code
 */

package com.sportradar.unifiedodds.sdk.impl;

import com.google.common.collect.Maps;
import org.apache.http.Header;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Locale;
import java.util.Map;

/**
 * Created on 10/04/2018.
 * // TODO @eti: Javadoc
 */
public class DataWrapper  {
    private static final Logger logger = LoggerFactory.getLogger(DataWrapper.class);

    private static final String DATE_HEADER_KEY = "Date";
    private static final DateTimeFormatter SERVER_RESPONSE_DATE_FORMAT = DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss z", Locale.ENGLISH);

    private final T data;
    private final Map headers;
    private final ZonedDateTime serverResponseTime;

    DataWrapper(T data, Header[] headers) {
        this.data = data;

        if (headers != null) {
            this.headers = Maps.newHashMapWithExpectedSize(headers.length);
            for (Header header : headers) {
                this.headers.put(header.getName(), header.getValue());
            }

            this.serverResponseTime = tryParseServerTime(this.headers);
        } else {
            this.headers = null;
            this.serverResponseTime = null;
        }
    }

    public T getData() {
        return data;
    }

    public Map getHeaders() {
        return headers;
    }

    public ZonedDateTime getServerResponseTime() {
        return serverResponseTime;
    }

    private static ZonedDateTime tryParseServerTime(Map headers) {
        if (headers == null || !headers.containsKey(DATE_HEADER_KEY)) {
            logger.warn("Could not find '{}' header in the requested response", DATE_HEADER_KEY);
            return null;
        }

        try {
            return ZonedDateTime.parse(headers.get(DATE_HEADER_KEY), SERVER_RESPONSE_DATE_FORMAT);
        } catch (DateTimeParseException e) {
            logger.warn("Failed to parse '{}' header in the requested response", DATE_HEADER_KEY, e);
            return null;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy