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