Skip to content

Commit 7c1b2c6

Browse files
authored
Fixes issues in v3.48.0 end game (#4886)
* Close AzureComboBox dropdown when click extension button * Read expose port from docker file during docker run
1 parent 16a2e0f commit 7c1b2c6

File tree

3 files changed

+30
-11
lines changed

3 files changed

+30
-11
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/common/AzureComboBox.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,12 @@ protected JTextField createEditorComponent() {
270270
}
271271

272272
protected ExtendableTextComponent.Extension getExtension() {
273-
return AzureComboBox.this.getExtension();
273+
final ExtendableTextComponent.Extension extension = AzureComboBox.this.getExtension();
274+
return extension == null ? null : ExtendableTextComponent.Extension.create(
275+
extension.getIcon(true), extension.getTooltip(), () -> {
276+
AzureComboBox.this.hidePopup();
277+
extension.getActionOnClick().run();
278+
});
274279
}
275280
}
276281

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/intellij/runner/container/dockerhost/DockerHostRunState.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@
2222

2323
package com.microsoft.intellij.runner.container.dockerhost;
2424

25-
import static com.microsoft.azuretools.telemetry.TelemetryConstants.DEPLOY_WEBAPP_DOCKERLOCAL;
26-
import static com.microsoft.azuretools.telemetry.TelemetryConstants.WEBAPP;
27-
2825
import com.intellij.execution.process.ProcessEvent;
2926
import com.intellij.execution.process.ProcessListener;
3027
import com.intellij.execution.process.ProcessOutputTypes;
@@ -41,22 +38,29 @@
4138
import com.microsoft.intellij.util.MavenRunTaskUtil;
4239
import com.spotify.docker.client.DockerClient;
4340
import com.spotify.docker.client.messages.Container;
44-
4541
import com.spotify.docker.client.shaded.com.google.common.collect.ImmutableList;
42+
import org.apache.commons.lang.StringUtils;
4643
import org.jetbrains.annotations.NotNull;
4744

4845
import java.io.FileNotFoundException;
4946
import java.net.URI;
5047
import java.nio.file.Files;
5148
import java.nio.file.Path;
5249
import java.nio.file.Paths;
50+
import java.util.Arrays;
5351
import java.util.Map;
52+
import java.util.regex.Matcher;
53+
import java.util.regex.Pattern;
54+
55+
import static com.microsoft.azuretools.telemetry.TelemetryConstants.DEPLOY_WEBAPP_DOCKERLOCAL;
56+
import static com.microsoft.azuretools.telemetry.TelemetryConstants.WEBAPP;
5457

5558
public class DockerHostRunState extends AzureRunProfileState<String> {
59+
private static final String DEFAULT_PORT = Constant.TOMCAT_SERVICE_PORT;
60+
private static final Pattern PORT_PATTERN = Pattern.compile("EXPOSE\\s+(\\d+).*");
5661
private static final String DOCKER_PING_ERROR = "Failed to connect docker host: %s\nIs Docker installed and running?";
5762
private final DockerHostRunSetting dataModel;
5863

59-
6064
public DockerHostRunState(Project project, DockerHostRunSetting dataModel) {
6165
super(project);
6266
this.dataModel = dataModel;
@@ -140,9 +144,11 @@ public void onTextAvailable(ProcessEvent processEvent, Key key) {
140144
);
141145

142146
// docker run
147+
final String port = getPortFromDockerfile(content);
143148
String containerId = DockerUtil.createContainer(
144149
docker,
145-
String.format("%s:%s", dataModel.getImageName(), dataModel.getTagName())
150+
String.format("%s:%s", dataModel.getImageName(), dataModel.getTagName()),
151+
port
146152
);
147153
runningContainerId[0] = containerId;
148154
Container container = DockerUtil.runContainer(docker, containerId);
@@ -152,7 +158,7 @@ public void onTextAvailable(ProcessEvent processEvent, Key key) {
152158
ImmutableList<Container.PortMapping> ports = container.ports();
153159
if (ports != null) {
154160
for (Container.PortMapping portMapping : ports) {
155-
if (Constant.TOMCAT_SERVICE_PORT.equals(String.valueOf(portMapping.privatePort()))) {
161+
if (StringUtils.equals(port, String.valueOf(portMapping.privatePort()))) {
156162
publicPort = String.valueOf(portMapping.publicPort());
157163
}
158164
}
@@ -182,4 +188,12 @@ protected void updateTelemetryMap(@NotNull Map<String, String> telemetryMap) {
182188
telemetryMap.put("FileType", "");
183189
}
184190
}
191+
192+
private String getPortFromDockerfile(@NotNull String dockerFileContent) {
193+
final Matcher result = Arrays.stream(dockerFileContent.split("\\R+"))
194+
.map(value -> PORT_PATTERN.matcher(value))
195+
.filter(Matcher::matches)
196+
.findFirst().orElse(null);
197+
return result == null ? DEFAULT_PORT : result.group(1);
198+
}
185199
}

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/intellij/runner/container/utils/DockerUtil.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,20 @@ public static void createDockerFile(String basePath, String folderName, String f
6666
/**
6767
* create container with specified ImageName:TagName.
6868
*/
69-
public static String createContainer(DockerClient docker, String imageNameWithTag)
69+
public static String createContainer(DockerClient docker, String imageNameWithTag, String port)
7070
throws DockerException, InterruptedException {
7171
final Map<String, List<PortBinding>> portBindings = new HashMap<>();
7272
List<PortBinding> randomPort = new ArrayList<>();
7373
PortBinding randomBinding = PortBinding.randomPort("0.0.0.0");
7474
randomPort.add(randomBinding);
75-
portBindings.put(Constant.TOMCAT_SERVICE_PORT, randomPort);
75+
portBindings.put(port, randomPort);
7676

7777
final HostConfig hostConfig = HostConfig.builder().portBindings(portBindings).build();
7878

7979
final ContainerConfig config = ContainerConfig.builder()
8080
.hostConfig(hostConfig)
8181
.image(imageNameWithTag)
82-
.exposedPorts(Constant.TOMCAT_SERVICE_PORT)
82+
.exposedPorts(port)
8383
.build();
8484
final ContainerCreation container = docker.createContainer(config);
8585
return container.id();

0 commit comments

Comments
 (0)