package com.github.nyrkovalex.ironadmin.core.defaults; import com.github.nyrkovalex.ironadmin.core.pages.Page; import com.github.nyrkovalex.ironadmin.core.pages.PageRegistry; import com.github.nyrkovalex.ironadmin.core.utils.IronContracts; import com.github.nyrkovalex.ironadmin.core.utils.IronMaps; import org.jetbrains.annotations.NotNull; import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; class DefaultPageRegistry implements PageRegistry { private final Map<String, Page> pages; DefaultPageRegistry() { pages = new LinkedHashMap<>(); } @NotNull @Override public Optional<Page> pageFor(String url) { return Optional.ofNullable(pages.get(url)); } @NotNull @Override public PageRegistry register(@NotNull Page page) { IronContracts.notNull(page, "page"); IronMaps.putOrThrowIfPresent(pages, page.url(), page); return this; } @NotNull @Override public PageRegistry register(@NotNull Page... pages) { IronContracts.notNullOrEmpty(pages, "pages"); for (Page p : pages) { register(p); } return this; } @Override @NotNull public Map<String, String> pageMap() { Map<String, String> result = new LinkedHashMap<>(pages.size()); pages.values().stream().forEach((p) -> result.put(p.url(), p.title())); return result; } }