package jetbrains.mps.lang.structure.pluginSolution.plugin; /*Generated by MPS */ import org.jetbrains.mps.openapi.module.SModule; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.Language; import jetbrains.mps.smodel.language.LanguageAspectSupport; import jetbrains.mps.smodel.Generator; import com.intellij.ide.BrowserUtil; import jetbrains.mps.smodel.LanguageAspect; import jetbrains.mps.smodel.runtime.ConceptPresentation; import jetbrains.mps.kernel.language.ConceptAspectsHelper; public class HelpHelper { public static HelpHelper.HelpType getDefaultHelpFor(SModule contextModule, SModel contextModel, SNode node) { if (helpForNodeIsAvailable(node)) { return HelpHelper.HelpType.NODE; } if (helpForRootIsAvailable(node)) { return HelpHelper.HelpType.ROOT_NODE; } if (helpForAspectIsAvailable(contextModule, contextModel)) { return HelpHelper.HelpType.ASPECT; } return null; } public static void showHelpFor(SModule contextModule, SModel contextModel, SNode node) { HelpHelper.HelpType defaultHelp = getDefaultHelpFor(contextModule, contextModel, node); if (defaultHelp == HelpHelper.HelpType.NODE) { HelpHelper.showHelpForNode(node); } else if (defaultHelp == HelpHelper.HelpType.ROOT_NODE) { HelpHelper.showHelpForRoot(node); } else if (defaultHelp == HelpHelper.HelpType.ASPECT) { HelpHelper.showHelpForAspect(contextModule, contextModel); } } public static boolean helpForNodeIsAvailable(SNode node) { if ((node == null)) { return false; } return isNotEmptyString(getHelpURL(node)); } public static boolean helpForRootIsAvailable(SNode node) { if ((node == null)) { return false; } return isNotEmptyString(getHelpURL(SNodeOperations.getContainingRoot(node))); } public static boolean helpForAspectIsAvailable(SModule module, SModel model) { if (model == null || module == null) { return false; } if (module instanceof Language) { return LanguageAspectSupport.getHelpUrl(model) != null; } else { return module instanceof Generator; } } public static void showHelpForAspect(SModule contextModule, SModel contextModel) { if (contextModule instanceof Language) { String url = LanguageAspectSupport.getHelpUrl(contextModel); assert url != null : "should have checked that helpForAspectIsAvailable==true"; BrowserUtil.browse(url); } else { BrowserUtil.browse(LanguageAspect.CONFLUENCE_BASE + "Generator#Generator-aboutgenerator"); } } public static void showHelpForRoot(SNode node) { BrowserUtil.browse(getHelpURL(SNodeOperations.getContainingRoot(node))); } public static void showHelpForNode(SNode node) { BrowserUtil.browse(getHelpURL(node)); } public static String getHelpURL(SNode n) { ConceptPresentation conceptPres = ConceptAspectsHelper.getPresentationAspect(n); if (conceptPres == null) { return null; } return conceptPres.getHelpUrl(); } public enum HelpType { NODE("node"), ROOT_NODE("root"), ASPECT("aspect"); private String myName; HelpType(String name) { this.myName = name; } public String getName() { return this.myName; } } private static boolean isNotEmptyString(String str) { return str != null && str.length() > 0; } }