Skip to content

Commit d285eff

Browse files
committed
Update AppServiceComboBox to adapt AzureComboBox refresh
1 parent 673eff1 commit d285eff

File tree

6 files changed

+38
-63
lines changed

6 files changed

+38
-63
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/appservice/AppServiceComboBox.java

Lines changed: 18 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -12,72 +12,45 @@
1212
import com.microsoft.azure.toolkit.intellij.common.AzureComboBox;
1313
import com.microsoft.azuretools.azurecommons.helpers.NotNull;
1414
import com.microsoft.azuretools.azurecommons.helpers.Nullable;
15-
import com.microsoft.tooling.msservices.components.DefaultLoader;
15+
import lombok.Getter;
16+
import lombok.Setter;
1617
import org.apache.commons.lang3.StringUtils;
17-
import org.apache.commons.lang3.exception.ExceptionUtils;
1818
import rx.Subscription;
1919

2020
import javax.swing.*;
21-
import java.io.InterruptedIOException;
21+
import java.util.List;
2222
import java.util.Objects;
2323

24-
import static com.microsoft.intellij.util.RxJavaUtils.unsubscribeSubscription;
25-
2624
public abstract class AppServiceComboBox<T extends AppServiceComboBoxModel> extends AzureComboBox<T> {
2725

2826
protected Project project;
2927
protected Subscription subscription;
3028

29+
@Getter
30+
@Setter
31+
private T configModel;
32+
3133
public AppServiceComboBox(final Project project) {
3234
super(false);
3335
this.project = project;
3436
this.setRenderer(new AppCombineBoxRender(this));
3537
}
3638

37-
// todo: optimize refreshing logic
38-
public synchronized void refreshItemsWithDefaultValue(@NotNull T defaultValue) {
39-
unsubscribeSubscription(subscription);
40-
this.setLoading(true);
41-
this.removeAllItems();
42-
this.addItem(defaultValue);
43-
subscription = this.loadItemsAsync()
44-
.subscribe(items -> DefaultLoader.getIdeHelper().invokeLater(() -> {
45-
synchronized (AppServiceComboBox.this) {
46-
AppServiceComboBox.this.removeAllItems();
47-
items.forEach(this::addItem);
48-
this.resetDefaultValue(defaultValue);
49-
this.setLoading(false);
50-
}
51-
}), this::handleLoadingError);
52-
}
53-
54-
private void resetDefaultValue(@NotNull T defaultValue) {
55-
final AppServiceComboBoxModel model = getItems()
56-
.stream()
57-
.filter(item -> AppServiceComboBoxModel.isSameApp(defaultValue, item) && item != defaultValue)
58-
.findFirst().orElse(null);
59-
if (model != null) {
60-
this.setSelectedItem(model);
61-
this.removeItem(defaultValue);
62-
} else if (defaultValue.isNewCreateResource()) {
63-
return;
64-
} else {
65-
this.setSelectedItem(null);
66-
this.removeItem(defaultValue);
67-
}
68-
}
69-
39+
@NotNull
7040
@Override
71-
protected void handleLoadingError(final Throwable e) {
72-
final Throwable rootCause = ExceptionUtils.getRootCause(e);
73-
if (rootCause instanceof InterruptedIOException || rootCause instanceof InterruptedException) {
74-
// Swallow interrupted exception caused by unsubscribe
75-
return;
41+
protected List<? extends T> loadItems() throws Exception {
42+
final List<T> items = loadAppServiceModels();
43+
if (super.getItemReference() != null && configModel != null && configModel.isNewCreateResource()) {
44+
final T target = items.stream().filter(model -> getItemReference().is(model)).findAny().orElse(null);
45+
if (target == null) {
46+
items.add(configModel);
47+
}
7648
}
77-
this.setLoading(false);
78-
super.handleLoadingError(e);
49+
return items;
7950
}
8051

52+
protected abstract List<T> loadAppServiceModels() throws Exception;
53+
8154
@Nullable
8255
@Override
8356
protected ExtendableTextComponent.Extension getExtension() {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ public void setValue(final ItemReference<T> val) {
121121
this.refreshValue();
122122
}
123123

124+
protected ItemReference<T> getItemReference() {
125+
return this.value instanceof ItemReference ? (ItemReference<T>) this.value : null;
126+
}
127+
124128
private void refreshValue() {
125129
if (Objects.equals(this.value, this.getSelectedItem())) {
126130
return;

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/function/FunctionAppComboBox.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ protected void createResource() {
4444
name = "function.list.detail|subscription|selected",
4545
type = AzureOperation.Type.SERVICE
4646
)
47-
protected List<? extends FunctionAppComboBoxModel> loadItems() throws Exception {
47+
protected List<FunctionAppComboBoxModel> loadAppServiceModels() throws Exception {
4848
final List<ResourceEx<FunctionApp>> functions = AzureFunctionMvpModel.getInstance().listAllFunctions(false);
4949
return functions.stream()
5050
.filter(resource -> WebAppUtils.isJavaWebApp(resource.getResource()))

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/function/runner/deploy/ui/FunctionDeploymentPanel.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.intellij.ui.HyperlinkLabel;
1313
import com.intellij.ui.ListCellRendererWrapper;
1414
import com.microsoft.azure.toolkit.intellij.appservice.AppServiceComboBoxModel;
15+
import com.microsoft.azure.toolkit.intellij.common.AzureComboBox;
1516
import com.microsoft.azure.toolkit.intellij.function.FunctionAppComboBox;
1617
import com.microsoft.azure.toolkit.intellij.function.FunctionAppComboBoxModel;
1718
import com.microsoft.azure.toolkit.intellij.common.AzureSettingPanel;
@@ -130,14 +131,13 @@ protected void resetFromConfig(@NotNull FunctionDeployConfiguration configuratio
130131
this.appSettingsKey = configuration.getAppSettingsKey();
131132
appSettingsTable.setAppSettings(FunctionUtils.loadAppSettingsFromSecurityStorage(appSettingsKey));
132133
}
133-
if (StringUtils.isAllEmpty(configuration.getFunctionId(), configuration.getAppName())) {
134-
functionAppComboBox.refreshItems();
135-
} else {
136-
final FunctionAppComboBoxModel functionAppComboBoxModel =
137-
new FunctionAppComboBoxModel(configuration.getModel());
138-
appSettingsFunctionApp = functionAppComboBoxModel;
139-
functionAppComboBox.refreshItemsWithDefaultValue(functionAppComboBoxModel);
134+
if (!StringUtils.isAllEmpty(configuration.getFunctionId(), configuration.getAppName())) {
135+
final FunctionAppComboBoxModel configModel = new FunctionAppComboBoxModel(configuration.getModel());
136+
appSettingsFunctionApp = configModel;
137+
functionAppComboBox.setConfigModel(configModel);
138+
functionAppComboBox.setValue(new AzureComboBox.ItemReference<>(value -> AppServiceComboBoxModel.isSameApp(value, configModel)));
140139
}
140+
functionAppComboBox.refreshItems();
141141
final Module previousModule = configuration.getModule();
142142
if (previousModule != null) {
143143
for (int i = 0; i < cbFunctionModule.getItemCount(); i++) {

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/webapp/WebAppComboBox.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ protected void createResource() {
4747
name = "webapp.list.detail|subscription|selected",
4848
type = AzureOperation.Type.SERVICE
4949
)
50-
protected List<WebAppComboBoxModel> loadItems() throws Exception {
50+
protected List<WebAppComboBoxModel> loadAppServiceModels() throws Exception {
5151
final List<ResourceEx<WebApp>> webApps = AzureWebAppMvpModel.getInstance().listAllWebApps(false);
5252
return webApps.stream()
5353
.filter(resource -> WebAppUtils.isJavaWebApp(resource.getResource()))

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@
1313
import com.intellij.ui.HideableDecorator;
1414
import com.intellij.ui.HyperlinkLabel;
1515
import com.microsoft.azure.management.appservice.DeploymentSlot;
16-
import com.microsoft.azure.toolkit.intellij.common.AzureArtifactComboBox;
16+
import com.microsoft.azure.toolkit.intellij.appservice.AppServiceComboBoxModel;
17+
import com.microsoft.azure.toolkit.intellij.common.*;
1718
import com.microsoft.azure.toolkit.intellij.webapp.WebAppComboBox;
1819
import com.microsoft.azure.toolkit.intellij.webapp.WebAppComboBoxModel;
19-
import com.microsoft.azure.toolkit.intellij.common.AzureSettingPanel;
2020
import com.microsoft.azure.toolkit.intellij.webapp.runner.Constants;
2121
import com.microsoft.azure.toolkit.intellij.webapp.runner.webappconfig.WebAppConfiguration;
22-
import com.microsoft.azure.toolkit.intellij.common.AzureArtifact;
23-
import com.microsoft.azure.toolkit.intellij.common.AzureArtifactManager;
2422
import com.microsoft.intellij.ui.util.UIUtils;
2523
import com.microsoft.tooling.msservices.components.DefaultLoader;
2624
import org.apache.commons.compress.utils.FileNameUtils;
@@ -186,12 +184,12 @@ protected JLabel getLblMavenProject() {
186184

187185
@Override
188186
protected void resetFromConfig(@NotNull WebAppConfiguration configuration) {
189-
final WebAppComboBoxModel configurationModel = new WebAppComboBoxModel(configuration.getModel());
190-
if (StringUtils.isAllEmpty(configurationModel.getAppName(), configurationModel.getResourceId())) {
191-
comboBoxWebApp.refreshItems();
192-
} else {
193-
comboBoxWebApp.refreshItemsWithDefaultValue(configurationModel);
187+
if (!StringUtils.isAllEmpty(configuration.getWebAppName(), configuration.getWebAppId())) {
188+
final WebAppComboBoxModel configModel = new WebAppComboBoxModel(configuration.getModel());
189+
comboBoxWebApp.setConfigModel(configModel);
190+
comboBoxWebApp.setValue(new AzureComboBox.ItemReference<>(value -> AppServiceComboBoxModel.isSameApp(value, configModel)));
194191
}
192+
comboBoxWebApp.refreshItems();
195193
if (configuration.getAzureArtifactType() != null) {
196194
lastSelectedAzureArtifact = AzureArtifactManager
197195
.getInstance(project)

0 commit comments

Comments
 (0)