package liveplugin.toolwindow; import com.intellij.CommonBundle; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import liveplugin.IDEUtil; import liveplugin.Icons; import liveplugin.toolwindow.util.PluginsIO; import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.util.Collection; import java.util.List; import static com.intellij.util.containers.ContainerUtil.map; class DeletePluginAction extends AnAction implements DumbAware { private static final Logger LOG = Logger.getInstance(DeletePluginAction.class); public DeletePluginAction() { super("Delete Plugin", "Delete Plugin", Icons.DELETE_PLUGIN_ICON); } private static boolean userDoesNotWantToRemovePlugins(Collection<VirtualFile> pluginRoots, Project project) { List<String> pluginIds = map(pluginRoots, virtualFile -> virtualFile.getName()); String message; if (pluginIds.size() == 1) { message = "Do you want to delete plugin \"" + pluginIds.get(0) + "\"?"; } else if (pluginIds.size() == 2) { message = "Do you want to delete plugin \"" + pluginIds.get(0) + "\" and \"" + pluginIds.get(1) + "\"?"; } else { message = "Do you want to delete plugins \"" + StringUtil.join(pluginIds, ", ") + "\"?"; } int answer = Messages.showOkCancelDialog( project, message, "Delete", ApplicationBundle.message("button.delete"), CommonBundle.getCancelButtonText(), Messages.getQuestionIcon() ); return answer != Messages.OK; } @Override public void actionPerformed(@NotNull AnActionEvent event) { VirtualFile[] files = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(event.getDataContext()); if (files == null || files.length == 0) return; Collection<VirtualFile> pluginRoots = PluginToolWindowManager.PluginToolWindow.findPluginRootsFor(files); if (userDoesNotWantToRemovePlugins(pluginRoots, event.getProject())) return; for (VirtualFile pluginRoot : pluginRoots) { try { PluginsIO.delete(pluginRoot.getPath()); } catch (IOException e) { Project project = event.getProject(); if (project != null) { IDEUtil.showErrorDialog(project, "Error deleting plugin \"" + pluginRoot.getPath(), "Delete Plugin"); } LOG.error(e); } } RefreshPluginsPanelAction.refreshPluginTree(); } @Override public void update(@NotNull AnActionEvent event) { VirtualFile[] files = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(event.getDataContext()); boolean enabled = true; if (files == null || files.length == 0) enabled = false; else if (PluginToolWindowManager.PluginToolWindow.findPluginRootsFor(files).isEmpty()) enabled = false; event.getPresentation().setEnabled(enabled); } }