Skip to content

Commit 1d636b2

Browse files
committed
Merge branch 'release' into release.next
2 parents c60ce68 + 9e0a747 commit 1d636b2

File tree

2 files changed

+46
-25
lines changed

2 files changed

+46
-25
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/intellij/runner/SpringDatasourceCompletionContributor.java

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
import com.intellij.codeInsight.completion.CompletionContributor;
99
import com.intellij.codeInsight.completion.CompletionParameters;
10-
import com.intellij.codeInsight.completion.CompletionType;
1110
import com.intellij.codeInsight.completion.CompletionProvider;
1211
import com.intellij.codeInsight.completion.CompletionResultSet;
13-
import com.intellij.codeInsight.completion.InsertionContext;
12+
import com.intellij.codeInsight.completion.CompletionType;
1413
import com.intellij.codeInsight.completion.InsertHandler;
14+
import com.intellij.codeInsight.completion.InsertionContext;
1515
import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
1616
import com.intellij.codeInsight.lookup.LookupElement;
1717
import com.intellij.codeInsight.lookup.LookupElementBuilder;
@@ -25,54 +25,56 @@
2525
import com.microsoft.azure.toolkit.intellij.link.LinkMySQLToModuleDialog;
2626
import com.microsoft.azure.toolkit.intellij.link.base.LinkType;
2727
import com.microsoft.azure.toolkit.intellij.link.po.LinkPO;
28+
import com.microsoft.azuretools.authmanage.AuthMethodManager;
2829
import com.microsoft.intellij.AzureLinkStorage;
2930
import com.microsoft.intellij.helpers.AzureIconLoader;
3031
import com.microsoft.tooling.msservices.serviceexplorer.AzureIconSymbol;
3132
import org.apache.commons.lang3.StringUtils;
3233
import org.jetbrains.annotations.NotNull;
34+
import org.jetbrains.annotations.Nullable;
3335

3436
import java.util.Objects;
3537

3638
public class SpringDatasourceCompletionContributor extends CompletionContributor {
3739

3840
public SpringDatasourceCompletionContributor() {
41+
super();
3942
extend(CompletionType.BASIC, PlatformPatterns.psiElement(),
40-
new CompletionProvider<CompletionParameters>() {
43+
new CompletionProvider<CompletionParameters>() {
4144
@Override
4245
public void addCompletions(@NotNull CompletionParameters parameters,
4346
@NotNull ProcessingContext context,
4447
@NotNull CompletionResultSet resultSet) {
48+
final Module module = ModuleUtil.findModuleForFile(parameters.getOriginalFile());
49+
if (!AuthMethodManager.getInstance().isSignedIn() && getLinkForModule(module) == null) {
50+
// Do not show hint if user not signed in and no service link for file module
51+
return;
52+
}
4553
resultSet.addElement(LookupElementBuilder
46-
.create("spring.datasource.url")
47-
.withIcon(AzureIconLoader.loadIcon(AzureIconSymbol.MySQL.BIND_INTO))
48-
.withInsertHandler(new MyInsertHandler())
49-
.withBoldness(true)
50-
.withTypeText("String")
51-
.withTailText(" (Connect to Azure Datasource for MySQL)")
52-
.withAutoCompletionPolicy(AutoCompletionPolicy.SETTINGS_DEPENDENT)
53-
);
54+
.create("spring.datasource.url")
55+
.withIcon(AzureIconLoader.loadIcon(AzureIconSymbol.MySQL.BIND_INTO))
56+
.withInsertHandler(new MyInsertHandler())
57+
.withBoldness(true)
58+
.withTypeText("String")
59+
.withTailText(" (Connect to Azure Datasource for MySQL)")
60+
.withAutoCompletionPolicy(AutoCompletionPolicy.SETTINGS_DEPENDENT));
5461
}
55-
}
56-
);
57-
62+
});
5863
}
5964

