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

com.azure.cosmos.implementation.UserAgentContainer Maven / Gradle / Ivy

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.cosmos.implementation;

import java.net.IDN;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.Normalizer;
import java.util.regex.Pattern;

/**
 * Used internally. The user agent object, which is used to track the version of the Java SDK of the Azure Cosmos DB database service.
 */
public class UserAgentContainer {
    private static final Pattern nonASCII = Pattern.compile("[^\\x00-\\x7f]");
    private static final Pattern markers = Pattern.compile("\\p{M}");
    private static final int MAX_USER_AGENT_LENGTH = 255;
    private final int maxSuffixLength;
    private final String baseUserAgent;
    private String suffix;
    private String userAgent;
    public final static String AZSDK_USERAGENT_PREFIX = "azsdk-java-";

    private UserAgentContainer(String sdkName, String sdkVersion) {
        this.baseUserAgent = Utils.getUserAgent(sdkName, sdkVersion);
        this.suffix = "";
        this.userAgent = baseUserAgent;
        this.maxSuffixLength = MAX_USER_AGENT_LENGTH - 1 - baseUserAgent.length();
    }

    public UserAgentContainer() {
        this(HttpConstants.Versions.SDK_NAME, HttpConstants.Versions.getSdkVersion());
    }

    public String getSuffix() {
        return this.suffix;
    }

    public void setSuffix(String suffix) {
        if (suffix.length() > maxSuffixLength) {
            suffix = suffix.substring(0, maxSuffixLength);
        }

        this.suffix = suffix;
        this.userAgent = stripNonAsciiCharacters(baseUserAgent.concat(" ").concat(this.suffix));
    }

    public String getUserAgent() {
        return this.userAgent;
    }

    private static String stripNonAsciiCharacters(String input) {
        // replace accents and diacriticals with their ASCII match (+ marker which we will remove in next step)
        String normalized = input == null ? null : Normalizer.normalize(input, Normalizer.Form.NFKD);

        // Stripping off the markers
        String strippedMarkers = markers.matcher(normalized).replaceAll("");

        // Just to be sure replace all remaining non-ASCII chars with _
        return nonASCII.matcher(strippedMarkers).replaceAll("_");
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy