package io.gitlab.jfronny.libjf.config.impl.dsl; import io.gitlab.jfronny.gson.stream.JsonReader; import io.gitlab.jfronny.libjf.config.api.v2.*; import io.gitlab.jfronny.libjf.config.api.v2.dsl.CategoryBuilder; import org.jetbrains.annotations.ApiStatus; import java.util.*; 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; @ApiStatus.Internal public final Map> migrations; 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, Map> migrations) { this.id = id; this.categoryPath = categoryPath; this.translationPrefix = translationPrefix; this.entries = entries; this.presets = presets.entrySet().stream().collect(Collectors.toMap( Map.Entry::getKey, t -> () -> t.getValue().accept(this), (u, v) -> v, LinkedHashMap::new )); this.referencedConfigs = referencedConfigs; this.migrations = migrations; this.categories = categories.stream().collect(Collectors.toMap( CategoryBuilder::getId, b -> b.build(root), (u, v) -> v, LinkedHashMap::new )); 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; } @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); } }