package jetbrains.mps.baseLanguage.unitTest.execution.settings; /*Generated by MPS */ import com.intellij.openapi.ui.TextFieldWithBrowseButton; import jetbrains.mps.project.Project; import jetbrains.mps.util.Reference; import org.jetbrains.mps.openapi.model.SModelReference; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import jetbrains.mps.ide.ui.dialogs.properties.choosers.CommonChoosers; import java.util.List; import java.util.Collection; import java.util.LinkedHashSet; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import java.util.Set; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.module.FindUsagesFacade; import jetbrains.mps.project.GlobalScope; import java.util.Collections; import jetbrains.mps.progress.EmptyProgressMonitor; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import java.util.ArrayList; import org.jetbrains.annotations.NotNull; import jetbrains.mps.smodel.ModuleRepositoryFacade; public class ModelChooser extends TextFieldWithBrowseButton.NoPathCompletion { private final Project myMpsProject; private final Reference<SModelReference> myModelRef = new Reference<SModelReference>(); public ModelChooser(final Project mpsProject) { myMpsProject = mpsProject; addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent p0) { SModelReference modelRef = CommonChoosers.showModelChooser(mpsProject, "Choose The Model To Run Tests", ModelChooser.this.collectModels()); if (modelRef != null) { myModelRef.set(modelRef); ModelChooser.this.setText(modelRef.getModelName()); } } }); } private List<SModelReference> collectModels() { final Collection<SModelReference> modelRefs = new LinkedHashSet<SModelReference>(); myMpsProject.getModelAccess().runReadAction(new Runnable() { public void run() { SAbstractConcept concept = MetaAdapterFactory.getInterfaceConcept(0xf61473f9130f42f6L, 0xb98d6c438812c2f6L, 0x11b2709bd56L, "jetbrains.mps.baseLanguage.unitTest.structure.ITestCase"); Set<SNode> usages = FindUsagesFacade.getInstance().findInstances(GlobalScope.getInstance(), Collections.singleton(concept), false, new EmptyProgressMonitor()); for (SNode node : usages) { SModel model = SNodeOperations.getModel(node); SModelReference md = model.getReference(); modelRefs.add(md); } } }); return Collections.unmodifiableList(new ArrayList<SModelReference>(modelRefs)); } public void setModel(@NotNull final String modelName) { myMpsProject.getModelAccess().runReadAction(new Runnable() { public void run() { SModel model = new ModuleRepositoryFacade(myMpsProject.getRepository()).getModelByName(modelName); myModelRef.set(model.getReference()); } }); setText(modelName); } public SModelReference getReference() { return myModelRef.get(); } }