# EntityMappingConfigurationProvider.java

    package org.codefilarete.stalactite.dsl.entity;

    /**
     * @author Guillaume Mary
     */
    public interface EntityMappingConfigurationProvider<C, I> {

    	EntityMappingConfiguration<C, I> getConfiguration();

    	/**
    	 * A default {@link EntityMappingConfigurationProvider}
    	 * Usage example:
    	 * <pre>{@code
    	 * EntityMappingConfigurationProviderHolder<Person, Long> personMappingConfiguration = new EntityMappingConfigurationProviderHolder<>();
    	 * personMappingConfiguration.setProvider(
    	 *     MappingEase.entityBuilder(Person.class, Long.class)
    	 *     ...
    	 *     .mapOneToOne(Person::getHouse,
    	 *         MappingEase.entityBuilder(House.class, Long.class)
    	 *         ...
    	 *         .mapOneToOne(House::getGardener, personMappingConfiguration)
    	 *    )
    	 * }</pre>
    	 *
    	 * @param <C>
    	 * @param <I>
    	 * @author Guillaume Mary
    	 */
    	class EntityMappingConfigurationProviderHolder<C, I> implements EntityMappingConfigurationProvider<C, I> {

    		private FluentEntityMappingBuilder<C, I> provider;

    		public EntityMappingConfigurationProviderHolder() {
    		}

    		public void setProvider(FluentEntityMappingBuilder<C, I> provider) {
    			this.provider = provider;
    		}

    		public FluentEntityMappingBuilder<C, I> getProvider() {
    			return provider;
    		}

    		@Override
    		public EntityMappingConfiguration<C, I> getConfiguration() {
    			return provider.getConfiguration();
    		}
    	}

    }