60-
private class MyInsertHandler implements InsertHandler<LookupElement> {
65+
private static class MyInsertHandler implements InsertHandler<LookupElement> {
6166

6267
@Override
6368
public void handleInsert(@NotNull InsertionContext insertionContext, @NotNull LookupElement lookupElement) {
64-
Module module = ModuleUtil.findModuleForFile(insertionContext.getFile().getVirtualFile(), insertionContext.getProject());
65-
LinkPO moduleLink = AzureLinkStorage.getProjectStorage(insertionContext.getProject()).getLinkByModuleId(module.getName())
66-
.stream()
67-
.filter(e -> LinkType.SERVICE_WITH_MODULE == e.getType())
68-
.findFirst().orElse(null);
69+
final Module module = ModuleUtil.findModuleForFile(insertionContext.getFile().getVirtualFile(), insertionContext.getProject());
70+
final LinkPO moduleLink = getLinkForModule(module);
6971
if (Objects.nonNull(moduleLink)) {
70-
String envPrefix = moduleLink.getEnvPrefix();
72+
final String envPrefix = moduleLink.getEnvPrefix();
7173
this.insertSpringDatasourceProperties(envPrefix, insertionContext);
7274
} else {
7375
ApplicationManager.getApplication().invokeLater(() -> {
7476
final LinkMySQLToModuleDialog dialog = new LinkMySQLToModuleDialog(insertionContext.getProject(), null, module);
75-
String envPrefix = dialog.showAndGetEnvPrefix();
77+
final String envPrefix = dialog.showAndGetEnvPrefix();
7678
WriteCommandAction.runWriteCommandAction(insertionContext.getProject(), () -> {
7779
if (StringUtils.isNotBlank(envPrefix)) {
7880
this.insertSpringDatasourceProperties(envPrefix, insertionContext);
@@ -86,12 +88,20 @@ public void handleInsert(@NotNull InsertionContext insertionContext, @NotNull Lo
8688
}
8789

8890
private void insertSpringDatasourceProperties(String envPrefix, @NotNull InsertionContext insertionContext) {
89-
StringBuilder builder = new StringBuilder();
91+
final StringBuilder builder = new StringBuilder();
9092
builder.append("=${").append(envPrefix).append("URL}").append(StringUtils.LF)
91-
.append("spring.datasource.username=${").append(envPrefix).append("USERNAME}").append(StringUtils.LF)
92-
.append("spring.datasource.password=${").append(envPrefix).append("PASSWORD}").append(StringUtils.LF);
93+
.append("spring.datasource.username=${").append(envPrefix).append("USERNAME}").append(StringUtils.LF)
94+
.append("spring.datasource.password=${").append(envPrefix).append("PASSWORD}").append(StringUtils.LF);
9395
EditorModificationUtil.insertStringAtCaret(insertionContext.getEditor(), builder.toString(), true);
9496
}
9597
}
9698

99+
@Nullable
100+
private static LinkPO getLinkForModule(@Nullable final Module module) {
101+
return module == null ? null : AzureLinkStorage.getProjectStorage(module.getProject()).getLinkByModuleId(module.getName())
102+
.stream()
103+
.filter(e -> LinkType.SERVICE_WITH_MODULE == e.getType())
104+
.findFirst().orElse(null);
105+
}
106+
97107
}

PluginsAndFeatures/azure-toolkit-for-intellij/src/com/microsoft/intellij/runner/SpringDatasourceLineMarkerProvider.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.microsoft.azure.toolkit.intellij.link.mysql.JdbcUrl;
2020
import com.microsoft.azure.toolkit.intellij.link.po.LinkPO;
2121
import com.microsoft.azure.toolkit.intellij.link.po.MySQLResourcePO;
22+
import com.microsoft.azuretools.authmanage.AuthMethodManager;
2223
import com.microsoft.azuretools.core.mvp.model.mysql.MySQLMvpModel;
2324
import com.microsoft.intellij.AzureLinkStorage;
2425
import com.microsoft.intellij.AzureMySQLStorage;
@@ -36,6 +37,10 @@ public class SpringDatasourceLineMarkerProvider implements LineMarkerProvider {
3637

3738
@Override
3839
public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) {
40+
// Do not show azure line marker if not signed in
41+
if (!AuthMethodManager.getInstance().isSignedIn()) {
42+
return null;
43+
}
3944
if (element instanceof PropertyImpl) {
4045
PropertyImpl property = (PropertyImpl) element;
4146
String value = property.getValue();
@@ -85,6 +90,12 @@ public class SpringDatasourceNavigationHandler implements GutterIconNavigationHa
8590

8691
@Override
8792
public void navigate(MouseEvent mouseEvent, PsiElement psiElement) {
93+
if (!AuthMethodManager.getInstance().isSignedIn()) {
94+
final String resourceName = ResourceId.fromString(resourceId).name();
95+
final String message = String.format("Failed to connect Azure Database for MySQL (%s) , please sign in Azure first.", resourceName);
96+
DefaultLoader.getUIHelper().showError(message, "Connect to Azure Datasource for MySQL");
97+
return;
98+
}
8899
ResourceId resourceIdObject = ResourceId.fromString(resourceId);
89100
Server server = MySQLMvpModel.findServer(resourceIdObject.subscriptionId(), resourceIdObject.resourceGroupName(), resourceIdObject.name());
90101
if (Objects.nonNull(server)) {

0 commit comments

Comments
 (0)