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

jhorvath 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 b973af2fdc Adding DB configuration provider for NBLS (#6058)
b973af2fdc is described below

commit b973af2fdc373ac9d55d58b65fa92006e99d92e1
Author: jhorvath <[email protected]>
AuthorDate: Mon Jun 12 13:24:11 2023 +0200

    Adding DB configuration provider for NBLS (#6058)
    
    * Adding DB configuration provider for NBLS
---
 .../modules/cloud/oracle/actions/AddADBAction.java |  3 +-
 .../cloud/oracle/actions/DownloadWalletAction.java |  6 ++-
 .../cloud/oracle/actions/DownloadWalletDialog.java | 13 +++--
 ...etEnvCommand.java => DBConnectionProvider.java} | 36 ++++++-------
 java/java.lsp.server/vscode/package.json           |  5 --
 .../vscode/src/dbConfigurationProvider.ts          | 61 ++++++++++++++++++++++
 java/java.lsp.server/vscode/src/extension.ts       |  2 +
 7 files changed, 97 insertions(+), 29 deletions(-)

diff --git 
a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/AddADBAction.java
 
b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/AddADBAction.java
index d394e81903..9321b41388 100644
--- 
a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/AddADBAction.java
+++ 
b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/AddADBAction.java
@@ -183,7 +183,8 @@ public class AddADBAction implements ActionListener {
                         DownloadWalletDialog.getWalletsDir().getAbsolutePath(),
                         AbstractPasswordPanel.generatePassword(),
                         (String) result.get(USERNAME),
-                        ((String) result.get(PASSWORD)).toCharArray());
+                        ((String) result.get(PASSWORD)).toCharArray(),
+                        selectedDatabase.getKey().getValue());
                 action.addConnection(info);
             } catch (IOException ex) {
                 Exceptions.printStackTrace(ex);
diff --git 
a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletAction.java
 
b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletAction.java
index 3e0df5933d..1f25d17a58 100644
--- 
a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletAction.java
+++ 
b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletAction.java
@@ -27,6 +27,7 @@ import java.text.MessageFormat;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
+import java.util.Properties;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
@@ -147,6 +148,8 @@ public class DownloadWalletAction extends AbstractAction 
implements ContextAware
                             return;
                         }
                     }
+                    Properties props = new Properties();
+                    props.put("OCID", p.getOcid()); //NOI18N
                     String dbUrl = MessageFormat.format(URL_TEMPLATE, 
connectionName, BaseUtilities.escapeParameters(new String[] { 
walletPath.toString() }));
                     DatabaseConnection dbConn = DatabaseConnection.create(
                             drivers[0], 
@@ -155,7 +158,8 @@ public class DownloadWalletAction extends AbstractAction 
implements ContextAware
                             p.getDbUser(), 
                             new String(p.getDbPassword()), 
                             true, 
-                            context.getName());
+                            context.getName(),
+                            props);
                     ConnectionManager.getDefault().addConnection(dbConn);
                 }
 
diff --git 
a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletDialog.java
 
