Skip to content

Commit b801626

Browse files
committed
extract common database region combo box for mysql and sql server.
1 parent 97bbe25 commit b801626

File tree

8 files changed

+89
-117
lines changed

8 files changed

+89
-117
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/sqlserver/common/SqlServerRegionComboBox.java renamed to PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/database/RegionComboBox.java

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*/
55

6-
package com.microsoft.azure.toolkit.intellij.sqlserver.common;
6+
package com.microsoft.azure.toolkit.intellij.database;
77

88
import com.microsoft.azure.toolkit.intellij.common.AzureComboBox;
99
import com.microsoft.azure.toolkit.lib.Azure;
@@ -12,23 +12,22 @@
1212
import com.microsoft.azure.toolkit.lib.common.model.Region;
1313
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
1414
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
15-
import com.microsoft.azure.toolkit.lib.sqlserver.service.AzureSqlServer;
1615
import com.microsoft.azuretools.azurecommons.helpers.NotNull;
16+
import lombok.Getter;
17+
import lombok.Setter;
1718

1819
import java.util.ArrayList;
1920
import java.util.List;
2021
import java.util.Objects;
22+
import java.util.function.Function;
2123

22-
/**
23-
* TODO(Qianjin) : extend RegionComboBox
24-
*/
25-
public class SqlServerRegionComboBox extends AzureComboBox<Region> {
26-
27-
private static final String REGION_UNAVAILABLE_MESSAGE = "Your subscription does not have access to create a server "
28-
+ "in the selected region. For the latest information about region availability for your subscription, go to "
29-
+ "aka.ms/sqlcapacity. Please try another region or create a support ticket to request access.";
24+
public class RegionComboBox extends AzureComboBox<Region> {
3025

26+
@Getter
3127
private Subscription subscription;
28+
@Setter
29+
private Function<RegionComboBox, AzureValidationInfo> validateFunction;
30+
3231
private boolean validated;
3332
private AzureValidationInfo validatedInfo;
3433

@@ -54,7 +53,7 @@ protected List<? extends Region> loadItems() {
5453
if (Objects.isNull(subscription)) {
5554
return new ArrayList<>();
5655
}
57-
return loadRegions(subscription);
56+
return Azure.az(AzureAccount.class).listRegions(subscription.getId());
5857
}
5958

6059
@Override
@@ -67,10 +66,10 @@ protected String getItemText(Object item) {
6766

6867
@Override
6968
public void setItem(Region item) {
70-
if (!item.equals(getItem())) {
69+
super.setItem(item);
70+
if (!Objects.equals(item, getItem())) {
7171
validated = false;
7272
}
73-
super.setItem(item);
7473
}
7574

7675
@Override
@@ -81,22 +80,18 @@ public boolean isRequired() {
8180
@NotNull
8281
@Override
8382
public AzureValidationInfo doValidate() {
84-
if (validated && Objects.isNull(validatedInfo)) {
83+
if (Objects.isNull(subscription)) {
84+
return AzureValidationInfo.OK;
85+
}
86+
if (validated && Objects.nonNull(validatedInfo)) {
8587
return validatedInfo;
8688
}
8789
validatedInfo = super.doValidate();
8890
if (AzureValidationInfo.OK.equals(validatedInfo)) {
89-
AzureSqlServer service = com.microsoft.azure.toolkit.lib.Azure.az(AzureSqlServer.class);
90-
if (!service.checkRegionCapability(subscription.getId(), getValue().getName())) {
91-
final AzureValidationInfo.AzureValidationInfoBuilder builder = AzureValidationInfo.builder();
92-
validatedInfo = builder.input(this).message(REGION_UNAVAILABLE_MESSAGE).type(AzureValidationInfo.Type.ERROR).build();
93-
}
91+
validatedInfo = validateFunction.apply(this);
9492
}
9593
validated = true;
9694
return validatedInfo;
9795
}
9896

99-
private List<Region> loadRegions(Subscription subscription) {
100-
return Azure.az(AzureAccount.class).listRegions(subscription.getId());
101-
}
10297
}

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/mysql/MySQLRegionComboBox.java

Lines changed: 0 additions & 89 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*/
5+
6+
package com.microsoft.azure.toolkit.intellij.mysql;
7+
8+
import com.microsoft.azure.management.mysql.v2020_01_01.implementation.MySQLManager;
9+
import com.microsoft.azure.management.mysql.v2020_01_01.implementation.PerformanceTierPropertiesInner;
10+
import com.microsoft.azure.toolkit.intellij.database.RegionComboBox;
11+
import com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo;
12+
import com.microsoft.azuretools.authmanage.AuthMethodManager;
13+
14+
import java.util.List;
15+
import java.util.function.Function;
16+
17+
public class MySQLRegionValidator implements Function<RegionComboBox, AzureValidationInfo> {
18+
19+
private static final String DEFAULT_MYSQL_PERFORMANCE_TIER_ID = "Basic";
20+
private static final String REGION_UNAVAILABLE_MESSAGE = "Currently, the service is not available in this location for your subscription.";
21+
22+
@Override
23+
public AzureValidationInfo apply(RegionComboBox comboBox) {
24+
MySQLManager manager = AuthMethodManager.getInstance().getMySQLManager(comboBox.getSubscription().getId());
25+
List<PerformanceTierPropertiesInner> propertiesInnerList = manager.locationBasedPerformanceTiers().inner().list(comboBox.getValue().getName());
26+
// 'Basic' performance tier represents the service is available in this location for your subscription
27+
if (propertiesInnerList.stream().anyMatch(e -> DEFAULT_MYSQL_PERFORMANCE_TIER_ID.equals(e.id()))) {
28+
final AzureValidationInfo.AzureValidationInfoBuilder builder = AzureValidationInfo.builder();
29+
return builder.input(comboBox).message(REGION_UNAVAILABLE_MESSAGE).type(AzureValidationInfo.Type.ERROR).build();
30+
}
31+
return AzureValidationInfo.OK;
32+
}
33+
}

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/mysql/creation/MySQLCreationAdvancedPanel.form

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
<text value="Location:"/>
8484
</properties>
8585
</component>
86-
<component id="400c" class="com.microsoft.azure.toolkit.intellij.mysql.MySQLRegionComboBox" binding="regionComboBox">
86+
<component id="400c" class="com.microsoft.azure.toolkit.intellij.database.RegionComboBox" binding="regionComboBox">
8787
<constraints>
8888
<grid row="5" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="1" use-parent-layout="false"/>
8989
</constraints>

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/mysql/creation/MySQLCreationAdvancedPanel.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
import com.microsoft.azure.toolkit.intellij.common.AzureFormPanel;
1212
import com.microsoft.azure.toolkit.intellij.common.AzurePasswordFieldInput;
1313
import com.microsoft.azure.toolkit.intellij.common.TextDocumentListenerAdapter;
14+
import com.microsoft.azure.toolkit.intellij.database.RegionComboBox;
1415
import com.microsoft.azure.toolkit.intellij.database.ui.ConnectionSecurityPanel;
1516
import com.microsoft.azure.toolkit.intellij.database.AdminUsernameTextField;
1617
import com.microsoft.azure.toolkit.intellij.database.PasswordUtils;
17-
import com.microsoft.azure.toolkit.intellij.mysql.MySQLRegionComboBox;
1818
import com.microsoft.azure.toolkit.intellij.mysql.ServerNameTextField;
1919
import com.microsoft.azure.toolkit.intellij.mysql.VersionComboBox;
2020
import com.microsoft.azure.toolkit.lib.common.form.AzureFormInput;
@@ -41,7 +41,7 @@ public class MySQLCreationAdvancedPanel extends JPanel implements AzureFormPanel
4141
@Getter
4242
private ServerNameTextField serverNameTextField;
4343
@Getter
44-
private MySQLRegionComboBox regionComboBox;
44+
private RegionComboBox regionComboBox;
4545
@Getter
4646
private VersionComboBox versionComboBox;
4747
@Getter
@@ -68,6 +68,7 @@ public class MySQLCreationAdvancedPanel extends JPanel implements AzureFormPanel
6868
private void init() {
6969
passwordFieldInput = PasswordUtils.generatePasswordFieldInput(this.passwordField, this.adminUsernameTextField);
7070
confirmPasswordFieldInput = PasswordUtils.generateConfirmPasswordFieldInput(this.confirmPasswordField, this.passwordField);
71+
regionComboBox.setValidateFunction();
7172
}
7273

7374
private void initListeners() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*/
5+
6+
package com.microsoft.azure.toolkit.intellij.sqlserver.common;
7+
8+
import com.microsoft.azure.toolkit.intellij.database.RegionComboBox;
9+
import com.microsoft.azure.toolkit.lib.Azure;
10+
import com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo;
11+
import com.microsoft.azure.toolkit.lib.sqlserver.service.AzureSqlServer;
12+
13+
import java.util.function.Function;
14+
15+
public class SqlServerRegionValidator implements Function<RegionComboBox, AzureValidationInfo> {
16+
17+
private static final String REGION_UNAVAILABLE_MESSAGE = "Your subscription does not have access to create a server "
18+
+ "in the selected region. For the latest information about region availability for your subscription, go to "
19+
+ "aka.ms/sqlcapacity. Please try another region or create a support ticket to request access.";
20+
21+
@Override
22+
public AzureValidationInfo apply(RegionComboBox comboBox) {
23+
AzureSqlServer service = Azure.az(AzureSqlServer.class);
24+
if (!service.checkRegionCapability(comboBox.getSubscription().getId(), comboBox.getValue().getName())) {
25+
final AzureValidationInfo.AzureValidationInfoBuilder builder = AzureValidationInfo.builder();
26+
return builder.input(comboBox).message(REGION_UNAVAILABLE_MESSAGE).type(AzureValidationInfo.Type.ERROR).build();
27+
}
28+
return AzureValidationInfo.OK;
29+
}
30+
}

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/sqlserver/creation/SqlServerCreationAdvancedPanel.form

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
<text value="Location:"/>
8282
</properties>
8383
</component>
84-
<component id="400c" class="com.microsoft.azure.toolkit.intellij.sqlserver.common.SqlServerRegionComboBox" binding="regionComboBox">
84+
<component id="400c" class="com.microsoft.azure.toolkit.intellij.database.RegionComboBox" binding="regionComboBox">
8585
<constraints>
8686
<grid row="5" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="1" use-parent-layout="false"/>
8787
</constraints>

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/azure/toolkit/intellij/sqlserver/creation/SqlServerCreationAdvancedPanel.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
import com.microsoft.azure.toolkit.intellij.database.AdminUsernameTextField;
1515
import com.microsoft.azure.toolkit.intellij.database.PasswordUtils;
1616
import com.microsoft.azure.toolkit.intellij.sqlserver.common.SqlServerNameTextField;
17-
import com.microsoft.azure.toolkit.intellij.sqlserver.common.SqlServerRegionComboBox;
17+
import com.microsoft.azure.toolkit.intellij.database.RegionComboBox;
18+
import com.microsoft.azure.toolkit.intellij.sqlserver.common.SqlServerRegionValidator;
1819
import com.microsoft.azure.toolkit.lib.common.form.AzureFormInput;
1920
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
2021
import com.microsoft.azure.toolkit.lib.sqlserver.SqlServerConfig;
@@ -38,7 +39,7 @@ public class SqlServerCreationAdvancedPanel extends JPanel implements AzureFormP
3839
@Getter
3940
private SqlServerNameTextField serverNameTextField;
4041
@Getter
41-
private SqlServerRegionComboBox regionComboBox;
42+
private RegionComboBox regionComboBox;
4243
@Getter
4344
private AdminUsernameTextField adminUsernameTextField;
4445
@Getter
@@ -63,6 +64,7 @@ public class SqlServerCreationAdvancedPanel extends JPanel implements AzureFormP
6364
private void init() {
6465
passwordFieldInput = PasswordUtils.generatePasswordFieldInput(this.passwordField, this.adminUsernameTextField);
6566
confirmPasswordFieldInput = PasswordUtils.generateConfirmPasswordFieldInput(this.confirmPasswordField, this.passwordField);
67+
regionComboBox.setValidateFunction(new SqlServerRegionValidator());
6668
}
6769

6870
private void initListeners() {

0 commit comments

Comments
 (0)