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.module.SModuleReference;
import org.jetbrains.annotations.NotNull;
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 jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import java.util.ArrayList;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.smodel.ModuleRepositoryFacade;
public final class ModuleChooser extends TextFieldWithBrowseButton.NoPathCompletion {
private final Project myMpsProject;
private final Reference<SModuleReference> myModuleRef = new Reference<SModuleReference>();
public ModuleChooser(@NotNull final Project mpsProject) {
myMpsProject = mpsProject;
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent p0) {
SModuleReference ref = CommonChoosers.showModuleChooser(mpsProject, "Choose Module To Run Tests", ModuleChooser.this.collectModules());
if (ref != null) {
myModuleRef.set(ref);
ModuleChooser.this.setText(ref.getModuleName());
}
}
});
}
private List<SModuleReference> collectModules() {
final Collection<SModuleReference> moduleRefs = new LinkedHashSet<SModuleReference>();
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) {
SModuleReference module = SNodeOperations.getModel(node).getModule().getModuleReference();
moduleRefs.add(module);
}
}
});
return Collections.unmodifiableList(new ArrayList<SModuleReference>(moduleRefs));
}
public void setModule(@NotNull final String moduleName) {
myMpsProject.getModelAccess().runReadAction(new Runnable() {
public void run() {
SModule module = new ModuleRepositoryFacade(myMpsProject.getRepository()).getModuleByName(moduleName);
myModuleRef.set(module.getModuleReference());
}
});
setText(moduleName);
}
public SModuleReference getReference() {
return myModuleRef.get();
}
}