package jetbrains.mps.console.base.behavior;
/*Generated by MPS */
import jetbrains.mps.core.aspects.behaviour.BaseBHDescriptor;
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.core.aspects.behaviour.api.BehaviorRegistry;
import jetbrains.mps.smodel.language.ConceptRegistry;
import jetbrains.mps.core.aspects.behaviour.api.SMethod;
import jetbrains.mps.core.aspects.behaviour.SMethodBuilder;
import jetbrains.mps.core.aspects.behaviour.SJavaCompoundTypeImpl;
import jetbrains.mps.core.aspects.behaviour.SModifiersImpl;
import jetbrains.mps.core.aspects.behaviour.AccessPrivileges;
import jetbrains.mps.console.tool.ConsoleContext;
import jetbrains.mps.console.tool.ConsoleStream;
import java.util.List;
import java.util.Arrays;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import org.jetbrains.mps.openapi.language.SConcept;
import jetbrains.mps.smodel.SNodeUtil;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.lang.smodel.query.behavior.HelpProvider__BehaviorDescriptor;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import java.util.Deque;
import jetbrains.mps.internal.collections.runtime.LinkedListSequence;
import java.util.LinkedList;
import jetbrains.mps.internal.collections.runtime.Sequence;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.IListSequence;
import org.apache.log4j.Level;
import jetbrains.mps.internal.collections.runtime.IRightCombinator;
import jetbrains.mps.lang.structure.behavior.AbstractConceptDeclaration__BehaviorDescriptor;
import jetbrains.mps.core.aspects.behaviour.api.SConstructor;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.core.aspects.behaviour.api.BHMethodNotFoundException;
public final class HelpCommand__BehaviorDescriptor extends BaseBHDescriptor {
private static final Logger LOG = LogManager.getLogger(HelpCommand__BehaviorDescriptor.class);
private static final SAbstractConcept CONCEPT = MetaAdapterFactory.getConcept(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x690b986730a1f80L, "jetbrains.mps.console.base.structure.HelpCommand");
private static final BehaviorRegistry REGISTRY = ConceptRegistry.getInstance().getBehaviorRegistry();
public static final SMethod<Void> doExecute_id2SpVAIqougW = new SMethodBuilder<Void>(new SJavaCompoundTypeImpl(Void.class)).name("doExecute").modifiers(SModifiersImpl.create(8, AccessPrivileges.PUBLIC)).concept(CONCEPT).id("2SpVAIqougW").registry(REGISTRY).build(SMethodBuilder.createJavaParameter(ConsoleContext.class, ""), SMethodBuilder.createJavaParameter(ConsoleStream.class, ""));
public static final SMethod<String> getShortHelp_idqgIopNa9Hb = new SMethodBuilder<String>(new SJavaCompoundTypeImpl(String.class)).name("getShortelp").modifiers(SModifiersImpl.create(9, AccessPrivileges.PUBLIC)).concept(CONCEPT).id("qgIopNa9Hb").registry(REGISTRY).build();
public static final SMethod<String> getHelpPage_id64VftqEen2L = new SMethodBuilder<String>(new SJavaCompoundTypeImpl(String.class)).name("getHelpPage").modifiers(SModifiersImpl.create(9, AccessPrivileges.PUBLIC)).concept(CONCEPT).id("64VftqEen2L").registry(REGISTRY).build();
private static final List<SMethod<?>> BH_METHODS = Arrays.<SMethod<?>>asList(doExecute_id2SpVAIqougW, getShortHelp_idqgIopNa9Hb, getHelpPage_id64VftqEen2L);
private static void ___init___(@NotNull SNode __thisNode__) {
}
/*package*/ static void doExecute_id2SpVAIqougW(@NotNull SNode __thisNode__, ConsoleContext context, ConsoleStream console) {
if ((SLinkOperations.getTarget(__thisNode__, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x690b986730a1f80L, 0x60279080c2f4192bL, "target")) == null)) {
Iterable<SAbstractConcept> constructions = ListSequence.fromList(SConceptOperations.getAllSubConcepts(MetaAdapterFactory.getInterfaceConcept(0x1a8554c4eb8443baL, 0x8c346f0d90c6e75aL, 0x690b986730edd07L, "jetbrains.mps.lang.smodel.query.structure.HelpProvider"), context.getOutputWindow().getConsoleModel())).where(new IWhereFilter<SAbstractConcept>() {
public boolean accept(SAbstractConcept it) {
return (it instanceof SConcept) && SNodeUtil.isDefaultSubstitutable(it);
}
}).sort(new ISelector<SAbstractConcept, String>() {
public String select(SAbstractConcept it) {
return (String) HelpProvider__BehaviorDescriptor.getGroup_id60B$833p9Uj.invoke(SNodeOperations.asSConcept(it));
}
}, true).alsoSort(new ISelector<SAbstractConcept, String>() {
public String select(SAbstractConcept it) {
return (String) HelpProvider__BehaviorDescriptor.getKind_id64VftqEenf4.invoke(SNodeOperations.asSConcept(it));
}
}, true).alsoSort(new ISelector<SAbstractConcept, String>() {
public String select(SAbstractConcept it) {
return it.getName();
}
}, true);
Deque<SAbstractConcept> groupedConstructions = LinkedListSequence.fromLinkedListNew(new LinkedList<SAbstractConcept>());
for (SAbstractConcept e : Sequence.fromIterable(constructions)) {
if (HelpProvider__BehaviorDescriptor.getGroup_id60B$833p9Uj.invoke(SNodeOperations.asSConcept(e)) != check_x46ur7_a0a0c0a0a(LinkedListSequence.fromLinkedListNew(groupedConstructions).last())) {
LinkedListSequence.fromLinkedListNew(groupedConstructions).addElement(null);
}
LinkedListSequence.fromLinkedListNew(groupedConstructions).addElement(e);
}
List<List<String>> resultList = ListSequence.fromListWithValues(new ArrayList<List<String>>(), LinkedListSequence.fromLinkedListNew(groupedConstructions).select(new ISelector<SAbstractConcept, IListSequence<String>>() {
public IListSequence<String> select(SAbstractConcept it) {
try {
return ListSequence.fromListAndArray(new ArrayList<String>(), HelpProvider__BehaviorDescriptor.getShortDisplayString_id64VftqEenfn.invoke(SNodeOperations.asSConcept(it)), HelpProvider__BehaviorDescriptor.getShortHelp_idqgIopNa9Hb.invoke(SNodeOperations.asSConcept(it)));
} catch (RuntimeException e) {
if (LOG.isEnabledFor(Level.WARN)) {
LOG.warn("Concept " + it.getQualifiedName() + " implements ConsoleHelpProvider but does not implement getHelp() method", e);
}
try {
return ListSequence.fromListAndArray(new ArrayList<String>(), HelpProvider__BehaviorDescriptor.getShortDisplayString_id64VftqEenfn.invoke(SNodeOperations.asSConcept(it)), "");
} catch (RuntimeException e1) {
return ListSequence.fromListAndArray(new ArrayList<String>(), it.getName(), "");
}
}
}
}));
List<Integer> maxLens = ListSequence.fromList(new LinkedList<Integer>());
for (int i = 0; i < ListSequence.fromList(resultList).select(new ISelector<List<String>, Integer>() {
public Integer select(List<String> it) {
return ListSequence.fromList(it).count();
}
}).foldRight(0, new IRightCombinator<Integer, Integer>() {
public Integer combine(Integer it, Integer s) {
return Math.max(s, it);
}
}); i++) {
int maxLength = 0;
for (List<String> row : ListSequence.fromList(resultList)) {
int length = check_x46ur7_a0a0b0f0a0a(ListSequence.fromList(row).getElement(i));
if (length > maxLength) {
maxLength = length;
}
}
ListSequence.fromList(maxLens).addElement(maxLength);
}
StringBuilder output = new StringBuilder();
for (List<String> row : ListSequence.fromList(resultList)) {
for (int i = 0; i < ListSequence.fromList(maxLens).count(); i++) {
output.append((ListSequence.fromList(row).getElement(i) == null ? "" : ListSequence.fromList(row).getElement(i)));
if (i < ListSequence.fromList(maxLens).count() - 1) {
for (int j = check_x46ur7_a0a0b0a0i0a0a(ListSequence.fromList(row).getElement(i)); j < ListSequence.fromList(maxLens).getElement(i) + 2; j++) {
output.append(" ");
}
}
}
output.append("\n");
}
console.addText("Constructions available in console:\n\n");
console.addText(output.toString());
} else if ((boolean) AbstractConceptDeclaration__BehaviorDescriptor.isSubconceptOf_id73yVtVlWOga.invoke(SLinkOperations.getTarget(SLinkOperations.getTarget(__thisNode__, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x690b986730a1f80L, 0x60279080c2f4192bL, "target")), MetaAdapterFactory.getReferenceLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x60279080c2f3b209L, 0x60279080c2f3f8d6L, "command")), SNodeOperations.getNode("r:935ba0ee-7291-4caa-a807-d76e8fc69391(jetbrains.mps.lang.smodel.query.structure)", "473081947981012231"))) {
String helpPage;
try {
SAbstractConcept chp = (SAbstractConcept) SNodeOperations.asSConcept(SLinkOperations.getTarget(SLinkOperations.getTarget(__thisNode__, MetaAdapterFactory.getContainmentLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x690b986730a1f80L, 0x60279080c2f4192bL, "target")), MetaAdapterFactory.getReferenceLink(0xde1ad86d6e504a02L, 0xb306d4d17f64c375L, 0x60279080c2f3b209L, 0x60279080c2f3f8d6L, "command")));
helpPage = HelpProvider__BehaviorDescriptor.getHelpPage_id64VftqEen2L.invoke(SNodeOperations.asSConcept(chp));
String helpHead = HelpProvider__BehaviorDescriptor.getDisplayString_id5YxQmqOFZEf.invoke(SNodeOperations.asSConcept(chp)) + " : " + HelpProvider__BehaviorDescriptor.getKind_id64VftqEenf4.invoke(SNodeOperations.asSConcept(chp)) + "\n" + HelpProvider__BehaviorDescriptor.getShortHelp_idqgIopNa9Hb.invoke(SNodeOperations.asSConcept(chp));
if ((helpPage != null && helpPage.length() > 0)) {
console.addText(helpHead + "\n\n" + helpPage);
} else {
console.addText(helpHead);
}
} catch (RuntimeException ignored) {
}
}
}
/*package*/ static String getShortHelp_idqgIopNa9Hb(@NotNull SAbstractConcept __thisConcept__) {
return "display this help or a help page for a specific command";
}
/*package*/ static String getHelpPage_id64VftqEen2L(@NotNull SAbstractConcept __thisConcept__) {
return "When called without any arguments, lists all available commands with their brief description.\nWhen a command is specified, help specific to that command is printed.";
}
/*package*/ HelpCommand__BehaviorDescriptor() {
super(REGISTRY);
}
@Override
protected void initNode(@NotNull SNode node, @NotNull SConstructor constructor, @Nullable Object[] parameters) {
___init___(node);
}
@Override
protected <T> T invokeSpecial0(@NotNull SNode node, @NotNull SMethod<T> method, @Nullable Object[] parameters) {
int methodIndex = BH_METHODS.indexOf(method);
if (methodIndex < 0) {
throw new BHMethodNotFoundException(this, method);
}
switch (methodIndex) {
case 0:
doExecute_id2SpVAIqougW(node, (ConsoleContext) parameters[0], (ConsoleStream) parameters[1]);
return null;
default:
throw new BHMethodNotFoundException(this, method);
}
}
@Override
protected <T> T invokeSpecial0(@NotNull SAbstractConcept concept, @NotNull SMethod<T> method, @Nullable Object[] parameters) {
int methodIndex = BH_METHODS.indexOf(method);
if (methodIndex < 0) {
throw new BHMethodNotFoundException(this, method);
}
switch (methodIndex) {
case 1:
return (T) ((String) getShortHelp_idqgIopNa9Hb(concept));
case 2:
return (T) ((String) getHelpPage_id64VftqEen2L(concept));
default:
throw new BHMethodNotFoundException(this, method);
}
}
@NotNull
@Override
public List<SMethod<?>> getDeclaredMethods() {
return BH_METHODS;
}
@NotNull
@Override
public SAbstractConcept getConcept() {
return CONCEPT;
}
private static String check_x46ur7_a0a0c0a0a(SAbstractConcept checkedDotOperand) {
if (null != checkedDotOperand) {
return HelpProvider__BehaviorDescriptor.getGroup_id60B$833p9Uj.invoke(SNodeOperations.asSConcept(checkedDotOperand));
}
return null;
}
private static int check_x46ur7_a0a0b0f0a0a(String checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.length();
}
return 0;
}
private static int check_x46ur7_a0a0b0a0i0a0a(String checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.length();
}
return 0;
}
}