package jetbrains.mps.ide.devkit.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 java.awt.Frame;
import jetbrains.mps.ide.actions.MPSCommonDataKeys;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import jetbrains.mps.util.PathManager;
import jetbrains.mps.util.FileUtil;
import javax.swing.JOptionPane;
import java.io.IOException;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.vfs.VirtualFile;
import jetbrains.mps.ide.vfs.VirtualFileUtils;
import java.util.regex.Pattern;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.fileChooser.FileChooserDialog;
import com.intellij.openapi.fileChooser.FileChooserFactory;
public class InstallIDEAPlugin_Action extends BaseAction {
private static final Icon ICON = null;
public InstallIDEAPlugin_Action() {
super("Install IntelliJ IDEA Plugin", "", ICON);
this.setIsAlwaysVisible(false);
this.setExecuteOutsideCommand(true);
}
@Override
public boolean isDumbAware() {
return true;
}
@Override
protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) {
if (!(super.collectActionData(event, _params))) {
return false;
}
{
Frame p = event.getData(MPSCommonDataKeys.FRAME);
if (p == null) {
return false;
}
}
return true;
}
@Override
public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) {
File pluginFile = new File(new File(PathManager.getHomePath(), "plugin"), "MPSPlugin.jar");
File targetDir = InstallIDEAPlugin_Action.this.getTargetDir(event);
if (targetDir == null) {
return;
}
if (!(targetDir.exists())) {
targetDir.mkdirs();
}
try {
FileUtil.copyFileChecked(pluginFile, targetDir);
JOptionPane.showMessageDialog(event.getData(MPSCommonDataKeys.FRAME), "Plugin Installed\nYou should restart IDEA before using plugin");
} catch (IOException e) {
JOptionPane.showMessageDialog(event.getData(MPSCommonDataKeys.FRAME), "Failed to install plugin : " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
private File getTargetDir(final AnActionEvent event) {
File targetIdeaInstallDir = InstallIDEAPlugin_Action.this.getTargetIdeaInstallDir(event);
if (targetIdeaInstallDir == null) {
return null;
}
if (SystemInfo.isMac) {
return targetIdeaInstallDir;
}
return new File(targetIdeaInstallDir, "config" + File.separator + "plugins");
}
private File getTargetIdeaInstallDir(final AnActionEvent event) {
boolean isMac = SystemInfo.isMac;
String userHome = System.getProperty("user.home");
String ideaConfigRootPath = (isMac ? userHome + File.separator + "Library" + File.separator + "Application Support" : userHome);
final VirtualFile ideaConfigRoot = VirtualFileUtils.getVirtualFile(ideaConfigRootPath);
final Pattern namePattern = (isMac ? REGEXP_gyxeh4_a0a4a7_0 : REGEXP_gyxeh4_a0a4a7);
List<VirtualFile> existingIdeaConfigs = ListSequence.fromList(new ArrayList<VirtualFile>());
for (VirtualFile child : ideaConfigRoot.getChildren()) {
if (child.isDirectory()) {
if (namePattern.matcher(child.getName()).matches()) {
ListSequence.fromList(existingIdeaConfigs).addElement(child);
}
}
}
if (ListSequence.fromList(existingIdeaConfigs).isEmpty()) {
JOptionPane.showMessageDialog(event.getData(MPSCommonDataKeys.FRAME), "IntelliJ IDEA installation was not found", "Cannot install plugin", JOptionPane.ERROR_MESSAGE);
return null;
} else if (ListSequence.fromList(existingIdeaConfigs).count() == 1) {
return VirtualFileUtils.toFile(ListSequence.fromList(existingIdeaConfigs).first());
}
FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false) {
@Override
public boolean isFileVisible(VirtualFile file, boolean b) {
if (!(super.isFileVisible(file, b))) {
return false;
}
return ideaConfigRoot.equals(file.getParent()) && namePattern.matcher(file.getName()).matches();
}
};
descriptor.setTitle("Select IntelliJ IDEA configuration folder");
descriptor.setRoots(ideaConfigRoot);
String oldShowHiddenValue = PropertiesComponent.getInstance().getValue("FileChooser.showHiddens");
PropertiesComponent.getInstance().setValue("FileChooser.showHiddens", Boolean.TRUE.toString());
FileChooserDialog dialog = FileChooserFactory.getInstance().createFileChooser(descriptor, null, event.getData(MPSCommonDataKeys.FRAME));
VirtualFile[] files = dialog.choose(ideaConfigRoot, null);
PropertiesComponent.getInstance().setValue("FileChooser.showHiddens", oldShowHiddenValue);
assert files.length <= 1;
return (files.length == 0 ? null : VirtualFileUtils.toFile(files[0]));
}
private static Pattern REGEXP_gyxeh4_a0a4a7 = Pattern.compile("(?:\\.IntelliJIdea.*)|(?:\\.IdeaIC.*)", 0);
private static Pattern REGEXP_gyxeh4_a0a4a7_0 = Pattern.compile("(?:IntelliJIdea.*)|(?:IdeaIC.*)", 0);
}