X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.help.core%2Fsrc%2Forg%2Fsimantics%2Fhelp%2Fcore%2FSimanticsTocProvider.java;h=b276998c1f710089f6e58788cd49e4a8c12b9aaf;hb=6f11a60dee43d620d500c0cf5af34a1d91c80a8b;hp=559ef55ea816746816867887877ad72a1084c287;hpb=6a4a43b278d6819c660182eb4954524d1757e077;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.help.core/src/org/simantics/help/core/SimanticsTocProvider.java b/bundles/org.simantics.help.core/src/org/simantics/help/core/SimanticsTocProvider.java index 559ef55ea..b276998c1 100644 --- a/bundles/org.simantics.help.core/src/org/simantics/help/core/SimanticsTocProvider.java +++ b/bundles/org.simantics.help.core/src/org/simantics/help/core/SimanticsTocProvider.java @@ -1,168 +1,168 @@ -package org.simantics.help.core; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.eclipse.help.AbstractTocProvider; -import org.eclipse.help.ITocContribution; -import org.eclipse.help.internal.HelpPlugin; -import org.eclipse.help.internal.Topic; -import org.eclipse.help.internal.entityresolver.LocalEntityResolver; -import org.eclipse.help.internal.toc.Toc; -import org.eclipse.help.internal.toc.TocContribution; -import org.simantics.Simantics; -import org.simantics.db.ReadGraph; -import org.simantics.db.common.request.ReadRequest; -import org.simantics.db.exception.DatabaseException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -@SuppressWarnings("restriction") -public class SimanticsTocProvider extends AbstractTocProvider { - - private static DocumentBuilder builder; - private static Document document; - - private static Map widgetReferences; - private static Map> tutorials; - - @Override - public ITocContribution[] getTocContributions(String locale) { - List contributions = new ArrayList<>(); - - if (widgetReferences == null || tutorials == null) { - try { - Simantics.getSession().syncRequest(new ReadRequest() { - @Override - public void run(ReadGraph graph) throws DatabaseException { - widgetReferences = HelpUtils.collectWidgetReferencesFromSharedLibraries(graph); - tutorials = HelpUtils.collectHelpsFromSharedLibraries(graph); - - } - }); - } catch (DatabaseException e) { - e.printStackTrace(); - } - } - - Map tocs = new HashMap<>(); - - if (widgetReferences != null) { - for (Map.Entry widgetReference : widgetReferences.entrySet()) { - String libName = widgetReference.getKey(); - Path htmlFile = widgetReference.getValue(); - Toc toc = tocs.get(libName); - if (toc == null) { - Element element = getDocument().createElement("toc"); - toc = new Toc(element); - toc.setLabel(libName); -// toc.setTopic(libName); -// toc.setHref(libName); - tocs.put(libName, toc); - } - - Topic topic = new Topic(); - //topic.setLabel(htmlFile.getFileName().toString()); - topic.setLabel("Widget Reference"); -// String href = htmlFile.toUri().toString(); - String href = htmlFile.toString().split(Activator.PLUGIN_ID)[1].substring(1); - href = "PLUGINS_ROOT/platform:/meta/" + Activator.PLUGIN_ID + "/" + href; - topic.setHref(href.replace("\\", "/").replace(" ", "%20")); - - toc.appendChild(topic); - } - } - - if (tutorials != null) { - for (Map.Entry> tutorial : tutorials.entrySet()) { - String libName = tutorial.getKey(); - Toc toc = tocs.get(libName); - if (toc == null) { - Element element = getDocument().createElement("toc"); - toc = new Toc(element); - toc.setLabel(libName); - toc.setTopic(libName); - toc.setHref(libName); - tocs.put(libName, toc); - } - - Map topics = new HashMap<>(); - - for (Path htmlFile : tutorial.getValue()) { - Path path = Paths.get(htmlFile.toString().split(libName)[1]); - Topic topic = getOrCreateTopic(topics, toc, path); - String href = htmlFile.toString().split(Activator.PLUGIN_ID)[1].substring(1); - href = "PLUGINS_ROOT/platform:/meta/" + Activator.PLUGIN_ID + "/" + href; -// String href = htmlFile.toUri().toString(); - topic.setHref(href.replace("\\", "/").replace(" ", "%20")); - } - } - } - - for (Toc toc : tocs.values()) { - TocContribution contribution = new TocContribution(); - contribution.setLocale(locale); - contribution.setId(toc.getLabel()); - contribution.setCategoryId("category_" + toc.getLabel()); - contribution.setPrimary(true); - contribution.setContributorId(Activator.PLUGIN_ID); - - contribution.setToc(toc); - contributions.add(contribution); - } - - - return (ITocContribution[])contributions.toArray(new ITocContribution[contributions.size()]); - } - - private static Topic getOrCreateTopic(Map topics, Toc toc, Path topicPath) { - String topicName = topicPath.getFileName().toString(); - Topic topic = topics.get(topicName); - if (topic == null) { - topic = new Topic(); - topic.setLabel(topicName); - Path parentPath = topicPath.getParent(); - if (parentPath != null && parentPath.getFileName() != null) { - Topic parentTopic = getOrCreateTopic(topics, toc, parentPath); - parentTopic.appendChild(topic); - } else { - toc.appendChild(topic); - } - topics.put(topicName, topic); - } - return topic; - } - - private static Document getDocument() { - if (document == null) { - if (builder == null) { - try { - builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - builder.setEntityResolver(new LocalEntityResolver()); - } - catch (ParserConfigurationException e) { - String msg = "Error creating document builder"; //$NON-NLS-1$ - HelpPlugin.logError(msg, e); - } - } - document = builder.newDocument(); - } - return document; - } - - public static void clearTocCache() { - widgetReferences.clear(); - widgetReferences = null; - tutorials.clear(); - tutorials = null; - HelpPlugin.getTocManager().clearCache(); - } -} +package org.simantics.help.core; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.eclipse.help.AbstractTocProvider; +import org.eclipse.help.ITocContribution; +import org.eclipse.help.internal.HelpPlugin; +import org.eclipse.help.internal.Topic; +import org.eclipse.help.internal.entityresolver.LocalEntityResolver; +import org.eclipse.help.internal.toc.Toc; +import org.eclipse.help.internal.toc.TocContribution; +import org.simantics.Simantics; +import org.simantics.db.ReadGraph; +import org.simantics.db.common.request.ReadRequest; +import org.simantics.db.exception.DatabaseException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +@SuppressWarnings("restriction") +public class SimanticsTocProvider extends AbstractTocProvider { + + private static DocumentBuilder builder; + private static Document document; + + private static Map widgetReferences; + private static Map> tutorials; + + @Override + public ITocContribution[] getTocContributions(String locale) { + List contributions = new ArrayList<>(); + + if (widgetReferences == null || tutorials == null) { + try { + Simantics.getSession().syncRequest(new ReadRequest() { + @Override + public void run(ReadGraph graph) throws DatabaseException { + widgetReferences = HelpUtils.collectWidgetReferencesFromSharedLibraries(graph); + tutorials = HelpUtils.collectHelpsFromSharedLibraries(graph); + + } + }); + } catch (DatabaseException e) { + e.printStackTrace(); + } + } + + Map tocs = new HashMap<>(); + + if (widgetReferences != null) { + for (Map.Entry widgetReference : widgetReferences.entrySet()) { + String libName = widgetReference.getKey(); + Path htmlFile = widgetReference.getValue(); + Toc toc = tocs.get(libName); + if (toc == null) { + Element element = getDocument().createElement("toc"); + toc = new Toc(element); + toc.setLabel(libName); +// toc.setTopic(libName); +// toc.setHref(libName); + tocs.put(libName, toc); + } + + Topic topic = new Topic(); + //topic.setLabel(htmlFile.getFileName().toString()); + topic.setLabel("Widget Reference"); +// String href = htmlFile.toUri().toString(); + String href = htmlFile.toString().split(Activator.PLUGIN_ID)[1].substring(1); + href = "PLUGINS_ROOT/platform:/meta/" + Activator.PLUGIN_ID + "/" + href; + topic.setHref(href.replace("\\", "/").replace(" ", "%20")); + + toc.appendChild(topic); + } + } + + if (tutorials != null) { + for (Map.Entry> tutorial : tutorials.entrySet()) { + String libName = tutorial.getKey(); + Toc toc = tocs.get(libName); + if (toc == null) { + Element element = getDocument().createElement("toc"); + toc = new Toc(element); + toc.setLabel(libName); + toc.setTopic(libName); + toc.setHref(libName); + tocs.put(libName, toc); + } + + Map topics = new HashMap<>(); + + for (Path htmlFile : tutorial.getValue()) { + Path path = Paths.get(htmlFile.toString().split(libName)[1]); + Topic topic = getOrCreateTopic(topics, toc, path); + String href = htmlFile.toString().split(Activator.PLUGIN_ID)[1].substring(1); + href = "PLUGINS_ROOT/platform:/meta/" + Activator.PLUGIN_ID + "/" + href; +// String href = htmlFile.toUri().toString(); + topic.setHref(href.replace("\\", "/").replace(" ", "%20")); + } + } + } + + for (Toc toc : tocs.values()) { + TocContribution contribution = new TocContribution(); + contribution.setLocale(locale); + contribution.setId(toc.getLabel()); + contribution.setCategoryId("category_" + toc.getLabel()); + contribution.setPrimary(true); + contribution.setContributorId(Activator.PLUGIN_ID); + contribution.setExtraDocuments(new String[0]); + contribution.setToc(toc); + contributions.add(contribution); + } + + + return (ITocContribution[])contributions.toArray(new ITocContribution[contributions.size()]); + } + + private static Topic getOrCreateTopic(Map topics, Toc toc, Path topicPath) { + String topicName = topicPath.getFileName().toString(); + Topic topic = topics.get(topicName); + if (topic == null) { + topic = new Topic(); + topic.setLabel(topicName); + Path parentPath = topicPath.getParent(); + if (parentPath != null && parentPath.getFileName() != null) { + Topic parentTopic = getOrCreateTopic(topics, toc, parentPath); + parentTopic.appendChild(topic); + } else { + toc.appendChild(topic); + } + topics.put(topicName, topic); + } + return topic; + } + + private static Document getDocument() { + if (document == null) { + if (builder == null) { + try { + builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + builder.setEntityResolver(new LocalEntityResolver()); + } + catch (ParserConfigurationException e) { + String msg = "Error creating document builder"; //$NON-NLS-1$ + HelpPlugin.logError(msg, e); + } + } + document = builder.newDocument(); + } + return document; + } + + public static void clearTocCache() { + widgetReferences.clear(); + widgetReferences = null; + tutorials.clear(); + tutorials = null; + HelpPlugin.getTocManager().clearCache(); + } +}