This is an automated email from the ASF dual-hosted git repository.

sdedic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new d5b874f0f9 Display DB welcome only when no connections are defined.
     new d2f4382da8 Merge pull request #5613 from 
sdedic/lsp/welcome-after-dbinit
d5b874f0f9 is described below

commit d5b874f0f9f76802c92c993eec96eb0caf1a1bd3
Author: Svata Dedic <[email protected]>
AuthorDate: Mon Mar 6 10:14:16 2023 +0100

    Display DB welcome only when no connections are defined.
---
 java/java.lsp.server/vscode/package.json     |  3 ++-
 java/java.lsp.server/vscode/src/explorer.ts  | 35 +++++++++++++++++++++-------
 java/java.lsp.server/vscode/src/extension.ts |  8 +++++++
 3 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/java/java.lsp.server/vscode/package.json 
b/java/java.lsp.server/vscode/package.json
index 59eaea0505..b71c9c8fbc 100644
--- a/java/java.lsp.server/vscode/package.json
+++ b/java/java.lsp.server/vscode/package.json
@@ -88,7 +88,8 @@
                "viewsWelcome": [
                        {
                                "view": "database.connections",
-                               "contents": "No database connections 
found.\n[Add Database Connection](command:db.add.connection)\n[Add Oracle 
Autonomous 
DB](command:nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddADBAction)"
+                               "contents": "No database connections 
found.\n[Add Database Connection](command:db.add.connection)\n[Add Oracle 
Autonomous 
DB](command:nbls:Tools:org.netbeans.modules.cloud.oracle.actions.AddADBAction)",
+                               "when": "nb.database.view.active"
                        }
                ],
                "configuration": {
diff --git a/java/java.lsp.server/vscode/src/explorer.ts 
b/java/java.lsp.server/vscode/src/explorer.ts
index c6e521ae45..ba4a252a05 100644
--- a/java/java.lsp.server/vscode/src/explorer.ts
+++ b/java/java.lsp.server/vscode/src/explorer.ts
@@ -279,11 +279,13 @@ export class TreeViewService extends vscode.Disposable {
 
 export interface TreeItemDecorator<T> extends vscode.Disposable {
   decorateTreeItem(element: T, item : vscode.TreeItem): vscode.TreeItem | 
Thenable<vscode.TreeItem>;
+  decorateChildren(element: T, children: Visualizer[]): Visualizer[] | 
Thenable<Visualizer[]>;
 }
 
 export interface CustomizableTreeDataProvider<T> extends 
vscode.TreeDataProvider<T> {
   fireItemChange(item? : T) : void;
   addItemDecorator(deco : TreeItemDecorator<T>) : vscode.Disposable;
+  getRoot() : T;
 }
 
 class VisualizerProvider extends vscode.Disposable implements 
CustomizableTreeDataProvider<Visualizer> {
@@ -583,6 +585,8 @@ class VisualizerProvider extends vscode.Disposable 
implements CustomizableTreeDa
       this.log.appendLine(`Doing getChildren on ${e?.idstring()}`);
     }
 
+    let decos : TreeItemDecorator<Visualizer>[] = [...this.decorators];
+    const parent = e || this.root;
     async function collectResults(list : Visualizer[], arr: any, element: 
Visualizer): Promise<Visualizer[]> {
       let res : Visualizer[] = [];
       let now : Visualizer[] | undefined;
@@ -594,6 +598,25 @@ class VisualizerProvider extends vscode.Disposable 
implements CustomizableTreeDa
           res.push(v);
         }
       }
+
+      if (decos.length > 0) {
+        async function f(orig: Visualizer[]) : Promise<Visualizer[]> {
+          const deco = decos.shift();
+          if (!deco) {
+            return orig;
+          }
+          // decorateChildren(element: T, item : Visualizer, children: 
Visualizer[]): Visualizer[] | Thenable<Visualizer[]>;
+          const decorated = deco.decorateChildren(parent, orig);
+          if (Array.isArray(decorated)) {
+              return f(decorated);
+          } else {
+              return (decorated as Thenable<Visualizer[]>).then(f);
+          }
+        }
+
+        res = await f(res);
+      }
+
       now = element.updateChildren(res, self);
       for (let i = 0; i < now.length; i++) {
         const v = now[i];
@@ -605,15 +628,9 @@ class VisualizerProvider extends vscode.Disposable 
implements CustomizableTreeDa
     }
 
     return self.wrap((list) => self.queryVisualizer(e, list, () => {
-        if (e) {
-          return this.client.sendRequest(NodeInfoRequest.children, { nodeId : 
e.data.id}).then(async (arr) => {
-            return collectResults(list, arr, e);
-          });
-        } else {
-          return this.client.sendRequest(NodeInfoRequest.children, { nodeId: 
this.root.data.id}).then(async (arr) => {
-            return collectResults(list, arr, this.root);
-          });
-        }
+        return this.client.sendRequest(NodeInfoRequest.children, { nodeId : 
parent.data.id}).then(async (arr) => {
+          return collectResults(list, arr, parent);
+        });
       }
     ));
   }
diff --git a/java/java.lsp.server/vscode/src/extension.ts 
b/java/java.lsp.server/vscode/src/extension.ts
index f74dde140b..745bb50458 100644
--- a/java/java.lsp.server/vscode/src/extension.ts
+++ b/java/java.lsp.server/vscode/src/extension.ts
@@ -980,12 +980,20 @@ function doActivateWithJDK(specifiedJDK: string | null, 
context: ExtensionContex
     class Decorator implements TreeItemDecorator<Visualizer> {
         private provider : CustomizableTreeDataProvider<Visualizer>;
         private setCommand : vscode.Disposable;
+        private initialized: boolean = false;
 
         constructor(provider : CustomizableTreeDataProvider<Visualizer>, 
client : NbLanguageClient) {
             this.provider = provider;
             this.setCommand = 
vscode.commands.registerCommand('java.local.db.set.preferred.connection', (n) 
=> this.setPreferred(n));
         }
 
+        decorateChildren(element: Visualizer, children: Visualizer[]): 
Visualizer[] {
+            if (element.id == this.provider.getRoot().id) {
+                vscode.commands.executeCommand('setContext', 
'nb.database.view.active', children.length == 0);
+            }
+            return children;
+        }
+
         async decorateTreeItem(vis : Visualizer, item : vscode.TreeItem) : 
Promise<vscode.TreeItem> {
             if (!(item.contextValue && 
item.contextValue.match(/class:ddl.DBConnection/))) {
                 return item;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to