// 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;
/**
 *      Copyright (C) 2010 Lowereast Software
 *
 *   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.lowereast.guiceymongo.guice.spi;


public final class BuilderImpls {
	public static class Configuration implements Builders.Configuration, Builders.FinishableConfiguration {
		private final String _name;
		private final GuiceyMongoBindingCollector _collector = new GuiceyMongoBindingCollector();

		public Configuration(String name) {
			_name = name;
		}
		public Module cloneFrom(String configurationName) {
			_collector.bindClonedConfiguration(_name, configurationName);
			return this;
		}
		public Builders.CollectionConfiguration mapCollection(String collectionKey) {
			return new Collection(this, collectionKey);
		}
// 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;

/**
 *      Copyright (C) 2010 Lowereast Software
 *
 *   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.lowereast.guiceymongo.guice.spi;


public final class BuilderImpls {
	public static class Configuration implements Builders.Configuration, Builders.FinishableConfiguration {
		private final String _name;
		private final GuiceyMongoBindingCollector _collector = new GuiceyMongoBindingCollector();

		public Configuration(String name) {
			_name = name;
		}
		public Module cloneFrom(String configurationName) {
			_collector.bindClonedConfiguration(_name, configurationName);
			return this;
		}
		public Builders.CollectionConfiguration mapCollection(String collectionKey) {
			return new Collection(this, collectionKey);
		}
		public Builders.DatabaseConfiguration mapDatabase(String databaseKey) {