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