package org.netbeans.gradle.project.properties;
import java.util.List;
import org.jtrim.event.ListenerRef;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.project.api.config.ActiveSettingsQuery;
import org.netbeans.gradle.project.api.config.ActiveSettingsQueryListener;
import org.netbeans.gradle.project.api.config.ProfileKey;
import org.netbeans.gradle.project.util.NbConsumer;
public final class ProjectProfileLoader {
private final NbGradleSingleProjectConfigProvider configProvider;
public ProjectProfileLoader(NbGradleSingleProjectConfigProvider configProvider) {
ExceptionHelper.checkNotNullArgument(configProvider, "configProvider");
this.configProvider = configProvider;
}
public NbGradleCommonProperties loadCommonPropertiesForProfile(ProfileKey profileKey) {
ActiveSettingsQuery settings = loadActiveSettingsForProfile(profileKey);
return configProvider.getCommonProperties(settings);
}
private List<ProfileSettingsKey> keysWithFallbacks(ProfileKey profileKey) {
return getProjectProfileKey(profileKey).getWithFallbacks();
}
public ActiveSettingsQueryEx loadActiveSettingsForProfile(ProfileKey profileKey) {
ProfileSettingsContainer settingsContainer = configProvider.getProfileSettingsContainer();
List<ProfileSettingsKey> combinedKeys = keysWithFallbacks(profileKey);
List<SingleProfileSettingsEx> settings = settingsContainer.loadAllProfileSettings(combinedKeys);
return new MultiProfileProperties(settings);
}
public ListenerRef loadActiveSettingsForProfile(ProfileKey profileKey, final ActiveSettingsQueryListener listener) {
ExceptionHelper.checkNotNullArgument(listener, "listener");
ProfileSettingsContainer settingsContainer = configProvider.getProfileSettingsContainer();
List<ProfileSettingsKey> combinedKeys = keysWithFallbacks(profileKey);
return settingsContainer.loadAllProfileSettings(combinedKeys, new NbConsumer<List<SingleProfileSettingsEx>>() {
@Override
public void accept(List<SingleProfileSettingsEx> settings) {
listener.onLoad(new MultiProfileProperties(settings));
}
});
}
private ProfileSettingsContainer getProfileSettingsContainer() {
return configProvider.getProfileSettingsContainer();
}
private ProfileSettingsKey getProjectProfileKey(ProfileKey profileKey) {
return configProvider.getProjectProfileKey(profileKey);
}
public SingleProfileSettingsEx loadPropertiesForProfile(ProfileKey profileKey) {
ProfileSettingsKey key = getProjectProfileKey(profileKey);
return getProfileSettingsContainer().loadProfileSettings(key);
}
}