/*
 *  @author Ranides Atterwim <ranides@gmail.com>
 *  @copyright Ranides Atterwim
 *  @license WTFPL
 *  @url http://ranides.net/projects/assira
 */

package net.ranides.assira.config;

import java.util.Collection;

/**
 * Fabryka konfiguracji - interfejs używany przez {@link ConfigService}.
 * @see ConfigManager
 * @author ranides
 */
public interface ConfigProvider {
    
    /**
     * Nazwa fabryki.
     * @return
     */
    String getName();
    
    /**
     * Tworzy nową instancję obiektu konfiguracyjnego powiązanego z podaną ścieżką. 
     * Zwrócona konfiguracja nie musi być w stanie załadowanym. Kilkukrotne wywołanie
     * metody z tym samym argumentem zwraca różne obiekty. Argument {@code path}
     * nie powinien zawierać prefiksu z nazwą providera.
     * @param path
     * @return
     */
    Configuration getInstance(String path);
    
    /**
     * Zwraca listę wszystkich dostępnych ścieżek, dla których fabryka może utworzyć
     * konfigurację. Metoda opcjonalna.
     * @return
     */
    Collection<String> list();
    
}
