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

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class PluginDictionary {
   private final Collection<Class<?>> pluginClasses = new ArrayList<>();

   public PluginDictionary(Collection<Class<?>> pluginClasses) {
      this.pluginClasses.addAll(pluginClasses);
   }

   public Set<Class<?>> getAssignablePluginClasses(Class<?> assignableToType) {
      Objects.requireNonNull(assignableToType);
      Set<Class<?>> assignableClasses = new HashSet<>();

      for (Class<?> pluginClass : this.pluginClasses) {
         if (assignableToType.isAssignableFrom(pluginClass)) {
            assignableClasses.add(pluginClass);
         }
      }

      return assignableClasses;
   }

   public long count() {
      return this.pluginClasses.size();
   }
}
