Skip to content

Commit 28ef299

Browse files
Flanker-MSFTFlanker-MSFT
authored andcommitted
Support create new document directly in sql/mongo cosmos db
1 parent cbdf6e6 commit 28ef299

File tree

5 files changed

+87
-1
lines changed

5 files changed

+87
-1
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.microsoft.azure.toolkit.intellij.common.action.IntellijActionsContributor;
1717
import com.microsoft.azure.toolkit.intellij.connector.AzureServiceResource;
1818
import com.microsoft.azure.toolkit.intellij.connector.ConnectorDialog;
19+
import com.microsoft.azure.toolkit.intellij.cosmos.actions.CreateNewDocumentAction;
1920
import com.microsoft.azure.toolkit.intellij.cosmos.actions.OpenCosmosDocumentAction;
2021
import com.microsoft.azure.toolkit.intellij.cosmos.actions.UploadCosmosDocumentAction;
2122
import com.microsoft.azure.toolkit.intellij.cosmos.connection.CassandraCosmosDBAccountResourceDefinition;
@@ -75,6 +76,12 @@ public void registerHandlers(AzureActionManager am) {
7576
final BiConsumer<ICosmosDocumentContainer<?>, AnActionEvent> importHandler = (c, e) -> UploadCosmosDocumentAction.importDocument(c, e.getProject());
7677
am.registerHandler(CosmosActionsContributor.IMPORT_DOCUMENT, importCondition, importHandler);
7778

79+
final BiPredicate<ICosmosDocumentContainer<?>, AnActionEvent> createDocumentCondition = (r, e) ->
80+
r instanceof ICosmosDocumentContainer && r.getFormalStatus().isConnected();
81+
final BiConsumer<ICosmosDocumentContainer<?>, AnActionEvent> createDocumentHandler = (c, e) ->
82+
AzureTaskManager.getInstance().runLater(() -> CreateNewDocumentAction.create(c, e.getProject()));
83+
am.registerHandler(CosmosActionsContributor.CREATE_DOCUMENT, createDocumentCondition, createDocumentHandler);
84+
7885
final BiConsumer<ResourceGroup, AnActionEvent> groupCreateHandler = (r, e) ->
7986
CreateCosmosDBAccountAction.create(e.getProject(), getDefaultConfig(r));
8087
am.registerHandler(CosmosActionsContributor.GROUP_CREATE_COSMOS_SERVICE, (r, e) -> true, groupCreateHandler);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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+
package com.microsoft.azure.toolkit.intellij.cosmos.actions;
6+
7+
import com.fasterxml.jackson.core.JsonProcessingException;
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
import com.fasterxml.jackson.databind.node.ObjectNode;
10+
import com.intellij.openapi.application.WriteAction;
11+
import com.intellij.openapi.fileEditor.FileEditorManager;
12+
import com.intellij.openapi.project.Project;
13+
import com.intellij.openapi.util.io.FileUtil;
14+
import com.intellij.openapi.vfs.VirtualFile;
15+
import com.microsoft.azure.toolkit.intellij.common.fileexplorer.VirtualFileActions;
16+
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager;
17+
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
18+
import com.microsoft.azure.toolkit.lib.common.operation.OperationBundle;
19+
import com.microsoft.azure.toolkit.lib.common.task.AzureTask;
20+
import com.microsoft.azure.toolkit.lib.common.task.AzureTaskManager;
21+
import com.microsoft.azure.toolkit.lib.cosmos.ICosmosDocumentContainer;
22+
import lombok.SneakyThrows;
23+
24+
import javax.annotation.Nonnull;
25+
import java.io.File;
26+
import java.util.Objects;
27+
import java.util.UUID;
28+
import java.util.function.Function;
29+
30+
public class CreateNewDocumentAction {
31+
32+
private static final String DEFAULT_CONTENT =
33+
"{\n" +
34+
"\t\"id\": \"replace_with_new_document_id\"\n" +
35+
"}";
36+
37+
@AzureOperation(name = "user/cosmos.create_document.container", params = {"container.getName()"})
38+
@SneakyThrows
39+
public static void create(@Nonnull final ICosmosDocumentContainer<?> container, @Nonnull final Project project) {
40+
final FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
41+
final VirtualFile virtualFile = getOrCreateVirtualFile(container, fileEditorManager);
42+
final Function<String, Boolean> onSave = content -> {
43+
AzureTaskManager.getInstance().runInBackground(new AzureTask<>(OperationBundle.description("internal/cosmos.create_document.container"), () -> {
44+
try {
45+
final ObjectNode node = new ObjectMapper().readValue(content, ObjectNode.class);
46+
container.importDocument(node);
47+
AzureMessager.getMessager().info(String.format("Save document to %s successfully.", container.getName()));
48+
} catch (final RuntimeException | JsonProcessingException e) {
49+
AzureMessager.getMessager().error(e);
50+
}
51+
}));
52+
return true;
53+
};
54+
final Runnable onClose = () -> WriteAction.run(() -> FileUtil.delete(new File(virtualFile.getPath())));
55+
VirtualFileActions.openFileInEditor(virtualFile, onSave, onClose, fileEditorManager);
56+
}
57+
58+
private static synchronized VirtualFile getOrCreateVirtualFile(@Nonnull final ICosmosDocumentContainer<?> container, final FileEditorManager manager) {
59+
final VirtualFile virtualFile = VirtualFileActions.getVirtualFile(container.getId(), manager);
60+
return Objects.isNull(virtualFile) ? createVirtualFile(container, manager) : virtualFile;
61+
}
62+
63+
@SneakyThrows
64+
private static VirtualFile createVirtualFile(@Nonnull final ICosmosDocumentContainer<?> container, final FileEditorManager manager) {
65+
final File tempFile = FileUtil.createTempFile(UUID.randomUUID().toString(), ".json", true);
66+
FileUtil.writeToFile(tempFile, DEFAULT_CONTENT);
67+
return VirtualFileActions.createVirtualFile(container.getId(), tempFile.getName(), tempFile, manager);
68+
}
69+
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ public static void open(ICosmosDocument target, Project project) {
6262
AzureTaskManager.getInstance().runLater(new AzureTask<>(title, () -> VirtualFileActions.openFileInEditor(virtualFile, onSave, onClose, fileEditorManager)));
6363
}
6464

65-
6665
private static synchronized VirtualFile getOrCreateVirtualFile(final ICosmosDocument document, final FileEditorManager manager) {
6766
final VirtualFile virtualFile = VirtualFileActions.getVirtualFile(document.getId(), manager);
6867
return Objects.isNull(virtualFile) ? createVirtualFile(document, manager) : virtualFile;

Utils/azure-toolkit-ide-libs/azure-toolkit-ide-common-lib/src/main/resources/bundles/com/microsoft/azure/toolkit/operation.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ boundary/function.trigger_with_http_client.function=trigger function({0}) with H
166166
boundary/common.open_log_streaming_console.resource=open streaming logs console for resource({0})
167167
internal/favorite.add_favorite=Add to Favorites
168168
internal/cosmos.update_document.document=update document ({0})
169+
internal/cosmos.create_document.container=create document in container ({0})
169170
internal/feedback.rewind_operation_score_on_error=rewind operation score on error
170171
internal/feedback.add_operation_score=increment operation score
171172
resource.get.id=get resource by ID {0}
@@ -512,6 +513,7 @@ user/appservice.show_app_setting.key=show app setting ({0})
512513
user/cosmos.copy_connection_string.account=copy connection string of Azure Cosmos DB Account ({0})
513514
user/cosmos.create_cosmos_db_account.group=create Azure Cosmos DB account in resource group ({0})
514515
user/cosmos.import_document.container=import document into container ({0})
516+
user/cosmos.create_document.container=create document in container ({0})
515517
user/cosmos.load_more_documents.container=load more documents of ({0})
516518
user/cosmos.open_data_explorer.account=open Azure Cosmos DB Account ({0}) in data explorer on Azure Portal
517519
user/database.try_ultimate=try IntelliJ Ultimate Edition

Utils/azure-toolkit-ide-libs/azure-toolkit-ide-cosmos-lib/src/main/java/com/microsoft/azure/toolkit/ide/cosmos/CosmosActionsContributor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class CosmosActionsContributor implements IActionsContributor {
3939
public static final Action.Id<CosmosDBAccount> OPEN_DATA_EXPLORER = Action.Id.of("user/cosmos.open_data_explorer.account");
4040
public static final Action.Id<CosmosDBAccount> COPY_CONNECTION_STRING = Action.Id.of("user/cosmos.copy_connection_string.account");
4141
public static final Action.Id<ICosmosDocumentContainer<?>> IMPORT_DOCUMENT = Action.Id.of("user/cosmos.import_document.container");
42+
public static final Action.Id<ICosmosDocumentContainer<?>> CREATE_DOCUMENT = Action.Id.of("user/cosmos.create_document.container");
4243
public static final Action.Id<ICosmosDocument> OPEN_DOCUMENT = Action.Id.of("user/cosmos.open_document.document");
4344
public static final Action.Id<ResourceGroup> GROUP_CREATE_COSMOS_SERVICE = Action.Id.of("user/cosmos.create_cosmos_db_account.group");
4445

@@ -92,6 +93,13 @@ public void registerActions(AzureActionManager am) {
9293
.visibleWhen(s -> s instanceof ICosmosDocumentContainer<?>)
9394
.enableWhen(s -> s.getFormalStatus().isConnected())
9495
.register(am);
96+
97+
new Action<>(CREATE_DOCUMENT)
98+
.withLabel("New Document")
99+
.withIdParam(AzResource::getName)
100+
.visibleWhen(s -> s instanceof ICosmosDocumentContainer<?>)
101+
.enableWhen(s -> s.getFormalStatus().isConnected())
102+
.register(am);
95103
}
96104

97105
@Override
@@ -156,6 +164,7 @@ public void registerGroups(AzureActionManager am) {
156164
ResourceCommonActionsContributor.REFRESH,
157165
ResourceCommonActionsContributor.OPEN_PORTAL_URL,
158166
"---",
167+
CosmosActionsContributor.CREATE_DOCUMENT,
159168
CosmosActionsContributor.IMPORT_DOCUMENT,
160169
"---",
161170
ResourceCommonActionsContributor.DELETE

0 commit comments

Comments
 (0)