// 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;
	}
	
	private static class Database implements Builders.DatabaseConfiguration, Builders.DatabaseOptionConfiguration {
		private final Configuration _configuration;
		private final String _databaseKey;
		public Database(Configuration configuration, String databaseKey) {
			_configuration = configuration;
			_databaseKey = databaseKey;
		}
		public void configure(Binder binder) {
			_configuration.configure(binder);
		}
		public CollectionConfiguration mapCollection(String collectionKey) {
			return _configuration.mapCollection(collectionKey);
		}
		public DatabaseConfiguration mapDatabase(String databaseKey) {
			return _configuration.mapDatabase(databaseKey);
		}
		public FinishableConfiguration overConnection(String connectionKey) {
			_configuration.getCollector().bindConfiguredDatabaseConnection(_configuration.getName(), _databaseKey, connectionKey);
			return _configuration;
		}
		public DatabaseOptionConfiguration to(String database) {
			_configuration.getCollector().bindConfiguredDatabase(_configuration.getName(), _databaseKey, database);
			return this;
		}
		public BucketConfiguration mapBucket(String bucketKey) {
			return _configuration.mapBucket(bucketKey);
		}
        public DatabaseOptionConfiguration asTestDatabase() {
// 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;

	}
	
	private static class Database implements Builders.DatabaseConfiguration, Builders.DatabaseOptionConfiguration {
		private final Configuration _configuration;
		private final String _databaseKey;
		public Database(Configuration configuration, String databaseKey) {
			_configuration = configuration;
			_databaseKey = databaseKey;
		}
		public void configure(Binder binder) {
			_configuration.configure(binder);
		}
		public CollectionConfiguration mapCollection(String collectionKey) {
			return _configuration.mapCollection(collectionKey);
		}
		public DatabaseConfiguration mapDatabase(String databaseKey) {
			return _configuration.mapDatabase(databaseKey);
		}
		public FinishableConfiguration overConnection(String connectionKey) {
			_configuration.getCollector().bindConfiguredDatabaseConnection(_configuration.getName(), _databaseKey, connectionKey);
			return _configuration;
		}
		public DatabaseOptionConfiguration to(String database) {
			_configuration.getCollector().bindConfiguredDatabase(_configuration.getName(), _databaseKey, database);
			return this;
		}
		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.