content: package alien4cloud.utils;
  
  import lombok.extern.slf4j.Slf4j;
  
  import org.springframework.beans.factory.config.YamlPropertiesFactoryBean
  ;
  import org.springframework.core.io.Resource;
  import org.springframework.core.io.ResourceLoader;
  
  /**
   * Factory to create a {@link AlienYamlPropertiesFactoryBeanFactory} singleton.
   */
  @Slf4j
  public class AlienYamlPropertiesFactoryBeanFactory {
      public static final String ALIEN_CONFIGURATION = "alien4cloud-config";
      public static final String ALIEN_CONFIGURATION_YAML = ALIEN_CONFIGURATION + ".yml";
  
      private static final String[] SEARCH_LOCATIONS = new String[] { "file:./config/", "file:./", "classpath:/config/", "classpath:/" };
      private static YamlPropertiesFactoryBean INSTANCE;
  
      /**
       * Get a singleton instance of {@link YamlPropertiesFactoryBean}.
       * 
       * @param resourceLoader The loader to use to find the yaml file.
       * @return an instance of the {@link YamlPropertiesFactoryBean}.
       */
      public static YamlPropertiesFactoryBean get(ResourceLoader resourceLoader) {
          if (INSTANCE == null) {
              for (String searchLocation : SEARCH_LOCATIONS) {
                  Resource resource = resourceLoader.getResource(searchLocation + ALIEN_CONFIGURATION_YAML);
                  if (resource != null && resource.exists()) {
                      log.info("Loading Alien 4 Cloud configuration from {}", resource.getDescription());
                      INSTANCE = new YamlPropertiesFactoryBean();
                      INSTANCE.setResources(new Resource[] { resource });
                      return INSTANCE;
                  }
              }
          }
          return INSTANCE;
      }
  }