package jetbrains.mps.ide.script.plugin.migrationtool; /*Generated by MPS */ import jetbrains.mps.ide.findusages.view.TabbedUsagesTool; import java.util.List; import java.util.ArrayList; import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindowAnchor; import jetbrains.mps.ide.findusages.view.UsagesView; import java.util.Collection; import jetbrains.mps.lang.script.runtime.RefactoringScript; import org.jetbrains.mps.openapi.module.SearchScope; import jetbrains.mps.ide.ThreadUtils; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.progress.ProgressIndicator; import jetbrains.mps.ide.findusages.model.IResultProvider; import jetbrains.mps.ide.findusages.view.FindUtils; import jetbrains.mps.ide.findusages.model.SearchQuery; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import jetbrains.mps.ide.findusages.model.SearchResults; import jetbrains.mps.ide.project.ProjectHelper; import jetbrains.mps.progress.ProgressMonitorAdapter; import javax.swing.JOptionPane; import com.intellij.ui.content.Content; import jetbrains.mps.ide.findusages.view.icons.IconManager; public class MigrationScriptsTool extends TabbedUsagesTool { private List<MigrationScriptsView> myViews = new ArrayList<MigrationScriptsView>(); public MigrationScriptsTool(Project project) { super(project, "Migration", -1, null, ToolWindowAnchor.BOTTOM, true); } @Override protected UsagesView getUsagesView(int index) { return myViews.get(index).getUsagesView(); } @Override protected void onRemove(int index) { myViews.remove(index); } @Override protected boolean forceCloseOnReload() { return true; } public void startMigration(final Collection<RefactoringScript> scripts, final SearchScope scope) { ThreadUtils.assertEDT(); ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { ProgressManager.getInstance().run(new Task.Modal(getProject(), "Searching", true) { @Override public void run(@NotNull final ProgressIndicator indicator) { indicator.setIndeterminate(true); final MigrationScriptFinder finder = new MigrationScriptFinder(scripts); final IResultProvider provider = FindUtils.makeProvider(finder); final SearchQuery query = new SearchQuery(scope); final Wrappers._T<SearchResults> results = new Wrappers._T<SearchResults>(); ProjectHelper.fromIdeaProject(getProject()).getRepository().getModelAccess().runReadAction(new Runnable() { public void run() { results.value = FindUtils.getSearchResults(new ProgressMonitorAdapter(indicator), query, provider); } }); ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { if (results.value.getSearchResults().isEmpty()) { JOptionPane.showMessageDialog(getContentManager().getComponent(), "No applicable nodes found", "Migration Scripts", JOptionPane.INFORMATION_MESSAGE); } else { int count = myViews.size(); for (int i = 0; i < count; i++) { closeTab(0); } addTab(finder, provider, query); openTool(true); } } }); } }); } }); } /*package*/ void addTab(final MigrationScriptFinder finder, final IResultProvider provider, final SearchQuery query) { ThreadUtils.assertEDT(); MigrationScriptsView view = new MigrationScriptsView(finder, provider, query, MigrationScriptsTool.this, getProject()) { @Override public void close() { int index = myViews.indexOf(this); closeTab(index); } }; myViews.add(view); String tabName = " "; Content content = addContent(view.getComponent(), tabName, IconManager.getIconForIHolder(query.getObjectHolder()), false); getContentManager().setSelectedContent(content); } public int getPriority() { return -1; } @Override public Project getProject() { return super.getProject(); } }