// Copyright 2012 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.adwords.axis.factory; import com.google.api.ads.adwords.axis.AdWordsAxisModule; import com.google.api.ads.adwords.lib.AdWordsPluginModule; import com.google.api.ads.adwords.lib.factory.AdWordsServicesInterface; import com.google.api.ads.adwords.lib.factory.BaseAdWordsServices; import com.google.api.ads.adwords.lib.factory.DependencyBootstrapper; import com.google.inject.Guice; import com.google.inject.Injector; /** * Utility class to create AdWords service clients. The session is stored as a reference within the * client so that the session may be altered to affect the behavior of the client. * * <p>Usage example: * * <pre><code> * AdWordsSession session = new AdWordsSession.Builder()...build(); * CampaignServiceInterface campaignService = * AdWordsServices.getInstance().get(session, CampaignServiceInterface.class); * campaignService.get(...); * ... * session.setClientCustomerId(...); * campaignService.get(...); * </code></pre> * * <p>Implementation is thread-safe. */ public final class AdWordsServices extends BaseAdWordsServices { private static final Injector INJECTOR = Guice.createInjector(new AdWordsAxisModule()); private static final AdWordsServices DEFAULT_INSTANCE = new AdWordsServices(); private AdWordsServices(Injector injector) { super(injector); } public AdWordsServices() { this(INJECTOR); } @Override public AdWordsServicesInterface withPluginModule(AdWordsPluginModule pluginModule) { return new AdWordsServices(Guice.createInjector(new AdWordsAxisModule(), pluginModule)); } /** * Returns the default instance, configured when this class was loaded. This is the preferred * mechanism for obtaining an instance of this class. */ public static final AdWordsServicesInterface getInstance() { return DEFAULT_INSTANCE; } /** * Returns a new instance, configured using the current set of configurations and system * properties. */ public static final AdWordsServicesInterface newInstance() { return new AdWordsServices(Guice.createInjector(new AdWordsAxisModule())); } /** * Returns a dependency bootstrapper based on the default instance of this class. This method * exists in order to support legacy constructors for various utilities. * * <p>To get an instance of a utility, use {@link * #getUtility(com.google.api.ads.adwords.lib.client.AdWordsSession, Class)} instead. * * @see #getUtility(com.google.api.ads.adwords.lib.client.AdWordsSession, Class) */ public static final DependencyBootstrapper getBootstrapper() { return DEFAULT_INSTANCE.createBootstrapper(); } }