b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletDialog.java
index ad82bf0f46..051424b948 100644
--- 
a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletDialog.java
+++ 
b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/actions/DownloadWalletDialog.java
@@ -90,7 +90,7 @@ final class DownloadWalletDialog extends 
AbstractPasswordPanel {
                 String path = dlgPanel.jTextFieldLocation.getText();
                 char[] passwd = dlgPanel.jPasswordField.getPassword();
                 
NbPreferences.forModule(DownloadWalletAction.class).put(LAST_USED_DIR, path); 
//NOI18N
-                return Optional.of(new WalletInfo(path, passwd, null, null));
+                return Optional.of(new WalletInfo(path, passwd, null, null, 
db.getKey().getValue()));
             }
         } else {
             try {
@@ -109,7 +109,7 @@ final class DownloadWalletDialog extends 
AbstractPasswordPanel {
                     return Optional.empty();
                 }
                 char[] password = inp.getInputText().toCharArray();
-                return Optional.of(new 
WalletInfo(walletsDir.getAbsolutePath(), generatePassword(), username, 
password));
+                return Optional.of(new 
WalletInfo(walletsDir.getAbsolutePath(), generatePassword(), username, 
password, db.getKey().getValue()));
             } catch (IOException ex) {
                 Exceptions.printStackTrace(ex);
             }
@@ -253,12 +253,14 @@ final class DownloadWalletDialog extends 
AbstractPasswordPanel {
         private char[] walletPassword;
         private String dbUser;
         private char[] dbPassword;
+        private String ocid;
 
-        public WalletInfo(String path, char[] walletPassword, String dbUser, 
char[] dbPassword) {
+        public WalletInfo(String path, char[] walletPassword, String dbUser, 
char[] dbPassword, String ocid) {
             this.path = path;
             this.walletPassword = walletPassword;
             this.dbUser = dbUser;
             this.dbPassword = dbPassword;
+            this.ocid = ocid;
         }
 
         public String getPath() {
@@ -276,7 +278,10 @@ final class DownloadWalletDialog extends 
AbstractPasswordPanel {
         public char[] getDbPassword() {
             return dbPassword;
         }
-        
+
+        public String getOcid() {
+            return ocid;
+        }
     }
 
     // Variables declaration - do not modify//GEN-BEGIN:variables
diff --git 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBSetEnvCommand.java
 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBConnectionProvider.java
similarity index 65%
rename from 
java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBSetEnvCommand.java
rename to 
java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBConnectionProvider.java
index e27c7cf334..254404f0be 100644
--- 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBSetEnvCommand.java
+++ 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/db/DBConnectionProvider.java
@@ -26,51 +26,51 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
-import java.util.stream.Collectors;
 import org.eclipse.lsp4j.CodeAction;
 import org.eclipse.lsp4j.CodeActionParams;
 import org.netbeans.api.db.explorer.ConnectionManager;
 import org.netbeans.api.db.explorer.DatabaseConnection;
 import org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider;
 import org.netbeans.modules.java.lsp.server.protocol.NbCodeLanguageClient;
-import org.netbeans.modules.java.lsp.server.protocol.UpdateConfigParams;
 import org.netbeans.modules.parsing.api.ResultIterator;
 import org.openide.util.lookup.ServiceProvider;
 
 /**
- * Updates Run Configuratoin with Database env variables.
  * 
  * @author Jan Horvath
  */
 @ServiceProvider(service = CodeActionsProvider.class)
-public class DBSetEnvCommand extends CodeActionsProvider {
-    private static final String  COMMAND_SET_DB_ENV = "java.db.set.env"; 
//NOI18N
-    private static final String CONFIG_SECTION = "java+.runConfig"; //NOI18N
+public class DBConnectionProvider extends CodeActionsProvider{
+    private static final String  GET_DB_CONNECTION = "java.db.connection"; 
//NOI18N
     
     private static final Set<String> COMMANDS = new HashSet<>(Arrays.asList(
-        COMMAND_SET_DB_ENV
+        GET_DB_CONNECTION
     ));
     
+
     @Override
     public List<CodeAction> getCodeActions(ResultIterator resultIterator, 
CodeActionParams params) throws Exception {
         return Collections.emptyList();
     }
+    
     @Override
     public CompletableFuture<Object> processCommand(NbCodeLanguageClient 
client, String command, List<Object> arguments) {
-        if (!COMMAND_SET_DB_ENV.equals(command)) {
+        if (!GET_DB_CONNECTION.equals(command)) {
             return null;
         }
+        Map<String, String> result = new HashMap<> ();
         DatabaseConnection conn = 
ConnectionManager.getDefault().getPreferredConnection(true);
-        Map<String, String> props = new HashMap<>();
-        props.put("DATASOURCES_DEFAULT_URL", conn.getDatabaseURL()); //NOI18N
-        props.put("DATASOURCES_DEFAULT_USERNAME", conn.getUser()); //NOI18N
-        props.put("DATASOURCES_DEFAULT_PASSWORD", conn.getPassword()); //NOI18N
-        props.put("DATASOURCES_DEFAULT_DRIVER_CLASS_NAME", 
conn.getDriverClass()); //NOI18N
-        String values = props.entrySet().stream()
-                .map(e -> e.getKey() + "=" + e.getValue()) //NOI18N
-                .collect(Collectors.joining(",")); //NOI18N
-        client.configurationUpdate(new UpdateConfigParams(CONFIG_SECTION, 
"env", values)); //NOI18N
-        return CompletableFuture.completedFuture(props);
+            
+        result.put("DATASOURCES_DEFAULT_URL", conn.getDatabaseURL()); //NOI18N
+        result.put("DATASOURCES_DEFAULT_USERNAME", conn.getUser()); //NOI18N
+        result.put("DATASOURCES_DEFAULT_PASSWORD", conn.getPassword()); 
//NOI18N
+        result.put("DATASOURCES_DEFAULT_DRIVER_CLASS_NAME", 
conn.getDriverClass()); //NOI18N
+        String ocid = (String) conn.getConnectionProperties().get("OCID"); 
//NOI18N
+        if (ocid != null && !ocid.isEmpty()) {
+            result.put("DATASOURCES_DEFAULT_OCID", ocid); //NOI18N
+        }
+            
+        return CompletableFuture.completedFuture(result);
     }
     
     @Override
diff --git a/java/java.lsp.server/vscode/package.json 
b/java/java.lsp.server/vscode/package.json
index 2c53987c18..14d50031da 100644
--- a/java/java.lsp.server/vscode/package.json
+++ b/java/java.lsp.server/vscode/package.json
@@ -596,11 +596,6 @@
                                "command": 
"nbls:Tools:org.netbeans.modules.cloud.oracle.actions.OpenServiceConsoleAction",
                                "title": "Open Service Console"
                        },
-                       {
-                               "command": "java.db.set.env",
-                               "title": "Set Database Environment Variables",
-                               "category": "Database"
-                       },
                        {
                                "command": "java.select.editor.projects",
                                "title": "Reveal active editor in Projects",
diff --git a/java/java.lsp.server/vscode/src/dbConfigurationProvider.ts 
b/java/java.lsp.server/vscode/src/dbConfigurationProvider.ts
new file mode 100644
index 0000000000..79b094fe69
--- /dev/null
+++ b/java/java.lsp.server/vscode/src/dbConfigurationProvider.ts
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import * as vscode from 'vscode';
+import { homedir } from 'os';
+
+export async function initializeRunConfiguration(): Promise<boolean> {
+       const java = await vscode.workspace.findFiles('**/*.java', 
'**/node_modules/**', 1);
+       if (java?.length > 0) {
+               const maven = await vscode.workspace.findFiles('pom.xml', 
'**/node_modules/**', 1);
+               if (maven?.length > 0) {
+                       return true;
+               }
+               const gradle = await vscode.workspace.findFiles('build.gradle', 
'**/node_modules/**', 1);
+               if (gradle?.length > 0) {
+                       return true;
+               }
+       }
+       return false;
+}
+
+export class DBConfigurationProvider implements 
vscode.DebugConfigurationProvider {
+       resolveDebugConfiguration(_folder: vscode.WorkspaceFolder | undefined, 
config: vscode.DebugConfiguration, _token?: vscode.CancellationToken): 
vscode.ProviderResult<vscode.DebugConfiguration> {
+               return new Promise<vscode.DebugConfiguration>(resolve => {
+                       resolve(config);
+               });
+       }
+
+       resolveDebugConfigurationWithSubstitutedVariables?(_folder: 
vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, _token?: 
vscode.CancellationToken): vscode.ProviderResult<vscode.DebugConfiguration> {
+        return new Promise<vscode.DebugConfiguration>(async resolve => {
+                       let o: Object = await 
vscode.commands.executeCommand('java.db.connection');
+                       if (config === undefined) {
+                               config = {} as vscode.DebugConfiguration;
+                       }
+                       if (config.env === undefined) {
+                               config.env = {};
+                       }
+                       for (let val of Object.keys(o) as (keyof typeof o)[]) {
+                               let value = o[val];
+                               config.env[val as string] = value;
+                       }
+                       resolve(config);
+               });
+       }
+}
\ No newline at end of file
diff --git a/java/java.lsp.server/vscode/src/extension.ts 
b/java/java.lsp.server/vscode/src/extension.ts
index 02297afb33..ac65bff14f 100644
--- a/java/java.lsp.server/vscode/src/extension.ts
+++ b/java/java.lsp.server/vscode/src/extension.ts
@@ -53,6 +53,7 @@ import { asRanges, StatusMessageRequest, 
ShowStatusMessageParams, QuickPickReque
 import * as launchConfigurations from './launchConfigurations';
 import { createTreeViewService, TreeViewService, TreeItemDecorator, 
Visualizer, CustomizableTreeDataProvider } from './explorer';
 import { initializeRunConfiguration, runConfigurationProvider, 
runConfigurationNodeProvider, configureRunSettings, runConfigurationUpdateAll } 
from './runConfiguration';
+import { DBConfigurationProvider } from './dbConfigurationProvider';
 import { TLSSocket } from 'tls';
 import { InputStep, MultiStepInput } from './utils';
 import { env } from 'process';
@@ -412,6 +413,7 @@ export function activate(context: ExtensionContext): 
VSNetBeansAPI {
     // initialize Run Configuration
     initializeRunConfiguration().then(initialized => {
                if (initialized) {
+            
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('java+',
 new DBConfigurationProvider()));
                        
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('java+',
 runConfigurationProvider));
                        
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('java',
 runConfigurationProvider));
                        
context.subscriptions.push(vscode.window.registerTreeDataProvider('run-config', 
runConfigurationNodeProvider));


---------------------------------------------------------------------
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