package krasa.grepconsole.integration;
import com.intellij.execution.actions.ConsoleActionsPostProcessor;
import com.intellij.execution.impl.ConsoleViewImpl;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.LangDataKeys;
import krasa.grepconsole.action.AddHighlightAction;
import krasa.grepconsole.action.OpenConsoleSettingsAction;
import krasa.grepconsole.grep.OpenGrepConsoleAction;
import krasa.grepconsole.plugin.ServiceManager;
import krasa.grepconsole.stats.StatisticsManager;
import krasa.grepconsole.stats.action.ShowHideStatisticsConsolePanelAction;
import krasa.grepconsole.stats.action.ShowHideStatisticsStatusBarPanelAction;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
public class GrepConsoleActionsPostProcessor extends ConsoleActionsPostProcessor {
@NotNull
@Override
public AnAction[] postProcess(@NotNull ConsoleView console, @NotNull AnAction[] actions) {
ServiceManager.getInstance().registerConsole(console);
if (console instanceof ConsoleViewImpl) {
StatisticsManager.createStatisticsPanels((com.intellij.execution.impl.ConsoleViewImpl) console);
}
ArrayList<AnAction> anActions = new ArrayList<>();
anActions.add(new OpenConsoleSettingsAction(console));
anActions.addAll(Arrays.asList(actions));
replaceClearAction(anActions);
return anActions.toArray(new AnAction[anActions.size()]);
}
/**
* not cached
*/
@NotNull
@Override
public AnAction[] postProcessPopupActions(@NotNull ConsoleView console, @NotNull AnAction[] actions) {
ServiceManager manager = ServiceManager.getInstance();
ArrayList<AnAction> anActions = new ArrayList<>();
anActions.add(new OpenGrepConsoleAction("Grep", "Open a new filter/grep console", null));
anActions.add(new AddHighlightAction("Add highlight", "Add highlight for this selected text", null));
if (manager.isRegistered(console)) {
anActions.add(new ShowHideStatisticsConsolePanelAction(console));
anActions.add(new ShowHideStatisticsStatusBarPanelAction(console));
} else {
anActions.add(new OpenConsoleSettingsAction(console));
}
anActions.addAll(Arrays.asList(super.postProcessPopupActions(console, actions)));
replaceClearAction(anActions);
return anActions.toArray(new AnAction[anActions.size()]);
}
private void replaceClearAction(ArrayList<AnAction> anActions) {
for (int i = 0; i < anActions.size(); i++) {
AnAction anAction = anActions.get(i);
if (anAction instanceof ConsoleViewImpl.ClearAllAction) {
anActions.set(i, clearAction());
}
}
}
private ConsoleViewImpl.ClearAllAction clearAction() {
return new ConsoleViewImpl.ClearAllAction() {
@Override
public void actionPerformed(AnActionEvent e) {
super.actionPerformed(e);
final ConsoleView consoleView = e.getData(LangDataKeys.CONSOLE_VIEW);
if (consoleView != null) {
try {
StatisticsManager.clearCount(consoleView);
} catch (Exception e1) {
// tough luck
}
}
}
};
}
}