package com.airlock.iam.plugin.framework.misc.config;

import com.airlock.iam.plugin.api.config.ConfigurationEnvironment;
import com.airlock.iam.plugin.api.exception.InitializeException;
import com.airlock.iam.plugin.framework.application.configuration.MutablePluginConfiguration;
import com.airlock.iam.plugin.framework.misc.util.GlobalConfigUtils;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Objects;
import java.util.stream.Stream;

public final class ConfigurationEnvironmentGlobalPluginWalkerScope implements SubtreeWalkerScope {
   private final ConfigurationEnvironment env;

   @Override
   public Stream<MutablePluginConfiguration> getNexts(MutablePluginConfiguration current) {
      try {
         Class<?> pluginClass = current.getPluginClass();
         return GlobalConfigUtils.getGlobalReferencesForPlugin(pluginClass)
            .stream()
            .map(globalReferenceId -> current.getGlobalPluginOrDefault(globalReferenceId, this.env))
            .filter(Objects::nonNull)
            .map(MutablePluginConfiguration.class::cast);
      } catch (InitializeException var3) {
         return Stream.empty();
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   public ConfigurationEnvironmentGlobalPluginWalkerScope(ConfigurationEnvironment env) {
      this.env = env;
   }
}
