/*
 * Copyright 2015 Norbert Potocki (norbert.potocki@nort.pl)
 *
 * 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 pl.nort.config.provider;

import pl.nort.config.source.ConfigurationSource;
import pl.nort.config.source.GitConfigurationSource;

/**
 * A factory producing {@link ConfigurationProvider}s.
 */
public class ConfigurationProviders {

  /**
   * A {@link ConfigurationProvider} backed by {@link GitConfigurationSource}.
   *
   * @param repositoryURI a git repository URI (can be remote)
   * @return {@link ConfigurationProvider} using provided git repository as a {@link ConfigurationSource}
   */
  public static ConfigurationProvider backedByGit(String repositoryURI) {
    return new ConfigurationProviderBuilder()
        .withConfigurationSource(new GitConfigurationSource(repositoryURI))
        .build();
  }

  /**
   * A {@link ConfigurationProvider} backed by a provided {@link ConfigurationSource}.
   *
   * @param source {@link ConfigurationSource} used to supply provider with configuration
   * @return {@link ConfigurationProvider} backed by a {@code source}
   */
  public static ConfigurationProvider withSource(ConfigurationSource source) {
    return new ConfigurationProviderBuilder()
        .withConfigurationSource(source)
        .build();
  }

}

@@ -750,16 +750,75 @@
 nSource;
+%0Aimport pl.nort.config.source.context.EnvSelectionStrategy;
 %0A%0A/**%0A *
@@ -1454,383 +1454,1919 @@
  by 
-a provided %7B@link ConfigurationSource%7D.%0A   *%0A   * @param source %7B@link ConfigurationSource%7D used to supply provider with configuration%0A   * @return %7B@link ConfigurationProvider%7D backed by a %7B@code source%7D%0A   */%0A  public static ConfigurationProvider withSource(ConfigurationSource source) %7B%0A    return new ConfigurationProviderBuilder()%0A        .withConfigurationSource(source
+%7B@link GitConfigurationSource%7D and using %7B@code envSelectionStrategy%7D%0A   * to control environment selection.%0A   *%0A   * @param repositoryURI        a git repository URI (can be remote)%0A   * @param envSelectionStrategy %7B@link EnvSelectionStrategy%7D to use for determining which environment to choose%0A   * @return %7B@link ConfigurationProvider%7D using provided git repository as a %7B@link ConfigurationSource%7D%0A   */%0A  public static ConfigurationProvider backedByGit(String repositoryURI, EnvSelectionStrategy envSelectionStrategy) %7B%0A    return new ConfigurationProviderBuilder()%0A        .withConfigurationSource(new GitConfigurationSource(repositoryURI))%0A        .withEnvSelectionStrategy(envSelectionStrategy)%0A        .build();%0A  %7D%0A%0A  /**%0A   * A %7B@link ConfigurationProvider%7D backed by a provided %7B@link ConfigurationSource%7D.%0A   *%0A   * @param source %7B@link ConfigurationSource%7D used to supply provider with configuration%0A   * @return %7B@link ConfigurationProvider%7D backed by a %7B@code source%7D%0A   */%0A  public static ConfigurationProvider withSource(ConfigurationSource source) %7B%0A    return new ConfigurationProviderBuilder()%0A        .withConfigurationSource(source)%0A        .build();%0A  %7D%0A%0A  /**%0A   * A %7B@link ConfigurationProvider%7D backed by a provided %7B@link ConfigurationSource%7D and using %7B@code envSelectionStrategy%7D%0A   * to control environment selection.%0A   *%0A   * @param source               %7B@link ConfigurationSource%7D used to supply provider with configuration%0A   * @param envSelectionStrategy %7B@link EnvSelectionStrategy%7D to use for determining which environment to choose%0A   * @return %7B@link ConfigurationProvider%7D backed by a %7B@code source%7D%0A   */%0A  public static ConfigurationProvider withSource(ConfigurationSource source, EnvSelectionStrategy envSelectionStrategy) %7B%0A    return new ConfigurationProviderBuilder()%0A        .withConfigurationSource(source)%0A        .withEnvSelectionStrategy(envSelectionStrategy
 )%0A  

support EnvSelectionStrategy in ConfigurationProviders factory