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