package org.nextprot.api.web.ui.page; import org.nextprot.api.core.domain.Entry; import org.nextprot.api.web.ui.page.impl.*; import java.util.EnumMap; import java.util.HashMap; import java.util.Map; import java.util.Objects; /** * Reports results of entry page tests defined by {@code PageDisplayPredicate}s */ public class PageDisplayReport { private final Map<EntryPage, PageDisplayPredicate> registeredPredicates; PageDisplayReport() { registeredPredicates = new EnumMap<>(EntryPage.class); } /** * Unique entry point to build instance of this class * @return an instance of tester */ public static PageDisplayReport allPages() { PageDisplayReport pageDisplayReport = new PageDisplayReport(); PageDisplayBasePredicate.Predicates.getInstance().getPagePredicates() .forEach(pageDisplayReport::addPredicate); return pageDisplayReport; } /** * Add a page display requirement * @param pageDisplayPredicate a requirement to test page display */ void addPredicate(PageDisplayPredicate pageDisplayPredicate) { Objects.requireNonNull(pageDisplayPredicate); if (registeredPredicates.containsKey(pageDisplayPredicate.getPage())) { throw new IllegalStateException("page requirement "+ pageDisplayPredicate.getPage().getLabel()+" already exists"); } registeredPredicates.put(pageDisplayPredicate.getPage(), pageDisplayPredicate); } /** * Test all display requirements for all registered entry pages and report the results in a map of boolean * @return for each true if entry provide data needed by the page else false */ public Map<String, Boolean> reportDisplayPageStatus(Entry entry) { Objects.requireNonNull(entry); Map<String, Boolean> map = new HashMap<>(registeredPredicates.size()); for (PageDisplayPredicate page : registeredPredicates.values()) { map.put(page.getPage().getLabel(), page.doDisplayPage(entry)); } return map; } }