package io.gitlab.jfronny.libjf.config.impl.dsl; import io.gitlab.jfronny.libjf.config.api.v1.*; import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder; import java.util.List; import java.util.Map; import java.util.function.Consumer; import java.util.function.Supplier; import java.util.stream.Collectors; public class DslConfigCategory implements ConfigCategory { private final String id; private final String categoryPath; private final String translationPrefix; private final List> entries; private final Map> presets; private final List>> referencedConfigs; private final Map categories; private final Supplier root; private final List> verifiers; public DslConfigCategory(String id, String categoryPath, String translationPrefix, List> entries, Map> presets, List>> referencedConfigs, List> categories, Supplier root, List> verifiers) { this.id = id; this.categoryPath = categoryPath; this.translationPrefix = translationPrefix; this.entries = entries; this.presets = presets; this.referencedConfigs = referencedConfigs; this.categories = categories.stream().collect(Collectors.toMap(CategoryBuilder::getId, b -> b.build(root))); this.root = root; this.verifiers = verifiers; } @Override public String getId() { return id; } @Override public String getCategoryPath() { return categoryPath; } @Override public String getTranslationPrefix() { return translationPrefix; } @Override public List> getEntries() { return entries; } @Override public Map getPresets() { return presets.entrySet().stream().collect(Collectors.toMap( Map.Entry::getKey, t -> () -> t.getValue().accept(this) )); } @Override public List getReferencedConfigs() { return referencedConfigs.stream().map(Supplier::get).mapMulti(Iterable::forEach).toList(); } @Override public Map getCategories() { return categories; } @Override public ConfigInstance getRoot() { return root.get(); } @Override public void fix() { ConfigCategory.super.fix(); for (Consumer verifier : verifiers) verifier.accept(this); } }