Skip to content

Commit 727b630

Browse files
committed
Fix NPE in web app run configuration
1 parent d28f7ce commit 727b630

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/src/main/java/com/microsoft/azure/toolkit/intellij/webapp/runner/webappconfig/WebAppConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.intellij.openapi.options.SettingsEditor;
1717
import com.intellij.openapi.project.Project;
1818
import com.intellij.openapi.util.InvalidDataException;
19+
import com.intellij.openapi.util.WriteExternalException;
1920
import com.microsoft.azure.toolkit.intellij.common.AzureArtifact;
2021
import com.microsoft.azure.toolkit.intellij.common.AzureArtifactManager;
2122
import com.microsoft.azure.toolkit.intellij.common.AzureArtifactType;
@@ -84,6 +85,12 @@ public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEn
8485
return new WebAppRunState(getProject(), this);
8586
}
8687

88+
@Override
89+
public void writeExternal(Element element) throws WriteExternalException {
90+
element.getChildren().forEach(child -> element.removeChild(child.getName()));
91+
super.writeExternal(element);
92+
}
93+
8794
@Override
8895
public void readExternal(final Element element) throws InvalidDataException {
8996
super.readExternal(element);

PluginsAndFeatures/azure-toolkit-for-intellij/src/main/java/com/microsoft/azure/toolkit/intellij/webapp/runner/webappconfig/WebAppRunState.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.microsoft.azuretools.utils.WebAppUtils;
3030
import com.microsoft.intellij.RunProcessHandler;
3131
import org.apache.commons.collections4.MapUtils;
32+
import org.apache.commons.compress.utils.FileNameUtils;
3233
import org.apache.commons.lang3.StringUtils;
3334
import org.jetbrains.annotations.NotNull;
3435
import org.jetbrains.annotations.Nullable;
@@ -49,6 +50,7 @@
4950
import static com.microsoft.intellij.ui.messages.AzureBundle.message;
5051

5152
public class WebAppRunState extends AzureRunProfileState<IAppService> {
53+
private File artifact;
5254
private WebAppConfiguration webAppConfiguration;
5355
private final IntelliJWebAppSettingModel webAppSettingModel;
5456

@@ -65,14 +67,13 @@ public WebAppRunState(Project project, WebAppConfiguration webAppConfiguration)
6567
@Override
6668
@AzureOperation(name = "webapp.deploy_artifact", params = {"this.webAppConfiguration.getWebAppName()"}, type = AzureOperation.Type.ACTION)
6769
public IAppService executeSteps(@NotNull RunProcessHandler processHandler, @NotNull Operation operation) throws Exception {
68-
File file = new File(getTargetPath());
69-
if (!file.exists()) {
70-
throw new FileNotFoundException(message("webapp.deploy.error.noTargetFile", file.getAbsolutePath()));
70+
artifact = new File(getTargetPath());
71+
if (!artifact.exists()) {
72+
throw new FileNotFoundException(message("webapp.deploy.error.noTargetFile", artifact.getAbsolutePath()));
7173
}
72-
webAppConfiguration.setTargetName(file.getName());
7374
final IWebAppBase deployTarget = getOrCreateDeployTargetFromAppSettingModel(processHandler);
7475
updateApplicationSettings(deployTarget, processHandler);
75-
AzureWebAppMvpModel.getInstance().deployArtifactsToWebApp(deployTarget, file, webAppSettingModel.isDeployToRoot(), processHandler);
76+
AzureWebAppMvpModel.getInstance().deployArtifactsToWebApp(deployTarget, artifact, webAppSettingModel.isDeployToRoot(), processHandler);
7677
return deployTarget;
7778
}
7879

@@ -118,9 +119,8 @@ protected void onSuccess(IAppService result, @NotNull RunProcessHandler processH
118119
AzureUIRefreshCore.execute(new AzureUIRefreshEvent(AzureUIRefreshEvent.EventType.REFRESH, result));
119120
}
120121
updateConfigurationDataModel(result);
121-
int indexOfDot = webAppSettingModel.getTargetName().lastIndexOf(".");
122-
final String fileName = webAppSettingModel.getTargetName().substring(0, indexOfDot);
123-
final String fileType = webAppSettingModel.getTargetName().substring(indexOfDot + 1);
122+
final String fileName = FileNameUtils.getBaseName(artifact.getName());
123+
final String fileType = FileNameUtils.getExtension(artifact.getName());
124124
final String url = getUrl(result, fileName, fileType);
125125
processHandler.setText(message("appService.deploy.hint.succeed"));
126126
processHandler.setText("URL: " + url);

PluginsAndFeatures/azure-toolkit-for-intellij/src/main/java/com/microsoft/azure/toolkit/intellij/webapp/runner/webappconfig/slimui/WebAppDeployConfigurationPanel.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,10 @@ private synchronized void fillDeploymentSlots(List<IWebAppDeploymentSlot> slotLi
225225
@Override
226226
public void setValue(WebAppDeployRunConfigurationModel data) {
227227
// artifact
228-
Optional.ofNullable(data.getArtifactConfig()).map(config -> AzureArtifactManager.getInstance(this.project)
229-
.getAzureArtifactById(AzureArtifactType.valueOf(config.getArtifactType()), config.getArtifactIdentifier()))
228+
Optional.ofNullable(data.getArtifactConfig())
229+
.filter(config -> !StringUtils.isAnyEmpty(config.getArtifactIdentifier(), config.getArtifactType()))
230+
.map(config -> AzureArtifactManager.getInstance(this.project)
231+
.getAzureArtifactById(AzureArtifactType.valueOf(config.getArtifactType()), config.getArtifactIdentifier()))
230232
.ifPresent(artifact -> comboBoxArtifact.setArtifact(artifact));
231233
// web app
232234
Optional.ofNullable(data.getWebAppConfig()).ifPresent(webApp -> {

PluginsAndFeatures/azure-toolkit-for-intellij/src/main/java/com/microsoft/azure/toolkit/intellij/webapp/runner/webappconfig/slimui/WebAppSlimSettingPanel.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ protected JLabel getLblMavenProject() {
9191

9292
@Override
9393
protected void resetFromConfig(@NotNull WebAppConfiguration configuration) {
94+
if (StringUtils.isAllEmpty(configuration.getWebAppId(), configuration.getWebAppName())) {
95+
return;
96+
}
9497
final Subscription subscription = Subscription.builder().id(configuration.getSubscriptionId()).build();
9598
final ResourceGroup resourceGroup = configuration.isCreatingResGrp() ?
9699
new DraftResourceGroup(subscription, configuration.getResourceGroup()) :
@@ -104,9 +107,9 @@ protected void resetFromConfig(@NotNull WebAppConfiguration configuration) {
104107
AppServicePlanEntity.builder().id(configuration.getAppServicePlanId()).build();
105108
final DeploymentSlotConfig slotConfig = !configuration.isDeployToSlot() ? null :
106109
StringUtils.equals(configuration.getSlotName(), Constants.CREATE_NEW_SLOT) ?
107-
DeploymentSlotConfig.builder().name(configuration.getNewSlotName())
110+
DeploymentSlotConfig.builder().newCreate(true).name(configuration.getNewSlotName())
108111
.configurationSource(configuration.getNewSlotConfigurationSource()).build() :
109-
DeploymentSlotConfig.builder().name(configuration.getSlotName()).build();
112+
DeploymentSlotConfig.builder().newCreate(false).name(configuration.getSlotName()).build();
110113
final DiagnosticConfig diagnosticConfig = DiagnosticConfig.builder()
111114
.enableApplicationLog(configuration.getModel().isEnableApplicationLog())
112115
.applicationLogLevel(LogLevel.fromString(configuration.getModel().getApplicationLogLevel()))
@@ -127,19 +130,19 @@ protected void resetFromConfig(@NotNull WebAppConfiguration configuration) {
127130
configBuilder.region(region).pricingTier(pricingTier).monitorConfig(monitorConfig).build();
128131
final AzureArtifactConfig artifactConfig = AzureArtifactConfig.builder()
129132
.artifactIdentifier(configuration.getArtifactIdentifier())
130-
.artifactType(configuration.getAzureArtifactType().name()).build();
133+
.artifactType(Optional.ofNullable(configuration.getAzureArtifactType()).map(AzureArtifactType::name).orElse(null)).build();
131134
final WebAppDeployRunConfigurationModel runConfigurationModel = WebAppDeployRunConfigurationModel.builder()
132135
.webAppConfig(webAppConfig)
133136
.artifactConfig(artifactConfig)
134137
.deployToRoot(configuration.isDeployToRoot())
135138
.slotPanelVisible(configuration.isSlotPanelVisible())
136139
.openBrowserAfterDeployment(configuration.isOpenBrowserAfterDeployment()).build();
137-
pnlDeployment.setData(runConfigurationModel);
140+
pnlDeployment.setValue(runConfigurationModel);
138141
}
139142

140143
@Override
141144
protected void apply(@NotNull WebAppConfiguration configuration) {
142-
final WebAppDeployRunConfigurationModel runConfigurationModel = pnlDeployment.getData();
145+
final WebAppDeployRunConfigurationModel runConfigurationModel = pnlDeployment.getValue();
143146
Optional.ofNullable(runConfigurationModel.getWebAppConfig()).ifPresent(webAppConfig -> {
144147
configuration.setWebAppId(webAppConfig.getResourceId());
145148
configuration.setSubscriptionId(webAppConfig.getSubscriptionId());

0 commit comments

Comments
 (0)