package com.jetbrains.lang.dart.ide.errorTreeView;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindowManager;
import com.jetbrains.lang.dart.DartBundle;
import com.jetbrains.lang.dart.analyzer.DartAnalysisServerService;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class AnalysisServerStatusAction extends DumbAwareAction {
private static final Icon STATUS_GOOD = AllIcons.Process.State.GreenOK;
private static final Icon STATUS_UNKNOWN = AllIcons.Process.State.YellowStr;
private static final Icon STATUS_BAD = AllIcons.Process.State.RedExcl;
public AnalysisServerStatusAction() {
super(DartBundle.message("analysis.server.status.good.text"), DartBundle.message("analysis.server.status.good.desc"), STATUS_GOOD);
}
@Override
public void actionPerformed(AnActionEvent e) {
final Project project = e.getProject();
if (project == null) return;
DartFeedbackBuilder builder = DartFeedbackBuilder.getFeedbackBuilder();
if (builder.showQuery(null)) {
builder.sendFeedback(project, null, null);
}
}
public void update(AnActionEvent e) {
Presentation presentation = e.getPresentation();
final Project project = e.getProject();
if (isApplicable(project)) {
presentation.setEnabledAndVisible(true);
updateStatus(project, presentation);
}
else {
presentation.setEnabledAndVisible(false);
}
}
private static void updateStatus(@NotNull final Project project, @NotNull final Presentation presentation) {
DartAnalysisServerService das = DartAnalysisServerService.getInstance(project);
Icon statusIcon;
String statusText;
String statusDesc;
if (das.isServerProcessActive()) {
if (das.isServerResponsive()) {
statusIcon = STATUS_GOOD;
statusText = DartBundle.message("analysis.server.status.good.text");
statusDesc = DartBundle.message("analysis.server.status.good.desc");
}
else {
statusIcon = STATUS_UNKNOWN;
statusText = DartBundle.message("analysis.server.status.unknown.text");
statusDesc = DartBundle.message("analysis.server.status.unknown.desc");
}
}
else {
statusIcon = STATUS_BAD;
statusText = DartBundle.message("analysis.server.status.bad.text");
statusDesc = DartBundle.message("analysis.server.status.bad.desc");
}
presentation.setIcon(statusIcon);
presentation.setText(statusText);
presentation.setDescription(statusDesc);
}
private static boolean isApplicable(@Nullable final Project project) {
return project != null && ToolWindowManager.getInstance(project).getToolWindow(DartProblemsView.TOOLWINDOW_ID) != null;
}
}