package jetbrains.mps.execution.configurations.implementation.plugin.plugin;
/*Generated by MPS */
import jetbrains.mps.execution.lib.ui.ListPanel;
import org.jetbrains.mps.openapi.model.SNodeReference;
import java.util.function.Function;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import com.intellij.openapi.project.Project;
import jetbrains.mps.smodel.SNodePointer;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.ide.project.ProjectHelper;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import java.util.List;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import java.util.Set;
import org.jetbrains.mps.openapi.module.FindUsagesFacade;
import jetbrains.mps.project.GlobalScope;
import java.util.Collections;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import jetbrains.mps.ide.platform.dialogs.choosers.NodeChooserDialog;
import jetbrains.mps.workbench.choose.ChooseByNameData;
import jetbrains.mps.workbench.choose.NodesPresentation;
public class PluginsListPanel extends ListPanel<SNodeReference> {
private final Function<SNode, String> myPluginNameFunc = new Function<SNode, String>() {
public String apply(SNode n) {
return SPropertyOperations.getString(SLinkOperations.getTarget(SNodeOperations.as(n, MetaAdapterFactory.getConcept(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x5b7be37b4de9bb6eL, "jetbrains.mps.build.mps.structure.BuildMpsLayout_Plugin")), MetaAdapterFactory.getReferenceLink(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x5b7be37b4de9bb6eL, 0x5b7be37b4dee5919L, "plugin")), MetaAdapterFactory.getProperty(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x5b7be37b4de9bb74L, 0x5b7be37b4de9bb6fL, "id"));
}
};
public PluginsListPanel(Project p) {
super(p, "Plugins to deploy");
}
@Override
protected SNodeReference wrap(SNode node) {
return new SNodePointer(node);
}
@Override
protected SNodeReference unwrap(SNodeReference reference) {
return reference;
}
@Override
protected String getFqName(final SNodeReference element) {
final SRepository repo = ProjectHelper.getProjectRepository(myProject);
return new ModelAccessHelper(repo).runReadAction(new Computable<String>() {
public String compute() {
return myPluginNameFunc.apply(element.resolve(repo));
}
});
}
@Override
protected List<SNodeReference> collectCandidates(final ProgressMonitor progress) {
final SRepository repo = ProjectHelper.getProjectRepository(myProject);
return new ModelAccessHelper(repo).runReadAction(new Computable<List<SNodeReference>>() {
public List<SNodeReference> compute() {
Set<SNode> usages = FindUsagesFacade.getInstance().findInstances(GlobalScope.getInstance(), Collections.singleton(MetaAdapterFactory.getConcept(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x5b7be37b4de9bb6eL, "jetbrains.mps.build.mps.structure.BuildMpsLayout_Plugin")), false, progress);
List<SNodeReference> rv = ListSequence.fromList(new ArrayList<SNodeReference>());
for (SNode node : SetSequence.fromSet(usages)) {
ListSequence.fromList(rv).addElement(node.getReference());
}
return rv;
}
});
}
@Override
public NodeChooserDialog createNodeChooserDialog(List<SNodeReference> nodesList) {
ChooseByNameData d = new ChooseByNameData(new NodesPresentation(ProjectHelper.getProjectRepository(myProject), myPluginNameFunc));
d.derivePrompts("node").setScope(nodesList, Collections.emptySet());
return new NodeChooserDialog(myProject, d);
}
}