/**
* Copyright (c) 2013 Puppet Labs, Inc. and other contributors, as listed below.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Apache License, Version 2.0
* which accompanies this distribution, and is available at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Contributors:
* Puppet Labs
*/
package com.puppetlabs.puppetdb.javaclient;
import com.google.inject.Guice;
import com.google.inject.Module;
import com.google.inject.util.Modules;
import com.puppetlabs.puppetdb.javaclient.impl.DefaultModule;
/**
* A factory used for creating fully configured PuppetDBClient instances
*/
public class PuppetDBClientFactory {
/**
* Returns a Module that contains all default bindings
*
* @param preferences
* Preferences used when connecting to the PuppetDB instance
* @return The default bindings module
*/
public static Module getDefaultBindings(APIPreferences preferences) {
return new DefaultModule(preferences);
}
/**
* Create a new PuppetDBClient that will connect using the default
* bindigns module and the given <code>preferences</code>.
*
* @param preferences
* The preferences used for hte connection
* @param overrides
* Modules overriding or extending the default bindings
* @return The created client instance
*/
public static PuppetDBClient newClient(APIPreferences preferences, Module... overrides) {
Module module = getDefaultBindings(preferences);
if(overrides.length > 0)
module = Modules.override(module).with(overrides);
return newClient(module);
}
/**
* Create a new PuppetDBClient using the bindings of one or several
* Guice modules.
*
* @param module
* The Guice module where the bindings have been defined
* @return The created client instance
*/
public static PuppetDBClient newClient(Module module) {
return Guice.createInjector(module).getInstance(PuppetDBClient.class);
}
}