// Path: src/main/java/com/lowereast/guiceymongo/data/IsData.java
// public interface IsData {
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface BucketConfiguration {
// 	BucketOptionConfiguration to(String bucket);
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface BucketOptionConfiguration {
// 	FinishableConfiguration inDatabase(String databaseKey);
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface CollectionConfiguration extends CollectionConfigurationOnlyTo {
// 	CollectionConfigurationOnlyTo ofType(Class<? extends IsData> dataType);
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface CollectionConfigurationOnlyTo {
// 	CollectionOptionConfiguration to(String collection);
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface DatabaseConfiguration {
// 	DatabaseOptionConfiguration to(String database);
//        DatabaseOptionConfiguration asTestDatabase();
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface DatabaseOptionConfiguration extends FinishableConfiguration, Module {
// 	FinishableConfiguration overConnection(String connectionKey);
// }
// 
// Path: src/main/java/com/lowereast/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.lowereast.guiceymongo.data.IsData;
import com.lowereast.guiceymongo.guice.spi.Builders.BucketConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.BucketOptionConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.CollectionConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.CollectionConfigurationOnlyTo;
import com.lowereast.guiceymongo.guice.spi.Builders.DatabaseConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.DatabaseOptionConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.FinishableConfiguration;
		public BucketConfiguration mapBucket(String bucketKey) {
			return _configuration.mapBucket(bucketKey);
		}
        public DatabaseOptionConfiguration asTestDatabase() {
            return null;  //To change body of implemented methods use File | Settings | File Templates.
        }
    }
	
	private static class Collection implements Builders.CollectionConfiguration, Builders.CollectionConfigurationOnlyTo, Builders.CollectionOptionConfiguration {
		private final Configuration _configuration;
		private final String _collectionKey;
		private String _collection;
		public Collection(Configuration configuration, String collectionKey) {
			_configuration = configuration;
			_collectionKey = collectionKey;
		}
		public CollectionConfigurationOnlyTo ofType(Class<? extends IsData> dataType) {
			_configuration.getCollector().bindConfiguredCollectionDataType(_configuration.getName(), _collectionKey, dataType);
			return this;
		}
		public Builders.CollectionOptionConfiguration to(String collection) {
			_collection = collection;
			return this;
		}
		public Builders.FinishableConfiguration inDatabase(String databaseKey) {
			_configuration.getCollector().bindConfiguredCollection(_configuration.getName(), databaseKey, _collectionKey, _collection);
			return _configuration;
		}
	}
	
// Path: src/main/java/com/lowereast/guiceymongo/data/IsData.java
// public interface IsData {
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface BucketConfiguration {
// 	BucketOptionConfiguration to(String bucket);
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface BucketOptionConfiguration {
// 	FinishableConfiguration inDatabase(String databaseKey);
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface CollectionConfiguration extends CollectionConfigurationOnlyTo {
// 	CollectionConfigurationOnlyTo ofType(Class<? extends IsData> dataType);
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface CollectionConfigurationOnlyTo {
// 	CollectionOptionConfiguration to(String collection);
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface DatabaseConfiguration {
// 	DatabaseOptionConfiguration to(String database);
//        DatabaseOptionConfiguration asTestDatabase();
// }
// 
// Path: src/main/java/com/lowereast/guiceymongo/guice/spi/Builders.java
// public interface DatabaseOptionConfiguration extends FinishableConfiguration, Module {
// 	FinishableConfiguration overConnection(String connectionKey);
// }
// 
// Path: src/main/java/com/lowereast/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/lowereast/guiceymongo/guice/spi/BuilderImpls.java
import com.google.inject.Binder;
import com.google.inject.Module;
import com.lowereast.guiceymongo.data.IsData;
import com.lowereast.guiceymongo.guice.spi.Builders.BucketConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.BucketOptionConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.CollectionConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.CollectionConfigurationOnlyTo;
import com.lowereast.guiceymongo.guice.spi.Builders.DatabaseConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.DatabaseOptionConfiguration;
import com.lowereast.guiceymongo.guice.spi.Builders.FinishableConfiguration;

		public BucketConfiguration mapBucket(String bucketKey) {
			return _configuration.mapBucket(bucketKey);
		}
        public DatabaseOptionConfiguration asTestDatabase() {
            return null;  //To change body of implemented methods use File | Settings | File Templates.
        }
    }
	
	private static class Collection implements Builders.CollectionConfiguration, Builders.CollectionConfigurationOnlyTo, Builders.CollectionOptionConfiguration {
		private final Configuration _configuration;
		private final String _collectionKey;
		private String _collection;
		public Collection(Configuration configuration, String collectionKey) {
			_configuration = configuration;
			_collectionKey = collectionKey;
		}
		public CollectionConfigurationOnlyTo ofType(Class<? extends IsData> dataType) {
			_configuration.getCollector().bindConfiguredCollectionDataType(_configuration.getName(), _collectionKey, dataType);
			return this;
		}
		public Builders.CollectionOptionConfiguration to(String collection) {
			_collection = collection;
			return this;
		}
		public Builders.FinishableConfiguration inDatabase(String databaseKey) {
			_configuration.getCollector().bindConfiguredCollection(_configuration.getName(), databaseKey, _collectionKey, _collection);
			return _configuration;
		}
	}
	
	private static class Bucket implements Builders.BucketConfiguration, Builders.BucketOptionConfiguration {