package krasa.grepconsole.stats; import java.awt.*; import javax.swing.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.intellij.execution.impl.ConsoleViewImpl; import com.intellij.execution.ui.ConsoleView; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.StatusBar; import com.intellij.openapi.wm.StatusBarWidget; import com.intellij.openapi.wm.WindowManager; import krasa.grepconsole.filter.GrepHighlightFilter; import krasa.grepconsole.filter.support.GrepProcessor; import krasa.grepconsole.model.Profile; import krasa.grepconsole.plugin.GrepConsoleApplicationComponent; import krasa.grepconsole.plugin.ServiceManager; /** * @author Vojtech Krasa */ public class StatisticsManager { private static final Logger log = Logger.getInstance(StatisticsManager.class.getName()); public static void createStatisticsPanels(final ConsoleViewImpl console) { GrepHighlightFilter highlightFilter = ServiceManager.getInstance().getHighlightFilter(console); if (highlightFilter == null) { return; } Profile profile = GrepConsoleApplicationComponent.getInstance().getProfile(); if (profile.isShowStatsInStatusBarByDefault()) { createStatusBarPanel(console, highlightFilter); } if (profile.isShowStatsInConsoleByDefault()) { createConsolePanel(console, highlightFilter); } } public static void resetStatisticsPanels(ConsoleViewImpl consoleViewImpl) { resetConsolePanel(consoleViewImpl); resetStatusBarPanel(consoleViewImpl); } private static void resetStatusBarPanel(ConsoleViewImpl console) { GrepConsoleStatusBarWidget statusBarPanel = getStatusBarPanel(console); if (statusBarPanel != null) { StatisticsStatusBarPanel statisticsPanel = statusBarPanel.getStatisticsPanel(); statisticsPanel.reset(); if (!statisticsPanel.hasItems()) { statusBarPanel.dispose(); } else { statisticsPanel.revalidate(); } } else { Profile profile = GrepConsoleApplicationComponent.getInstance().getProfile(); GrepHighlightFilter highlightFilter = ServiceManager.getInstance().getHighlightFilter(console); if (highlightFilter != null && profile.isShowStatsInStatusBarByDefault()) { createStatusBarPanel(console, highlightFilter); } } } public static void createStatusBarPanel(@NotNull ConsoleViewImpl consoleView, @NotNull GrepHighlightFilter highlightFilter) { if (!highlightFilter.hasGrepProcessorsForStatusBar()) { return; } final Project project = consoleView.getProject(); final StatusBar statusBar = WindowManager.getInstance().getIdeFrame(project).getStatusBar(); final GrepConsoleStatusBarWidget statusBarWidget = new GrepConsoleStatusBarWidget(consoleView, highlightFilter); statusBar.addWidget(statusBarWidget); statusBar.getComponent().revalidate(); Disposer.register(consoleView, statusBarWidget); } public static void resetConsolePanel(ConsoleViewImpl consoleView) { StatisticsConsolePanel statisticsConsolePanel = getConsolePanel(consoleView); if (statisticsConsolePanel != null) { statisticsConsolePanel.reset(); if (!statisticsConsolePanel.hasItems()) { statisticsConsolePanel.dispose(); } else { statisticsConsolePanel.revalidate(); } } else { Profile profile = GrepConsoleApplicationComponent.getInstance().getProfile(); GrepHighlightFilter highlightFilter = ServiceManager.getInstance().getHighlightFilter(consoleView); if (profile.isShowStatsInConsoleByDefault() && highlightFilter != null) { createConsolePanel(consoleView, highlightFilter); } } } public static void createConsolePanel(@NotNull ConsoleViewImpl consoleView, @NotNull GrepHighlightFilter highlightFilter) { if (!highlightFilter.hasGrepProcessorsForConsolePanel()) { return; } StatisticsConsolePanel statisticsConsolePanel = new StatisticsConsolePanel(highlightFilter, consoleView); if (statisticsConsolePanel.hasItems()) { consoleView.add(statisticsConsolePanel, BorderLayout.SOUTH); consoleView.revalidate(); Disposer.register(consoleView, statisticsConsolePanel); } else { statisticsConsolePanel.dispose(); } } @Nullable public static GrepConsoleStatusBarWidget getStatusBarPanel(@NotNull ConsoleViewImpl consoleView) { final Project project = consoleView.getProject(); IdeFrame ideFrame = WindowManager.getInstance().getIdeFrame(project); if (ideFrame == null) { return null; } StatusBar statusBar = ideFrame.getStatusBar(); StatusBarWidget widget = statusBar.getWidget(GrepConsoleStatusBarWidget.createId(consoleView)); return (GrepConsoleStatusBarWidget) widget; } @Nullable public static StatisticsConsolePanel getConsolePanel(JPanel consolePanel) { final BorderLayout layout = (BorderLayout) consolePanel.getLayout(); final Component layoutComponent = layout.getLayoutComponent(BorderLayout.SOUTH); return (StatisticsConsolePanel) layoutComponent; } public static void clearCount(ConsoleView console) { final GrepHighlightFilter highlightFilter = ServiceManager.getInstance().getHighlightFilter(console); clearCount(highlightFilter); } public static void clearCount(@Nullable GrepHighlightFilter highlightFilter) { if (highlightFilter != null) { for (GrepProcessor grepProcessor : highlightFilter.getGrepProcessors()) { grepProcessor.resetMatches(); } } } }