private TocContribution[] getRootTocContributions(String locale, Set<String> tocsToFilter) { TocContribution[] contributions = getTocContributionsForToc(locale); List<TocContribution> unassembled = new ArrayList<>(Arrays.asList(contributions)); TocAssembler assembler = new TocAssembler(tocsToFilter); List<TocContribution> assembled = assembler.assemble(unassembled); return assembled.toArray(new TocContribution[assembled.size()]); }
public List<TocContribution> assemble(List<TocContribution> contributions) { this.contributions = contributions; anchorsByContributionId = null; contributionsById = null; contributionsByLinkTo = null; processedContributions = null; List<TocContribution> books = getBooks(); Iterator<TocContribution> iter = books.iterator(); while (iter.hasNext()) { TocContribution book = iter.next(); process(book); } return books; }
private boolean hasAnchor(String tocContributionId, String anchorId) { TocContribution contrib = getContribution(tocContributionId); if (contrib != null) { process(contrib); if (anchorsByContributionId != null) { Set<String> anchors = anchorsByContributionId.get(tocContributionId); if (anchors != null) { return anchors.contains(anchorId); } } } // invalid contribution, or no anchors return false; }
private List<TocContribution> getBooks() { Map<String, String> linkedContributionIds = getLinkedContributionIds(contributions); List<TocContribution> books = new ArrayList<>(); Iterator<TocContribution> iter = contributions.iterator(); while (iter.hasNext()) { TocContribution contrib = iter.next(); boolean isValidLinkTo = hasValidLinkTo(contrib); boolean isLinkedId = linkedContributionIds.containsKey(contrib.getId()); if (!isValidLinkTo && !isLinkedId) {
private boolean hasValidLinkTo(TocContribution contrib) { String linkTo = contrib.getLinkTo(); if (linkTo != null) { String normalized = HrefUtil.normalizeHref(contrib.getContributorId(), linkTo); int index = normalized.indexOf('#'); if (index != -1) { String id = normalized.substring(0, index); String anchorId = normalized.substring(index + 1); return hasAnchor(id, anchorId); } } return false; }
new ValidationHandler(getRequiredAttributes()), new ProcessorHandler() { @Override