package jetbrains.mps.ide.java.workbench.actions; /*Generated by MPS */ import jetbrains.mps.workbench.action.BaseAction; import javax.swing.Icon; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import jetbrains.mps.project.structure.modules.ModuleDescriptor; import jetbrains.mps.project.AbstractModule; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.internal.collections.runtime.MapSequence; import org.jetbrains.annotations.NotNull; import jetbrains.mps.ide.actions.MPSCommonDataKeys; import jetbrains.mps.project.MPSProject; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import java.util.List; import jetbrains.mps.vfs.IFile; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.vfs.FileSystem; import jetbrains.mps.ide.java.newparser.JavaToMpsConverter; import jetbrains.mps.ide.messages.MessagesViewTool; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.ide.java.newparser.JavaConvertUtil; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.progress.ProgressIndicator; import jetbrains.mps.progress.ProgressMonitorAdapter; import jetbrains.mps.ide.java.newparser.JavaParseException; import java.io.IOException; import com.intellij.openapi.application.ApplicationManager; import jetbrains.mps.ide.projectPane.ProjectPane; public class MigrateSourcesToMPS_Action extends BaseAction { private static final Icon ICON = null; public MigrateSourcesToMPS_Action() { super("Migrate Sources to MPS", "", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(true); } @Override public boolean isDumbAware() { return true; } @Override public boolean isApplicable(AnActionEvent event, final Map<String, Object> _params) { ModuleDescriptor moduleDescr = ((AbstractModule) ((SModule) MapSequence.fromMap(_params).get("module"))).getModuleDescriptor(); return moduleDescr != null && !(moduleDescr.getSourcePaths().isEmpty()); } @Override public void doUpdate(@NotNull AnActionEvent event, final Map<String, Object> _params) { this.setEnabledState(event.getPresentation(), this.isApplicable(event, _params)); } @Override protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) { if (!(super.collectActionData(event, _params))) { return false; } { SModule p = event.getData(MPSCommonDataKeys.MODULE); MapSequence.fromMap(_params).put("module", p); if (p == null) { return false; } } { MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT); MapSequence.fromMap(_params).put("project", p); if (p == null) { return false; } } { Project p = event.getData(CommonDataKeys.PROJECT); MapSequence.fromMap(_params).put("ideaProject", p); if (p == null) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { ModuleDescriptor moduleDescr = ((AbstractModule) ((SModule) MapSequence.fromMap(_params).get("module"))).getModuleDescriptor(); if (moduleDescr == null || moduleDescr.getSourcePaths().isEmpty()) { return; } List<IFile> sourcePaths = ListSequence.fromList(new ArrayList<IFile>()); for (String path : moduleDescr.getSourcePaths()) { ListSequence.fromList(sourcePaths).addElement(FileSystem.getInstance().getFileByPath(path)); } final JavaToMpsConverter parser = new JavaToMpsConverter(((SModule) MapSequence.fromMap(_params).get("module")), ((MPSProject) MapSequence.fromMap(_params).get("project")).getRepository(), ((Project) MapSequence.fromMap(_params).get("ideaProject")).getComponent(MessagesViewTool.class).newHandler()); final List<IFile> filesToParse = Sequence.fromIterable(JavaConvertUtil.flattenDirs(sourcePaths)).toListSequence(); ProgressManager.getInstance().run(new Task.Modal(null, "Convert to MPS", false) { public void run(@NotNull ProgressIndicator indicator) { try { parser.convertToMps(filesToParse, new ProgressMonitorAdapter(indicator)); } catch (JavaParseException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } }); ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { parser.saveAll(); } }); // workaround for project pane not rebuilding itself when a model has been added // not in a command but in a write action ProjectPane.getInstance(((MPSProject) MapSequence.fromMap(_params).get("project"))).rebuild(); moduleDescr.getSourcePaths().clear(); } }