package jetbrains.mps.ide.java.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 org.jetbrains.mps.openapi.module.SModule; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.internal.collections.runtime.MapSequence; import jetbrains.mps.extapi.module.TransientSModule; import org.jetbrains.annotations.NotNull; import java.awt.Frame; import jetbrains.mps.ide.actions.MPSCommonDataKeys; import org.jetbrains.mps.openapi.model.EditableSModel; import jetbrains.mps.project.MPSProject; import com.intellij.openapi.project.Project; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDialog; import com.intellij.openapi.fileChooser.FileChooserFactory; import com.intellij.openapi.vfs.VirtualFile; 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.internal.collections.runtime.Sequence; import jetbrains.mps.ide.java.newparser.JavaConvertUtil; import jetbrains.mps.ide.java.newparser.JavaToMpsConverter; import jetbrains.mps.ide.messages.MessagesViewTool; 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; public class GetModelContentsFromSource_Action extends BaseAction { private static final Icon ICON = null; public GetModelContentsFromSource_Action() { super("Get Model Contents from Source", "", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(true); } @Override public boolean isDumbAware() { return true; } @Override public boolean isApplicable(AnActionEvent event, final Map<String, Object> _params) { SModule module = ((SModel) MapSequence.fromMap(_params).get("model")).getModule(); if (module == null) { return false; } return !(module instanceof TransientSModule); } @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; } { Frame p = event.getData(MPSCommonDataKeys.FRAME); MapSequence.fromMap(_params).put("frame", p); if (p == null) { return false; } } { SModel p = event.getData(MPSCommonDataKeys.MODEL); MapSequence.fromMap(_params).put("model", p); if (p == null) { return false; } if (!(p instanceof EditableSModel) || p.isReadOnly()) { return false; } } { MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT); MapSequence.fromMap(_params).put("mpsProject", p); if (p == null) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { Project ideaProject = ((MPSProject) MapSequence.fromMap(_params).get("mpsProject")).getProject(); FileChooserDescriptor descriptor = new FileChooserDescriptor(true, true, false, false, false, true); FileChooserDialog dialog = FileChooserFactory.getInstance().createFileChooser(descriptor, ideaProject, ((Frame) MapSequence.fromMap(_params).get("frame"))); VirtualFile[] chosen = dialog.choose(null, ideaProject); if (chosen.length == 0) { return; } List<IFile> chosenIFiles = ListSequence.fromList(new ArrayList<IFile>(chosen.length)); for (VirtualFile vfile : chosen) { ListSequence.fromList(chosenIFiles).addElement(FileSystem.getInstance().getFileByPath(vfile.getPath())); } final List<IFile> ifilesToParse = Sequence.fromIterable(JavaConvertUtil.flattenDirs(chosenIFiles)).toListSequence(); final JavaToMpsConverter parser = new JavaToMpsConverter(((SModel) MapSequence.fromMap(_params).get("model")), ((MPSProject) MapSequence.fromMap(_params).get("mpsProject")).getRepository(), ideaProject.getComponent(MessagesViewTool.class).newHandler()); ProgressManager.getInstance().run(new Task.Modal(null, "Convert to MPS", false) { public void run(@NotNull ProgressIndicator indicator) { try { parser.convertToMps(ifilesToParse, new ProgressMonitorAdapter(indicator)); } catch (JavaParseException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } }); } }