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

com.google.api.ads.common.lib.useragent.AdsUtilitiesUserAgentProvider Maven / Gradle / Ivy

// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.api.ads.common.lib.useragent;

import com.google.api.ads.common.lib.conf.AdsLibConfiguration;
import com.google.api.ads.common.lib.utils.AdsUtility;
import com.google.api.ads.common.lib.utils.AdsUtilityRegistry;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.Collections2;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import java.util.Set;

/**
 * Provides the ads utilities user agent.
 */
public class AdsUtilitiesUserAgentProvider implements UserAgentProvider {
  private final AdsUtilityRegistry adsUtilityRegistry;
  private final AdsLibConfiguration adsLibConfiguration;

  private static final Function ADS_UTILITY_FUNCTION =
      input -> input == null ? null : input.getUserAgentIdentifier();

  @Inject
  public AdsUtilitiesUserAgentProvider(
      AdsUtilityRegistry adsUtilityRegistry, AdsLibConfiguration adsLibConfiguration) {
    this.adsUtilityRegistry = adsUtilityRegistry;
    this.adsLibConfiguration = adsLibConfiguration;
  }

  @Override
  public String getUserAgent() {
    Set adsUtilities = adsUtilityRegistry.popRegisteredUtilities();
    if (!adsLibConfiguration.isIncludeAdsUtilitiesInUserAgent() || adsUtilities.isEmpty()) {
      return null;
    }

    // Adheres to User-Agent product identifiers from RFC 7231.
    // https://tools.ietf.org/html/rfc7231#section-5.5.3
    // Sorts the collection of utilities so output is deterministic.
    return Joiner.on(", ").skipNulls().join(
        Sets.newTreeSet(Collections2.transform(adsUtilities, ADS_UTILITY_FUNCTION)));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy