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

com.google.api.ads.dfa.lib.client.DfaServiceDescriptor Maven / Gradle / Ivy

// Copyright 2011 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.dfa.lib.client;

import com.google.api.ads.common.lib.client.AdsServiceDescriptor;
import com.google.api.ads.common.lib.soap.compatability.AxisCompatible;
import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;

/**
 * {@code DfaServiceDescriptor} provides a class which defines a service that
 * can be instantiated through reflection.
 *
 * @author Joseph DiLallo
 */
public class DfaServiceDescriptor implements AdsServiceDescriptor, AxisCompatible {

  private final Class interfaceClass;
  private final String version;

  /**
   * Constructor. Requires the necessary information to instantiate a DFA
   * service.
   *
   * @param interfaceClass the {@code Class} object of the requested
   *     interfaceClass
   * @param version the version of the service
   */
  @Inject
  public DfaServiceDescriptor(@Assisted("interfaceClass") Class interfaceClass,
        @Assisted("version") String version) {
    this.interfaceClass = interfaceClass;
    this.version = version;
  }

  /**
   * @see AdsServiceDescriptor#getInterfaceClass()
   */
  public Class getInterfaceClass() {
    return interfaceClass;
  }

  /**
   * Generates the locator class for this service by using reflection.
   *
   * @return the {@code Class} representing the locator
   * @throws ClassNotFoundException if the formulated locator class name name
   *     could not be found
   */
  public Class getLocatorClass() throws ClassNotFoundException {
    return Class.forName(interfaceClass.getCanonicalName() + "ServiceLocator");
  }

  /**
   * Generates the name of this service by using reflection.
   *
   * @return the name of the service this descriptor represents
   */
  @VisibleForTesting
  protected String getServiceName() {
    String simpleName = interfaceClass.getSimpleName();
    String serviceName = simpleName.substring(0, simpleName.indexOf("Remote")).toLowerCase();
    if ("placementstrategy".equalsIgnoreCase(serviceName)) {
      return "strategy";
    } else {
      return serviceName;
    }
  }

  /**
   * @see AdsServiceDescriptor#getEndpointAddress(String)
   */
  public String getEndpointAddress(String endpointServer) {
    return endpointServer + "/" + version + "/api/dfa-api/" + getServiceName();
  }

  /**
   * @see AdsServiceDescriptor#getVersion()
   */
  public String getVersion() {
    return version;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy