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