package io.shockah.skylark.ident; import io.shockah.skylark.BotManager; import io.shockah.skylark.plugin.BotManagerService; import io.shockah.skylark.util.ReadWriteList; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.pircbotx.User; public final class IdentService extends BotManagerService { public final IdentPlugin plugin; protected final ReadWriteList<IdentMethod> methods = new ReadWriteList<>(new ArrayList<>()); public IdentService(IdentPlugin plugin, BotManager manager) { super(manager); this.plugin = plugin; plugin.methodFactories.iterate(factory -> { methods.add(factory.create(this)); }); } public Map<IdentMethod, String> getIdentsForUser(User user) { Map<IdentMethod, String> results = new HashMap<>(); methods.iterate(method -> { if (method.isAvailable()) results.put(method, method.getForUser(user)); }); return results; } public IdentMethod getMethod(String prefix) { return methods.filterFirst(method -> method.prefix.equals(prefix)); } public IdentMethod getMethod(IdentMethodFactory factory) { return methods.filterFirst(method -> method.factory == factory); } @SuppressWarnings("unchecked") public <T extends IdentMethod> T getMethod(Class<T> clazz) { return (T)methods.filterFirst(method -> clazz.isInstance(method)); } }