From 0c72506ba552d7bbc44c9eb1268d87d1da9e9844 Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Wed, 8 Feb 2017 13:19:43 +0300 Subject: [PATCH] IDEA-155345 Show live port for Spring Boot apps in Run Dashboard --- .../dashboard/DashboardListener.java | 23 +++++++++++++++++++ .../DashboardRunConfigurationStatus.java | 2 ++ .../dashboard/RuntimeDashboardManager.java | 4 ++++ .../dashboard/RuntimeDashboardContent.java | 21 ++++++++++++++++- .../dashboard/tree/RunConfigurationNode.java | 3 ++- .../src/messages/ExecutionBundle.properties | 1 + .../util/resources/misc/registry.properties | 2 ++ 7 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 platform/lang-api/src/com/intellij/execution/dashboard/DashboardListener.java diff --git a/platform/lang-api/src/com/intellij/execution/dashboard/DashboardListener.java b/platform/lang-api/src/com/intellij/execution/dashboard/DashboardListener.java new file mode 100644 index 000000000000..c59d3b795a4c --- /dev/null +++ b/platform/lang-api/src/com/intellij/execution/dashboard/DashboardListener.java @@ -0,0 +1,23 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.execution.dashboard; + +/** + * @author konstantin.aleev + */ +public interface DashboardListener { + void contentChanged(boolean withStructure); +} diff --git a/platform/lang-api/src/com/intellij/execution/dashboard/DashboardRunConfigurationStatus.java b/platform/lang-api/src/com/intellij/execution/dashboard/DashboardRunConfigurationStatus.java index d0783e37506c..b0dedda89c40 100644 --- a/platform/lang-api/src/com/intellij/execution/dashboard/DashboardRunConfigurationStatus.java +++ b/platform/lang-api/src/com/intellij/execution/dashboard/DashboardRunConfigurationStatus.java @@ -30,6 +30,8 @@ public class DashboardRunConfigurationStatus { ExecutionBundle.message("runtime.dashboard.stopped.group.name"), AllIcons.Actions.Suspend); public static final DashboardRunConfigurationStatus FAILED = new DashboardRunConfigurationStatus( ExecutionBundle.message("runtime.dashboard.failed.group.name"), AllIcons.General.Error); + public static final DashboardRunConfigurationStatus STARTING = new DashboardRunConfigurationStatus( + ExecutionBundle.message("runtime.dashboard.starting.group.name"), AllIcons.Process.Step_4); private final String myName; private final Icon myIcon; diff --git a/platform/lang-api/src/com/intellij/execution/dashboard/RuntimeDashboardManager.java b/platform/lang-api/src/com/intellij/execution/dashboard/RuntimeDashboardManager.java index 519265f43ec4..8f8dcaf311b8 100644 --- a/platform/lang-api/src/com/intellij/execution/dashboard/RuntimeDashboardManager.java +++ b/platform/lang-api/src/com/intellij/execution/dashboard/RuntimeDashboardManager.java @@ -18,6 +18,7 @@ package com.intellij.execution.dashboard; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.ui.content.ContentManager; +import com.intellij.util.messages.Topic; import javax.swing.*; @@ -25,6 +26,9 @@ import javax.swing.*; * @author konstantin.aleev */ public interface RuntimeDashboardManager { + Topic DASHBOARD_TOPIC = + Topic.create("runtime dashboard", DashboardListener.class, Topic.BroadcastDirection.TO_PARENT); + static RuntimeDashboardManager getInstance(Project project) { return ServiceManager.getService(project, RuntimeDashboardManager.class); } diff --git a/platform/lang-impl/src/com/intellij/execution/dashboard/RuntimeDashboardContent.java b/platform/lang-impl/src/com/intellij/execution/dashboard/RuntimeDashboardContent.java index 67b078fb7369..e7d4d96e6d80 100644 --- a/platform/lang-impl/src/com/intellij/execution/dashboard/RuntimeDashboardContent.java +++ b/platform/lang-impl/src/com/intellij/execution/dashboard/RuntimeDashboardContent.java @@ -30,6 +30,7 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.util.Comparing; @@ -39,6 +40,7 @@ import com.intellij.ui.components.JBPanelWithEmptyText; import com.intellij.ui.content.*; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.ObjectUtils; +import com.intellij.util.messages.MessageBusConnection; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -241,7 +243,8 @@ public class RuntimeDashboardContent extends JPanel implements TreeContent, Disp updateTreeIfNeeded(settings); } }); - myProject.getMessageBus().connect(myProject).subscribe(ExecutionManager.EXECUTION_TOPIC, new ExecutionListener() { + MessageBusConnection connection = myProject.getMessageBus().connect(myProject); + connection.subscribe(ExecutionManager.EXECUTION_TOPIC, new ExecutionListener() { @Override public void processStarted(@NotNull String executorId, @NotNull ExecutionEnvironment env, final @NotNull ProcessHandler handler) { updateTreeIfNeeded(env.getRunnerAndConfigurationSettings()); @@ -255,6 +258,22 @@ public class RuntimeDashboardContent extends JPanel implements TreeContent, Disp updateTreeIfNeeded(env.getRunnerAndConfigurationSettings()); } }); + connection.subscribe(RuntimeDashboardManager.DASHBOARD_TOPIC, new DashboardListener() { + @Override + public void contentChanged(boolean withStructure) { + updateTree(withStructure); + } + }); + connection.subscribe(DumbService.DUMB_MODE, new DumbService.DumbModeListener() { + @Override + public void enteredDumbMode() { + } + + @Override + public void exitDumbMode() { + updateTree(false); + } + }); } private void updateTreeIfNeeded(@Nullable RunnerAndConfigurationSettings settings) { diff --git a/platform/lang-impl/src/com/intellij/execution/dashboard/tree/RunConfigurationNode.java b/platform/lang-impl/src/com/intellij/execution/dashboard/tree/RunConfigurationNode.java index 37213bbb3c42..5327462d79d4 100644 --- a/platform/lang-impl/src/com/intellij/execution/dashboard/tree/RunConfigurationNode.java +++ b/platform/lang-impl/src/com/intellij/execution/dashboard/tree/RunConfigurationNode.java @@ -27,6 +27,7 @@ import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.ui.RowIcon; +import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.content.Content; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -62,7 +63,7 @@ class RunConfigurationNode extends AbstractTreeNode