Skip to content

Commit 73b906d

Browse files
Merge branch 'endgame-hotfix-202208' into endgame-hotfix-202208.next
# Conflicts: # PluginsAndFeatures/azure-toolkit-for-intellij/gradle.properties
2 parents 69d4836 + ed83f42 commit 73b906d

File tree

13 files changed

+239
-112
lines changed

13 files changed

+239
-112
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
All notable changes to "Azure Toolkit for IntelliJ IDEA" will be documented in this file.
44

55
- [Change Log](#change-log)
6+
- [3.68.1](#3681)
67
- [3.68.0](#3680)
78
- [3.67.0](#3670)
89
- [3.66.0](#3660)
@@ -86,6 +87,16 @@ All notable changes to "Azure Toolkit for IntelliJ IDEA" will be documented in t
8687
- [3.0.8](#308)
8788
- [3.0.7](#307)
8889
- [3.0.6](#306)
90+
91+
## 3.68.1
92+
### Fixed
93+
- Fixed the data modification failure issue of `Azure Cosmos DB API for MongoDB` Data Sources.
94+
95+
### Changed
96+
- Added feature toggle for creating Data Source of `Azure Cosmos DB API for Cassandra`, the toggle is **off** by default.
97+
- Support for opening `Azure Cosmos DB API for Cassandra` with `Database and SQL tools` plugin from `Azure Explorer` is disabled by default.
98+
- Support for creating Data Source of the `Azure Cosmos DB API for Cassandra` from `Database and SQL tools` plugin is disabled by default.
99+
89100
## 3.68.0
90101
### Added
91102
- Added support for resource management of `Azure Cosmos DB accounts` in Azure Explorer.

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

Lines changed: 21 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,11 @@
55

66
package com.microsoft.azure.toolkit.intellij.cosmos;
77

8-
import com.intellij.database.autoconfig.DataSourceDetector;
9-
import com.intellij.database.autoconfig.DataSourceRegistry;
10-
import com.intellij.database.psi.DbPsiFacade;
11-
import com.intellij.database.view.ui.DataSourceManagerDialog;
128
import com.intellij.ide.plugins.PluginManagerCore;
139
import com.intellij.openapi.actionSystem.AnActionEvent;
1410
import com.intellij.openapi.extensions.PluginId;
1511
import com.intellij.openapi.project.Project;
12+
import com.intellij.openapi.util.registry.Registry;
1613
import com.microsoft.azure.toolkit.ide.common.IActionsContributor;
1714
import com.microsoft.azure.toolkit.ide.common.action.ResourceCommonActionsContributor;
1815
import com.microsoft.azure.toolkit.ide.cosmos.CosmosActionsContributor;
@@ -24,7 +21,6 @@
2421
import com.microsoft.azure.toolkit.intellij.cosmos.connection.SqlCosmosDBAccountResourceDefinition;
2522
import com.microsoft.azure.toolkit.intellij.cosmos.creation.CreateCosmosDBAccountAction;
2623
import com.microsoft.azure.toolkit.intellij.cosmos.creation.CreateCosmosDatabaseAction;
27-
import com.microsoft.azure.toolkit.intellij.cosmos.dbtools.Dbms;
2824
import com.microsoft.azure.toolkit.lib.common.action.AzureActionManager;
2925
import com.microsoft.azure.toolkit.lib.common.bundle.AzureString;
3026
import com.microsoft.azure.toolkit.lib.common.exception.AzureToolkitRuntimeException;
@@ -52,7 +48,6 @@
5248
import java.util.function.BiPredicate;
5349
import java.util.function.Function;
5450

55-
import static com.microsoft.azure.toolkit.intellij.cosmos.dbtools.AzureCosmosDbAccountParamEditor.KEY_COSMOS_ACCOUNT_ID;
5651
import static com.microsoft.azure.toolkit.lib.cosmos.CosmosDBAccountDraft.Config.getDefaultConfig;
5752
import static com.microsoft.azure.toolkit.lib.cosmos.model.DatabaseConfig.getDefaultDatabaseConfig;
5853

@@ -64,66 +59,56 @@ public void registerHandlers(AzureActionManager am) {
6459
am.registerHandler(ResourceCommonActionsContributor.CREATE, serviceCondition, handler);
6560

6661
final BiConsumer<ResourceGroup, AnActionEvent> groupCreateHandler = (r, e) ->
67-
CreateCosmosDBAccountAction.create(e.getProject(), getDefaultConfig(r));
62+
CreateCosmosDBAccountAction.create(e.getProject(), getDefaultConfig(r));
6863
am.registerHandler(CosmosActionsContributor.GROUP_CREATE_COSMOS_SERVICE, (r, e) -> true, groupCreateHandler);
6964

7065
final Function<MongoCosmosDBAccount, MongoDatabase> mongoFunction = account -> account.mongoDatabases().list().stream().findFirst().orElse(null);
7166
am.registerHandler(ResourceCommonActionsContributor.CONNECT, (r, e) -> r instanceof MongoCosmosDBAccount, (AzResource<?, ?, ?> r, AnActionEvent e) ->
72-
openResourceConnector((MongoCosmosDBAccount) r, mongoFunction, MongoCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
67+
openResourceConnector((MongoCosmosDBAccount) r, mongoFunction, MongoCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
7368
am.registerHandler(ResourceCommonActionsContributor.CONNECT, (r, e) -> r instanceof MongoDatabase, (AzResource<?, ?, ?> r, AnActionEvent e) ->
74-
openResourceConnector((MongoDatabase) r, MongoCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
69+
openResourceConnector((MongoDatabase) r, MongoCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
7570

7671
final Function<SqlCosmosDBAccount, SqlDatabase> sqlFunction = account -> account.sqlDatabases().list().stream().findFirst().orElse(null);
7772
am.registerHandler(ResourceCommonActionsContributor.CONNECT, (r, e) -> r instanceof SqlCosmosDBAccount, (AzResource<?, ?, ?> r, AnActionEvent e) ->
78-
openResourceConnector((SqlCosmosDBAccount) r, sqlFunction, SqlCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
73+
openResourceConnector((SqlCosmosDBAccount) r, sqlFunction, SqlCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
7974
am.registerHandler(ResourceCommonActionsContributor.CONNECT, (r, e) -> r instanceof SqlDatabase, (AzResource<?, ?, ?> r, AnActionEvent e) ->
80-
openResourceConnector((SqlDatabase) r, SqlCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
75+
openResourceConnector((SqlDatabase) r, SqlCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
8176

8277
final Function<CassandraCosmosDBAccount, CassandraKeyspace> cassandraFunction = account -> account.keySpaces().list().stream().findFirst().orElse(null);
8378
am.registerHandler(ResourceCommonActionsContributor.CONNECT, (r, e) -> r instanceof CassandraCosmosDBAccount, (AzResource<?, ?, ?> r, AnActionEvent e) ->
84-
openResourceConnector((CassandraCosmosDBAccount) r, cassandraFunction, CassandraCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
79+
openResourceConnector((CassandraCosmosDBAccount) r, cassandraFunction, CassandraCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
8580
am.registerHandler(ResourceCommonActionsContributor.CONNECT, (r, e) -> r instanceof CassandraKeyspace, (AzResource<?, ?, ?> r, AnActionEvent e) ->
86-
openResourceConnector((CassandraKeyspace) r, CassandraCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
81+
openResourceConnector((CassandraKeyspace) r, CassandraCosmosDBAccountResourceDefinition.INSTANCE, e.getProject()));
8782

8883
final BiFunction<MongoCosmosDBAccount, DatabaseConfig, ICosmosDatabaseDraft<?, ?>> mongoDraftSupplier = (account, config) ->
89-
(ICosmosDatabaseDraft<?, ?>) account.mongoDatabases().getOrDraft(config.getName(), account.getResourceGroupName());
84+
(ICosmosDatabaseDraft<?, ?>) account.mongoDatabases().getOrDraft(config.getName(), account.getResourceGroupName());
9085
am.registerHandler(ResourceCommonActionsContributor.CREATE, (r, e) -> r instanceof MongoCosmosDBAccount, (Object r, AnActionEvent e) ->
91-
CreateCosmosDatabaseAction.create(e.getProject(), (MongoCosmosDBAccount) r, mongoDraftSupplier, getDefaultDatabaseConfig()));
86+
CreateCosmosDatabaseAction.create(e.getProject(), (MongoCosmosDBAccount) r, mongoDraftSupplier, getDefaultDatabaseConfig()));
9287

9388
final BiFunction<SqlCosmosDBAccount, DatabaseConfig, ICosmosDatabaseDraft<?, ?>> sqlDraftSupplier = (account, config) ->
94-
(ICosmosDatabaseDraft<?, ?>) account.sqlDatabases().getOrDraft(config.getName(), account.getResourceGroupName());
89+
(ICosmosDatabaseDraft<?, ?>) account.sqlDatabases().getOrDraft(config.getName(), account.getResourceGroupName());
9590
am.registerHandler(ResourceCommonActionsContributor.CREATE, (r, e) -> r instanceof SqlCosmosDBAccount, (Object r, AnActionEvent e) ->
96-
CreateCosmosDatabaseAction.create(e.getProject(), (SqlCosmosDBAccount) r, sqlDraftSupplier, getDefaultDatabaseConfig()));
91+
CreateCosmosDatabaseAction.create(e.getProject(), (SqlCosmosDBAccount) r, sqlDraftSupplier, getDefaultDatabaseConfig()));
9792

9893
final BiFunction<CassandraCosmosDBAccount, DatabaseConfig, ICosmosDatabaseDraft<?, ?>> cassandraDraftSupplier = (account, config) ->
99-
(ICosmosDatabaseDraft<?, ?>) account.keySpaces().getOrDraft(config.getName(), account.getResourceGroupName());
94+
(ICosmosDatabaseDraft<?, ?>) account.keySpaces().getOrDraft(config.getName(), account.getResourceGroupName());
10095
am.registerHandler(ResourceCommonActionsContributor.CREATE, (r, e) -> r instanceof CassandraCosmosDBAccount, (Object r, AnActionEvent e) ->
101-
CreateCosmosDatabaseAction.create(e.getProject(), (CassandraCosmosDBAccount) r, cassandraDraftSupplier, getDefaultDatabaseConfig()));
96+
CreateCosmosDatabaseAction.create(e.getProject(), (CassandraCosmosDBAccount) r, cassandraDraftSupplier, getDefaultDatabaseConfig()));
10297

103-
final BiConsumer<CosmosDBAccount, AnActionEvent> openDatabaseHandler = (c, e) -> openDatabaseTool(e.getProject(), c);
104-
am.registerHandler(CosmosActionsContributor.OPEN_DATABASE_TOOL, (r, e) -> r instanceof MongoCosmosDBAccount || r instanceof CassandraCosmosDBAccount, openDatabaseHandler);
98+
final String DATABASE_TOOLS_PLUGIN_ID = "com.intellij.database";
99+
if (PluginManagerCore.getPlugin(PluginId.findId(DATABASE_TOOLS_PLUGIN_ID)) == null) {
100+
final BiConsumer<CosmosDBAccount, AnActionEvent> openDatabaseHandler = (c, e) -> openDatabaseTool(e.getProject(), c);
101+
final boolean cassandraOn = Registry.is("azure.toolkit.cosmos_cassandra.dbtools.enabled");
102+
am.registerHandler(CosmosActionsContributor.OPEN_DATABASE_TOOL, (r, e) -> r instanceof MongoCosmosDBAccount || (r instanceof CassandraCosmosDBAccount && cassandraOn), openDatabaseHandler);
103+
}
105104
}
106105

107106
@AzureOperation(name = "cosmos.open_database_tools.account", params = {"account.getName()"}, type = AzureOperation.Type.ACTION)
108107
private void openDatabaseTool(Project project, CosmosDBAccount account) {
109108
final String DATABASE_TOOLS_PLUGIN_ID = "com.intellij.database";
110109
final String DATABASE_PLUGIN_NOT_INSTALLED = "\"Database tools and SQL\" plugin is not installed.";
111110
final String NOT_SUPPORT_ERROR_ACTION = "\"Database tools and SQL\" plugin is only provided in IntelliJ Ultimate edition.";
112-
if (PluginManagerCore.getPlugin(PluginId.findId(DATABASE_TOOLS_PLUGIN_ID)) == null) {
113-
throw new AzureToolkitRuntimeException(DATABASE_PLUGIN_NOT_INSTALLED, NOT_SUPPORT_ERROR_ACTION, IntellijActionsContributor.TRY_ULTIMATE);
114-
}
115-
AzureTaskManager.getInstance().runLater(() -> {
116-
final DataSourceRegistry registry = new DataSourceRegistry(project);
117-
final com.intellij.database.Dbms dbms =
118-
account instanceof MongoCosmosDBAccount ? Dbms.AZ_COSMOS_MONGO :
119-
account instanceof CassandraCosmosDBAccount ? Dbms.AZ_COSMOS_CASSANDRA :
120-
com.intellij.database.Dbms.UNKNOWN;
121-
final DataSourceDetector.Builder builder = registry.getBuilder()
122-
.withDbms(dbms)
123-
.withJdbcAdditionalProperty(KEY_COSMOS_ACCOUNT_ID, account.getId())
124-
.commit();
125-
DataSourceManagerDialog.showDialog(DbPsiFacade.getInstance(project), registry);
126-
});
111+
throw new AzureToolkitRuntimeException(DATABASE_PLUGIN_NOT_INSTALLED, NOT_SUPPORT_ERROR_ACTION, IntellijActionsContributor.TRY_ULTIMATE);
127112
}
128113

129114
private <T extends AzResource<?, ?, ?>> void openResourceConnector(@Nonnull final T resource, @Nonnull final AzureServiceResource.Definition<T> definition, Project project) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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.cosmos;
7+
8+
import com.intellij.database.autoconfig.DataSourceRegistry;
9+
import com.intellij.database.dataSource.DatabaseDriverManager;
10+
import com.intellij.database.dataSource.LocalDataSource;
11+
import com.intellij.database.dataSource.LocalDataSourceManager;
12+
import com.intellij.database.psi.DbDataSource;
13+
import com.intellij.database.psi.DbPsiFacade;
14+
import com.intellij.database.psi.DbPsiFacadeImpl;
15+
import com.intellij.database.view.ui.DataSourceManagerDialog;
16+
import com.intellij.openapi.actionSystem.AnActionEvent;
17+
import com.intellij.openapi.project.Project;
18+
import com.intellij.openapi.util.registry.Registry;
19+
import com.microsoft.azure.toolkit.ide.common.IActionsContributor;
20+
import com.microsoft.azure.toolkit.ide.cosmos.CosmosActionsContributor;
21+
import com.microsoft.azure.toolkit.lib.common.action.AzureActionManager;
22+
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
23+
import com.microsoft.azure.toolkit.lib.common.task.AzureTaskManager;
24+
import com.microsoft.azure.toolkit.lib.cosmos.CosmosDBAccount;
25+
import com.microsoft.azure.toolkit.lib.cosmos.cassandra.CassandraCosmosDBAccount;
26+
import com.microsoft.azure.toolkit.lib.cosmos.mongo.MongoCosmosDBAccount;
27+
28+
import java.util.function.BiConsumer;
29+
30+
import static com.microsoft.azure.toolkit.intellij.cosmos.dbtools.AzureCosmosDbAccountParamEditor.KEY_COSMOS_ACCOUNT_ID;
31+
32+
public class IntelliJCosmosActionsContributorForUltimate implements IActionsContributor {
33+
@Override
34+
public void registerHandlers(AzureActionManager am) {
35+
final BiConsumer<CosmosDBAccount, AnActionEvent> openDatabaseHandler = (c, e) -> openDatabaseTool(e.getProject(), c);
36+
final boolean cassandraOn = Registry.is("azure.toolkit.cosmos_cassandra.dbtools.enabled");
37+
am.registerHandler(CosmosActionsContributor.OPEN_DATABASE_TOOL, (r, e) -> r instanceof MongoCosmosDBAccount || (r instanceof CassandraCosmosDBAccount && cassandraOn), openDatabaseHandler);
38+
}
39+
40+
@AzureOperation(name = "cosmos.open_database_tools.account", params = {"account.getName()"}, type = AzureOperation.Type.ACTION)
41+
private void openDatabaseTool(Project project, CosmosDBAccount account) {
42+
AzureTaskManager.getInstance().runLater(() -> {
43+
final DataSourceRegistry registry = new DataSourceRegistry(project);
44+
final String driver = account instanceof MongoCosmosDBAccount ? "az_cosmos_mongo" : "az_cosmos_cassandra";
45+
final LocalDataSource ds = DatabaseDriverManager.getInstance().getDriver(driver).createDataSource(null);
46+
final DbPsiFacade facade = DbPsiFacade.getInstance(project);
47+
final LocalDataSourceManager manager = LocalDataSourceManager.getInstance(project);
48+
final DbDataSource newElement = ((DbPsiFacadeImpl) facade).createDataSourceWrapperElement(ds, manager);
49+
ds.setAdditionalProperty(KEY_COSMOS_ACCOUNT_ID, account.getId());
50+
DataSourceManagerDialog.showDialog(facade, newElement, null, null, null);
51+
});
52+
}
53+
}

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package com.microsoft.azure.toolkit.intellij.cosmos.dbtools;
77

88
import com.azure.resourcemanager.resources.fluentcore.arm.ResourceId;
9-
import com.intellij.database.Dbms;
109
import com.intellij.database.dataSource.DatabaseConnectionInterceptor;
1110
import com.intellij.database.dataSource.DatabaseConnectionPoint;
1211
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
@@ -30,15 +29,13 @@ public class AzureCosmosDbAccountConnectionInterceptor implements DatabaseConnec
3029
@Nullable
3130
public CompletionStage<ProtoConnection> intercept(@NotNull DatabaseConnectionInterceptor.ProtoConnection proto, boolean silent) {
3231
final DatabaseConnectionPoint point = proto.getConnectionPoint();
33-
final Dbms dbms = point.getDbms();
34-
if (StringUtils.startsWithIgnoreCase(dbms.getName(), "AZ_COSMOS")) {
35-
final String accountId = point.getAdditionalProperty(AzureCosmosDbAccountParamEditor.KEY_COSMOS_ACCOUNT_ID);
32+
final String accountId = point.getAdditionalProperty(AzureCosmosDbAccountParamEditor.KEY_COSMOS_ACCOUNT_ID);
33+
if (StringUtils.isNotBlank(accountId)) {
3634
final Map<String, String> properties = new HashMap<>();
37-
if (StringUtils.isNotBlank(accountId) && !StringUtils.equals(accountId, AzureCosmosDbAccountParamEditor.NONE)) {
35+
if (!StringUtils.equals(accountId, AzureCosmosDbAccountParamEditor.NONE)) {
3836
final ResourceId id = ResourceId.fromString(accountId);
3937
properties.put("subscriptionId", id.subscriptionId());
4038
}
41-
properties.put("kind", dbms.getName());
4239
properties.put(SERVICE_NAME, "cosmos");
4340
properties.put(OPERATION_NAME, "connect_jdbc_from_dbtools");
4441
properties.put(OP_NAME, "cosmos.connect_jdbc_from_dbtools");

0 commit comments

Comments
 (0)