private TocContribution[] filterTocContributions(TocContribution[] unfiltered, Set<String> tocsToFilter) { List<TocContribution> filtered = new ArrayList<>(); for (int i=0;i<unfiltered.length;++i) { if (!tocsToFilter.contains(unfiltered[i].getId()) && !tocsToFilter.contains(unfiltered[i].getCategoryId())) { filtered.add(unfiltered[i]); } } return filtered.toArray(new TocContribution[filtered.size()]); }
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; }
private void addExtraDocuments(TocContribution contribution, String[] extraDocuments) { if (extraDocuments.length > 0) { String[] destExtraDocuments = contribution.getExtraDocuments(); String[] combinedExtraDocuments; if (destExtraDocuments.length == 0) { combinedExtraDocuments = extraDocuments; } else { Set<String> set = new HashSet<>(); set.addAll(Arrays.asList(destExtraDocuments)); set.addAll(Arrays.asList(extraDocuments)); combinedExtraDocuments = set.toArray(new String[set.size()]); } contribution.setExtraDocuments(combinedExtraDocuments); } }
public TocContribution parse(TocFile tocFile) throws IOException, SAXException, ParserConfigurationException { if (reader == null) { reader = new DocumentReader(); } try (InputStream in = tocFile.getInputStream()) { if (in != null) { Toc toc = (Toc) reader.read(in); TocContribution contribution = new TocContribution(); contribution.setCategoryId(tocFile.getCategory()); contribution.setContributorId(tocFile.getPluginId()); contribution.setExtraDocuments(DocumentFinder.collectExtraDocuments(tocFile)); contribution.setId(HrefUtil.normalizeHref(tocFile.getPluginId(), tocFile.getFile())); contribution.setLocale(tocFile.getLocale()); contribution.setToc(toc); contribution.setPrimary(tocFile.isPrimary()); return contribution; } else { throw new FileNotFoundException(); } } } }
TocContribution contrib = iter.next(); boolean isValidLinkTo = hasValidLinkTo(contrib); boolean isLinkedId = linkedContributionIds.containsKey(contrib.getId()); if (!isValidLinkTo && !isLinkedId) { if (contrib.isPrimary()) { books.add(contrib); if (HelpPlugin.DEBUG_TOC) { String msg = "Primary Toc Found: " + contrib.getId(); //$NON-NLS-1$ String linkTo = contrib.getLinkTo(); if (linkTo != null) { msg += " - cannot find link to: "; //$NON-NLS-1$ String msg = "Table of contents is not primary and not linked to another TOC " + contrib.getId() + " (skipping)"; //$NON-NLS-1$ //$NON-NLS-2$ System.out.println(msg); contrib.setSubToc(true); if (HelpPlugin.DEBUG_TOC) { String msg = "Toc " + contrib.getId(); //$NON-NLS-1$ if (isValidLinkTo) { msg += " has a valid link to " + contrib.getLinkTo(); //$NON-NLS-1$ msg += " is linked from " + linkedContributionIds.get(contrib.getId()); //$NON-NLS-1$
while (iter.hasNext()) { TocContribution srcContribution = iter.next(); String linkTo = srcContribution.getLinkTo(); if (linkTo != null) { String destAnchorPath = HrefUtil.normalizeHref(srcContribution.getContributorId(), linkTo); ITocContribution[] array = contributionsByLinkTo.get(destAnchorPath); if (array == null) { if (srcContribution.getId().equals(array[i].getId())) { isAlreadyIncluded = true;
@Override public short handle(UAElement element, String id) { if (element instanceof Link) { Link link = (Link)element; UAElement parent = link.getParentElement(); if (parent != null) { String toc = link.getToc(); if (toc != null) { TocContribution destContribution = getContribution(id); TocContribution srcContribution = getContribution(HrefUtil.normalizeHref(destContribution.getContributorId(), toc)); if (srcContribution != null) { process(srcContribution); IUAElement[] children = srcContribution.getToc().getChildren(); for (int i=0;i<children.length;++i) { parent.insertBefore((UAElement)children[i], link); } addExtraDocuments(destContribution, srcContribution.getExtraDocuments()); } parent.removeChild(link); } } return HANDLED_SKIP; } return UNHANDLED; } }
TocContribution contrib = iter.next(); try { String id = contrib.getId(); if (!tocsToFilter.contains(id)) { processor.process((Toc)contrib.getToc(), id); String msg = "Error processing help table of contents: " + contrib.getId() + " (skipping)"; //$NON-NLS-1$ //$NON-NLS-2$ HelpPlugin.logError(msg, t);
private TocContribution getContribution(String id) { if (contributionsById == null) { contributionsById = new HashMap<>(); Iterator<TocContribution> iter = contributions.iterator(); while (iter.hasNext()) { TocContribution contribution = iter.next(); contributionsById.put(contribution.getId(), contribution); } } return contributionsById.get(id); }
@Override public short handle(UAElement element, String id) { if (element instanceof Link) { Link link = (Link)element; String toc = link.getToc(); if (toc != null) { TocContribution srcContribution = getContribution(id); linkedContributionIds.put(HrefUtil.normalizeHref(srcContribution.getContributorId(), toc), id); } } return UNHANDLED; } }
contrib = providers[i].getTocContributions(locale); for (int j=0;j<contrib.length;++j) { TocContribution contribution = new TocContribution(); contribution.setCategoryId(contrib[j].getCategoryId()); contribution.setContributorId(contrib[j].getContributorId()); contribution.setExtraDocuments(contrib[j].getExtraDocuments()); contribution.setId(contrib[j].getId()); contribution.setLocale(contrib[j].getLocale()); contribution.setPrimary(contrib[j].isPrimary()); IToc toc = contrib[j].getToc(); Toc t = toc instanceof Toc ? (Toc)toc : (Toc)UAElementFactory.newElement(toc); t.setLinkTo(contrib[j].getLinkTo()); contribution.setToc(t); if(!contributions.containsKey(contrib[j].getId())) contributions.put(contrib[j].getId(), contribution);
if (destContribution != null) { ITocContribution[] srcContributions = getAnchorContributions( destContribution.getId() + '#' + anchorId); for (int i=0;i<srcContributions.length;++i) { process(srcContributions[i]);