Skip to content

Commit 40ede0b

Browse files
implement AzureComboBox.doGetDefaultValue based on history usage cache.
1 parent 7f2ddd1 commit 40ede0b

File tree

25 files changed

+280
-21
lines changed

25 files changed

+280
-21
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-applicationinsights/src/main/java/com/microsoft/azure/toolkit/intellij/applicationinsights/connection/ApplicationInsightsResourcePanel.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.microsoft.azure.toolkit.lib.Azure;
1313
import com.microsoft.azure.toolkit.lib.applicationinsights.ApplicationInsight;
1414
import com.microsoft.azure.toolkit.lib.applicationinsights.AzureApplicationInsights;
15+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
1516
import com.microsoft.azure.toolkit.lib.common.form.AzureFormInput;
1617
import com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo;
1718
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
@@ -23,6 +24,7 @@
2324
import java.util.Arrays;
2425
import java.util.Collections;
2526
import java.util.List;
27+
import java.util.Objects;
2628
import java.util.Optional;
2729
import java.util.function.Supplier;
2830
import java.util.stream.Collectors;
@@ -71,25 +73,32 @@ public Resource<ApplicationInsight> getValue() {
7173
@Override
7274
public List<AzureFormInput<?>> getInputs() {
7375
return Arrays.asList(
74-
this.insightComboBox,
75-
this.subscriptionComboBox
76+
this.insightComboBox,
77+
this.subscriptionComboBox
7678
);
7779
}
7880

7981
protected void createUIComponents() {
8082
final Supplier<List<? extends ApplicationInsight>> loader = () -> Optional
81-
.ofNullable(this.subscriptionComboBox)
82-
.map(AzureComboBox::getValue)
83-
.map(Subscription::getId)
84-
.map(id -> Azure.az(AzureApplicationInsights.class).applicationInsights(id).list()
85-
.stream().sorted((first, second) -> StringUtils.compare(first.getName(), second.getName())).collect(Collectors.toList()))
86-
.orElse(Collections.emptyList());
83+
.ofNullable(this.subscriptionComboBox)
84+
.map(AzureComboBox::getValue)
85+
.map(Subscription::getId)
86+
.map(id -> Azure.az(AzureApplicationInsights.class).applicationInsights(id).list()
87+
.stream().sorted((first, second) -> StringUtils.compare(first.getName(), second.getName())).collect(Collectors.toList()))
88+
.orElse(Collections.emptyList());
8789
this.insightComboBox = new AzureComboBox<>(loader) {
8890
@Override
8991
protected String getItemText(Object item) {
9092
return Optional.ofNullable(item).map(i -> ((ApplicationInsight) i).getName()).orElse(StringUtils.EMPTY);
9193
}
9294

95+
@Nullable
96+
@Override
97+
protected ApplicationInsight doGetDefaultValue() {
98+
return CacheManager.getUsageHistory(ApplicationInsight.class)
99+
.get(v -> Objects.isNull(subscriptionComboBox) || Objects.equals(subscriptionComboBox.getValue(), v.getSubscription()));
100+
}
101+
93102
@Override
94103
protected void refreshItems() {
95104
Optional.ofNullable(ApplicationInsightsResourcePanel.this.subscriptionComboBox)

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/appservice/serviceplan/ServicePlanComboBox.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.commons.lang3.StringUtils;
2424

2525
import javax.annotation.Nonnull;
26+
import javax.annotation.Nullable;
2627
import javax.swing.*;
2728
import java.awt.event.InputEvent;
2829
import java.awt.event.KeyEvent;
@@ -89,6 +90,15 @@ public void setRegion(Region region) {
8990
this.reloadItems();
9091
}
9192

93+
@Nullable
94+
@Override
95+
protected AppServicePlan doGetDefaultValue() {
96+
return CacheManager.getUsageHistory(AppServicePlan.class)
97+
.get(v -> (Objects.isNull(subscription) || Objects.equals(subscription, v.getSubscription()) &&
98+
(Objects.isNull(region) || Objects.equals(region, v.getRegion())) &&
99+
(Objects.isNull(os) || os == v.getOperatingSystem())));
100+
}
101+
92102
public void setValidPricingTierList(@Nonnull final List<PricingTier> pricingTierList, @Nonnull final PricingTier defaultPricingTier) {
93103
this.pricingTierList = pricingTierList;
94104
this.defaultPricingTier = defaultPricingTier;

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-cosmos/src/main/java/com/microsoft/azure/toolkit/intellij/cosmos/connection/CosmosDBAccountComboBox.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.microsoft.azure.toolkit.intellij.cosmos.connection;
22

33
import com.microsoft.azure.toolkit.intellij.common.AzureComboBox;
4+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
45
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
56
import com.microsoft.azure.toolkit.lib.cosmos.CosmosDBAccount;
67
import lombok.Getter;
78

89
import javax.annotation.Nonnull;
10+
import javax.annotation.Nullable;
911
import java.util.Collections;
1012
import java.util.List;
1113
import java.util.Objects;
@@ -33,6 +35,15 @@ public void setSubscription(Subscription subscription) {
3335
this.refreshItems();
3436
}
3537

38+
@Nullable
39+
@Override
40+
protected T doGetDefaultValue() {
41+
final List<T> items = this.getItems();
42+
//noinspection unchecked
43+
return (T) CacheManager.getUsageHistory(items.get(0).getClass())
44+
.get(v -> Objects.isNull(subscription) || Objects.equals(subscription, v.getSubscription()));
45+
}
46+
3647
@Override
3748
protected String getItemText(Object item) {
3849
return Objects.nonNull(item) && item instanceof CosmosDBAccount ? ((CosmosDBAccount) item).getName() : super.getItemText(item);

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-cosmos/src/main/java/com/microsoft/azure/toolkit/intellij/cosmos/connection/CosmosDatabaseComboBox.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.microsoft.azure.toolkit.intellij.cosmos.connection;
22

33
import com.microsoft.azure.toolkit.intellij.common.AzureComboBox;
4+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
5+
import com.microsoft.azure.toolkit.lib.common.model.AbstractAzResource;
46
import com.microsoft.azure.toolkit.lib.cosmos.CosmosDBAccount;
57
import com.microsoft.azure.toolkit.lib.cosmos.ICosmosDatabase;
68
import lombok.Getter;
79

810
import javax.annotation.Nonnull;
11+
import javax.annotation.Nullable;
912
import java.util.Collections;
1013
import java.util.List;
1114
import java.util.Objects;
@@ -34,6 +37,15 @@ public void setAccount(E account) {
3437
this.refreshItems();
3538
}
3639

40+
@Nullable
41+
@Override
42+
protected T doGetDefaultValue() {
43+
final List<T> items = this.getItems();
44+
//noinspection unchecked
45+
return (T) CacheManager.getUsageHistory(items.get(0).getClass())
46+
.get(v -> Objects.isNull(account) || Objects.equals(account, ((AbstractAzResource<?, ?, ?>) v).getParent()));
47+
}
48+
3749
@Override
3850
protected String getItemText(Object item) {
3951
return Objects.nonNull(item) && item instanceof ICosmosDatabase ? ((ICosmosDatabase) item).getName() : super.getItemText(item);

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-cosmos/src/main/java/com/microsoft/azure/toolkit/intellij/cosmos/dbtools/AzureCosmosDbAccountParamEditor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
3434
import com.microsoft.azure.toolkit.lib.common.action.Action;
3535
import com.microsoft.azure.toolkit.lib.common.action.AzureActionManager;
36+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
3637
import com.microsoft.azure.toolkit.lib.common.model.AbstractAzResource;
3738
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
3839
import com.microsoft.azure.toolkit.lib.common.operation.OperationContext;
@@ -231,6 +232,13 @@ static class CosmosDbAccountComboBox extends AzureComboBox<CosmosDBAccount> {
231232
private boolean noAccounts;
232233
private Consumer<Boolean> accountsListener;
233234

235+
@Nullable
236+
@Override
237+
protected CosmosDBAccount doGetDefaultValue() {
238+
return CacheManager.getUsageHistory(CosmosDBAccount.class)
239+
.get(v -> Objects.isNull(kind) || Objects.equals(kind, v.getKind()));
240+
}
241+
234242
@Nonnull
235243
@Override
236244
protected List<CosmosDBAccount> loadItems() {

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-database/src/main/java/com/microsoft/azure/toolkit/intellij/database/component/DatabaseComboBox.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
package com.microsoft.azure.toolkit.intellij.database.component;
77

88
import com.microsoft.azure.toolkit.intellij.common.AzureComboBox;
9+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
910
import com.microsoft.azure.toolkit.lib.database.entity.IDatabase;
1011
import com.microsoft.azure.toolkit.lib.database.entity.IDatabaseServer;
1112
import lombok.Getter;
1213
import org.apache.commons.lang3.StringUtils;
1314

1415
import javax.annotation.Nonnull;
16+
import javax.annotation.Nullable;
1517
import java.util.ArrayList;
1618
import java.util.List;
1719
import java.util.Objects;
@@ -33,6 +35,15 @@ public void setServer(IDatabaseServer<T> server) {
3335
this.reloadItems();
3436
}
3537

38+
@Nullable
39+
@Override
40+
protected T doGetDefaultValue() {
41+
final T item = this.getItems().get(0);
42+
//noinspection unchecked
43+
return (T) CacheManager.getUsageHistory(item.getClass())
44+
.get(v -> Objects.isNull(server) || Objects.equals(server, v.getServer()));
45+
}
46+
3647
@Override
3748
protected String getItemText(Object item) {
3849
return Objects.nonNull(item) && item instanceof IDatabase ? ((IDatabase) item).getName() : super.getItemText(item);

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-database/src/main/java/com/microsoft/azure/toolkit/intellij/database/component/ServerComboBox.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
package com.microsoft.azure.toolkit.intellij.database.component;
77

88
import com.microsoft.azure.toolkit.intellij.common.AzureComboBox;
9+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
910
import com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo;
1011
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
1112
import com.microsoft.azure.toolkit.lib.database.entity.IDatabaseServer;
1213
import lombok.Getter;
1314
import org.apache.commons.lang3.StringUtils;
1415

16+
import javax.annotation.Nullable;
17+
import java.util.List;
1518
import java.util.Objects;
1619

1720
public class ServerComboBox<T extends IDatabaseServer<?>> extends AzureComboBox<T> {
@@ -31,6 +34,15 @@ public void setSubscription(Subscription subscription) {
3134
this.reloadItems();
3235
}
3336

37+
@Nullable
38+
@Override
39+
protected T doGetDefaultValue() {
40+
final List<T> items = this.getItems();
41+
//noinspection unchecked
42+
return (T) CacheManager.getUsageHistory(items.get(0).getClass())
43+
.get(v -> Objects.isNull(subscription) || Objects.equals(subscription, v.getSubscription()));
44+
}
45+
3446
@Override
3547
protected String getItemText(Object item) {
3648
return Objects.nonNull(item) ? ((IDatabaseServer<?>) item).getName() : super.getItemText(item);

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

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import com.intellij.ui.components.fields.ExtendableTextComponent.Extension;
1919
import com.intellij.ui.components.fields.ExtendableTextField;
2020
import com.intellij.util.ui.UIUtil;
21+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
22+
import com.microsoft.azure.toolkit.lib.common.cache.UsageHistory;
2123
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager;
2224
import com.microsoft.azure.toolkit.lib.common.model.AbstractAzResource;
2325
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
@@ -161,7 +163,7 @@ public void setValue(final ItemReference<T> val, final Boolean fixed) {
161163
private void refreshValue() {
162164
if (this.valueNotSet) {
163165
if (this.getItemCount() > 0 && this.getSelectedIndex() != 0) {
164-
super.setSelectedIndex(0);
166+
super.setSelectedItem(this.getDefaultValue());
165167
}
166168
} else {
167169
final Object selected = this.getSelectedItem();
@@ -172,17 +174,43 @@ private void refreshValue() {
172174
if (this.value instanceof AzureComboBox.ItemReference) {
173175
items.stream().filter(i -> ((ItemReference<?>) this.value).is(i)).findFirst().ifPresent(this::setValue);
174176
} else if (items.contains(this.value)) {
175-
super.setSelectedItem(this.value);
177+
this.doSetValue((T) this.value);
176178
} else if (this.value instanceof AbstractAzResource && ((AbstractAzResource<?, ?, ?>) this.value).isDraftForCreating()) {
177179
super.addItem((T) this.value);
178-
super.setSelectedItem(this.value);
180+
this.doSetValue((T) this.value);
179181
} else {
180182
super.setSelectedItem(null);
181183
}
182184
this.valueDebouncer.debounce();
183185
}
184186
}
185187

188+
@Override
189+
public T getDefaultValue() {
190+
final List<T> items = this.getItems();
191+
final T value = doGetDefaultValue();
192+
if (Objects.nonNull(value) && items.contains(value)) {
193+
return value;
194+
} else {
195+
return this.getModel().getElementAt(0);
196+
}
197+
}
198+
199+
@Nullable
200+
protected T doGetDefaultValue() {
201+
final List<T> items = this.getItems();
202+
//noinspection unchecked
203+
final UsageHistory<T> history = (UsageHistory<T>) CacheManager.getUsageHistory(items.get(0).getClass());
204+
return history.get();
205+
}
206+
207+
protected void doSetValue(final T value) {
208+
//noinspection unchecked
209+
final UsageHistory<T> history = (UsageHistory<T>) CacheManager.getUsageHistory(value.getClass());
210+
history.put(value);
211+
super.setSelectedItem(value);
212+
}
213+
186214
@Override
187215
public void setSelectedItem(final Object value) {
188216
this.setValue((T) value);

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/ModuleComboBox.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,32 @@
99
import com.intellij.openapi.module.ModuleManager;
1010
import com.intellij.openapi.project.Project;
1111
import com.intellij.ui.components.fields.ExtendableTextComponent;
12+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
1213
import org.apache.commons.lang3.StringUtils;
1314

1415
import javax.annotation.Nonnull;
16+
import javax.annotation.Nullable;
1517
import java.util.Arrays;
1618
import java.util.Collections;
1719
import java.util.List;
20+
import java.util.Objects;
1821

1922
public class ModuleComboBox extends AzureComboBox<Module> {
20-
23+
2124
private final Project project;
2225

2326
public ModuleComboBox(Project project) {
2427
super(true);
2528
this.project = project;
2629
}
2730

31+
@Nullable
32+
@Override
33+
protected Module doGetDefaultValue() {
34+
return CacheManager.getUsageHistory(Module.class)
35+
.get(v -> Objects.isNull(project) || Objects.equals(project, v.getProject()));
36+
}
37+
2838
@Override
2939
protected List<? extends Module> loadItems() throws Exception {
3040
return Arrays.asList(ModuleManager.getInstance(project).getModules());

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/component/resourcegroup/ResourceGroupComboBox.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.intellij.ui.components.fields.ExtendableTextComponent.Extension;
1111
import com.microsoft.azure.toolkit.intellij.common.AzureComboBox;
1212
import com.microsoft.azure.toolkit.lib.Azure;
13+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
1314
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessageBundle;
1415
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
1516
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
@@ -19,6 +20,7 @@
1920
import org.apache.commons.lang3.StringUtils;
2021

2122
import javax.annotation.Nonnull;
23+
import javax.annotation.Nullable;
2224
import javax.swing.*;
2325
import java.awt.event.InputEvent;
2426
import java.awt.event.KeyEvent;
@@ -58,6 +60,13 @@ public void setSubscription(Subscription subscription) {
5860
this.reloadItems();
5961
}
6062

63+
@Nullable
64+
@Override
65+
protected ResourceGroup doGetDefaultValue() {
66+
return CacheManager.getUsageHistory(ResourceGroup.class)
67+
.get(g -> Objects.isNull(subscription) || Objects.equals(subscription.getId(), g.getSubscriptionId()));
68+
}
69+
6170
@Nonnull
6271
@Override
6372
@AzureOperation(

0 commit comments

Comments
 (0)