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;
}
}