// Path: src/main/java/com/mattinsler/guiceymongo/data/IsData.java
// public interface IsData {
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface BucketConfiguration {
// 	BucketOptionConfiguration to(String bucket);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface BucketOptionConfiguration {
// 	FinishableConfiguration inDatabase(String databaseKey);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface CollectionConfiguration extends CollectionConfigurationOnlyTo {
// 	CollectionConfigurationOnlyTo ofType(Class<? extends IsData> dataType);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface CollectionConfigurationOnlyTo {
// 	CollectionOptionConfiguration to(String collection);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface DatabaseConfiguration {
// 	DatabaseOptionConfiguration to(String database);
//        DatabaseOptionConfiguration asTestDatabase();
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface DatabaseOptionConfiguration extends FinishableConfiguration, Module {
// 	FinishableConfiguration overConnection(String connectionKey);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface FinishableConfiguration extends Module {
// 	DatabaseConfiguration mapDatabase(String databaseKey);
// 	CollectionConfiguration mapCollection(String collectionKey);
// 	BucketConfiguration mapBucket(String bucketKey);
// }


import com.google.inject.Binder;
import com.google.inject.Module;
import com.mattinsler.guiceymongo.data.IsData;
import com.mattinsler.guiceymongo.guice.spi.Builders.BucketConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.BucketOptionConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.CollectionConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.CollectionConfigurationOnlyTo;
import com.mattinsler.guiceymongo.guice.spi.Builders.DatabaseConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.DatabaseOptionConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.FinishableConfiguration;
			_bucketKey = bucketKey;
		}
		public FinishableConfiguration inDatabase(String databaseKey) {
			_configuration.getCollector().bindConfiguredBucket(_configuration.getName(), databaseKey, _bucketKey, _bucket);
			return _configuration;
		}
		public BucketOptionConfiguration to(String bucket) {
			_bucket = bucket;
			return this;
		}
	}
	
	public static class Connection implements Builders.Connection, Builders.ConnectionWithHost, Builders.ConnectionWithPort {
		private final String _name;
		private String _hostname;
		private int _port = -1;
		public Connection(String name) {
			_name = name;
		}
		public Builders.ConnectionWithHost host(String hostname) {
			_hostname = hostname;
			return this;
		}
		public Builders.ConnectionWithPort port(int port) {
			_port = port;
			return this;
		}
		public void configure(Binder binder) {
			GuiceyMongoBinder guiceyBinder = new GuiceyMongoBinder(binder.skipSources(Connection.class));
			if (_hostname != null)
// Path: src/main/java/com/mattinsler/guiceymongo/data/IsData.java
// public interface IsData {
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface BucketConfiguration {
// 	BucketOptionConfiguration to(String bucket);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface BucketOptionConfiguration {
// 	FinishableConfiguration inDatabase(String databaseKey);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface CollectionConfiguration extends CollectionConfigurationOnlyTo {
// 	CollectionConfigurationOnlyTo ofType(Class<? extends IsData> dataType);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface CollectionConfigurationOnlyTo {
// 	CollectionOptionConfiguration to(String collection);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface DatabaseConfiguration {
// 	DatabaseOptionConfiguration to(String database);
//        DatabaseOptionConfiguration asTestDatabase();
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface DatabaseOptionConfiguration extends FinishableConfiguration, Module {
// 	FinishableConfiguration overConnection(String connectionKey);
// }
// 
// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/Builders.java
// public interface FinishableConfiguration extends Module {
// 	DatabaseConfiguration mapDatabase(String databaseKey);
// 	CollectionConfiguration mapCollection(String collectionKey);
// 	BucketConfiguration mapBucket(String bucketKey);
// }


// Path: src/main/java/com/mattinsler/guiceymongo/guice/spi/BuilderImpls.java
import com.google.inject.Binder;
import com.google.inject.Module;
import com.mattinsler.guiceymongo.data.IsData;
import com.mattinsler.guiceymongo.guice.spi.Builders.BucketConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.BucketOptionConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.CollectionConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.CollectionConfigurationOnlyTo;
import com.mattinsler.guiceymongo.guice.spi.Builders.DatabaseConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.DatabaseOptionConfiguration;
import com.mattinsler.guiceymongo.guice.spi.Builders.FinishableConfiguration;

			_bucketKey = bucketKey;
		}
		public FinishableConfiguration inDatabase(String databaseKey) {
			_configuration.getCollector().bindConfiguredBucket(_configuration.getName(), databaseKey, _bucketKey, _bucket);
			return _configuration;
		}
		public BucketOptionConfiguration to(String bucket) {
			_bucket = bucket;
			return this;
		}
	}
	
	public static class Connection implements Builders.Connection, Builders.ConnectionWithHost, Builders.ConnectionWithPort {
		private final String _name;
		private String _hostname;
		private int _port = -1;
		public Connection(String name) {
			_name = name;
		}
		public Builders.ConnectionWithHost host(String hostname) {
			_hostname = hostname;
			return this;
		}
		public Builders.ConnectionWithPort port(int port) {
			_port = port;
			return this;
		}
		public void configure(Binder binder) {
			GuiceyMongoBinder guiceyBinder = new GuiceyMongoBinder(binder.skipSources(Connection.class));
			if (_hostname != null)
				guiceyBinder.bindConnectionHostname(_name, _hostname);