JaroslavTulach commented on a change in pull request #3352:
URL: https://github.com/apache/netbeans/pull/3352#discussion_r762678916



##########
File path: enterprise/cloud.oracle/build.xml
##########
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>

Review comment:
       No license, but no failed build. Strange.

##########
File path: 
enterprise/cloud.oracle/src/org/netbeans/api/cloud/oracle/OCIManager.java
##########
@@ -0,0 +1,196 @@
+/*
+ * 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.
+ */
+package org.netbeans.api.cloud.oracle;
+
+import com.oracle.bmc.ConfigFileReader;
+import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider;
+import com.oracle.bmc.database.DatabaseClient;
+import com.oracle.bmc.database.model.GenerateAutonomousDatabaseWalletDetails;
+import 
com.oracle.bmc.database.requests.GenerateAutonomousDatabaseWalletRequest;
+import com.oracle.bmc.database.requests.ListAutonomousDatabasesRequest;
+import 
com.oracle.bmc.database.responses.GenerateAutonomousDatabaseWalletResponse;
+import com.oracle.bmc.identity.Identity;
+import com.oracle.bmc.identity.IdentityClient;
+import com.oracle.bmc.identity.model.Tenancy;
+import com.oracle.bmc.identity.requests.GetTenancyRequest;
+import com.oracle.bmc.identity.requests.ListCompartmentsRequest;
+import com.oracle.bmc.identity.responses.GetTenancyResponse;
+import com.oracle.bmc.identity.responses.ListCompartmentsResponse;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import org.openide.util.Exceptions;
+
+/**
+ * Manages access to Oracle Cloud Resources
+ * 
+ * @author Jan Horvath
+ */
+public final class OCIManager {
+
+    
+    private ConfigFileReader.ConfigFile configFile;
+    private ConfigFileAuthenticationDetailsProvider provider;
+    private ConfigFileAuthenticationDetailsProvider configProvider;
+    
+    private static OCIManager instance;
+
+    private OCIManager() {
+        init();
+    }
+    
+    private void init() {
+        try {
+            configFile = ConfigFileReader.parseDefault();
+            provider = new ConfigFileAuthenticationDetailsProvider(configFile);
+            configProvider = new 
ConfigFileAuthenticationDetailsProvider(configFile);
+        } catch (IOException ex) {
+            Exceptions.printStackTrace(ex);
+        }
+    }
+    
+    public static synchronized OCIManager getDefault() {
+        if (instance == null) {
+            instance = new OCIManager();
+        }
+        return instance;
+    }
+
+    /**
+     * Retrieves information about Tenancy configured in ~/.oci
+     * 
+     * @return Optional {@code OCIItem} describing the Tenancy. If 
Optional.empty() OCI configuration was not found
+     */
+    public Optional<OCIItem> getTenancy() {
+        if (provider == null) {
+            return Optional.empty();
+        }
+        Identity identityClient = new IdentityClient(provider);
+        identityClient.setRegion(configProvider.getRegion());
+
+        GetTenancyRequest gtr = 
GetTenancyRequest.builder().tenancyId(provider.getTenantId()).build();
+        GetTenancyResponse response = identityClient.getTenancy(gtr);
+        Tenancy tenancy = response.getTenancy();
+        OCIItem item = new OCIItem(tenancy.getId(), tenancy.getName());
+        return Optional.of(item);
+    }
+    
+    /**
+     * Retrieves list of Compartments in the Tenancy.
+     * 
+     * @param tenancyId OCID of the Tenancy
+     * @return List of {@code OCIItem} describing tenancy Compartments
+     */
+    public List<OCIItem> getCompartments(String tenancyId) {
+        Identity identityClient = new IdentityClient(provider);
+        identityClient.setRegion(configProvider.getRegion());
+
+        List<OCIItem> compartments = new ArrayList<>();
+
+        String nextPageToken = null;
+        do {
+            ListCompartmentsResponse response
+                    = identityClient.listCompartments(
+                            ListCompartmentsRequest.builder()
+                                    .limit(30)
+                                    .compartmentId(tenancyId)
+                                    
.accessLevel(ListCompartmentsRequest.AccessLevel.Accessible)
+                                    .compartmentIdInSubtree(Boolean.TRUE)
+                                    .page(nextPageToken)
+                                    .build());
+            response.getItems().stream()
+                    .map(c -> new OCIItem(c.getId(), c.getName()))
+                    .collect(Collectors.toCollection(() -> compartments));
+            nextPageToken = response.getOpcNextPage();
+        } while (nextPageToken != null);
+        return compartments;
+    }
+
+    /**
+     * Retrieves list of Databases belonging to a given Compartment.
+     * 
+     * @param compartmentId OCID of the Compartment
+     * @return List of {@code OCIItem} describing databases in a given 
Compartment
+     */
+    public List<DatabaseItem> getDatabases(String compartmentId) {
+        DatabaseClient client = new DatabaseClient(configProvider);
+        ListAutonomousDatabasesRequest listAutonomousDatabasesRequest = 
ListAutonomousDatabasesRequest.builder()
+                .compartmentId(compartmentId)
+                .limit(88)
+                .build();
+
+        return client.listAutonomousDatabases(listAutonomousDatabasesRequest)
+                .getItems()
+                .stream()
+                .map(d -> new DatabaseItem(d.getId(), d.getDbName(), 
d.getServiceConsoleUrl()))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * Creates and downloads a wallet for the specified Autonomous Database.

Review comment:
       Where the downloaded wallet is stored?

##########
File path: 
enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OpenServiceConsoleAction.java
##########
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+package org.netbeans.modules.cloud.oracle;
+
+import java.awt.Desktop;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import org.netbeans.api.cloud.oracle.DatabaseItem;
+import org.openide.awt.ActionID;
+import org.openide.awt.ActionReference;
+import org.openide.awt.ActionReferences;
+import org.openide.awt.ActionRegistration;
+import org.openide.util.Exceptions;
+import org.openide.util.NbBundle.Messages;
+
+@ActionID(
+        category = "OpenServiceConsole",

Review comment:
       A new category? 

##########
File path: 
enterprise/cloud.oracle/test/unit/src/org/netbeans/modules/cloud/oracle/DownloadWalletDialogTest.java
##########
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+package org.netbeans.modules.cloud.oracle;
+
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+/**
+ *
+ * @author Jan Horvath
+ */
+public class DownloadWalletDialogTest {
+    
+    public DownloadWalletDialogTest() {
+    }
+
+    /**
+     * Test of showDialog method, of class DownloadWalletDialog.
+     */
+    @Test
+    public void testCheckPassword() {

Review comment:
       Great test for the UI!

##########
File path: 
enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/DownloadWalletAction.java
##########
@@ -0,0 +1,76 @@
+/*
+ * 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.
+ */
+package org.netbeans.modules.cloud.oracle;
+
+import org.netbeans.api.cloud.oracle.OCIItem;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.util.Optional;
+import org.netbeans.api.cloud.oracle.OCIManager;
+import org.openide.awt.ActionID;
+import org.openide.awt.ActionReference;
+import org.openide.awt.ActionReferences;
+import org.openide.awt.ActionRegistration;
+import org.openide.util.Exceptions;
+import org.openide.util.NbBundle;
+import org.openide.util.Pair;
+
+/**
+ *
+ * @author Jan Horvath
+ */
+@ActionID(
+        category = "Tools",
+        id = "cloud.oracle.DownloadWalletAction"

Review comment:
       Shouldn't the ID better be derived (prefixed) from code name base of the 
module?

##########
File path: 
enterprise/cloud.oracle/src/org/netbeans/api/cloud/oracle/DatabaseItem.java
##########
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+package org.netbeans.api.cloud.oracle;
+
+/**
+ *
+ * @author honza
+ */
+public class DatabaseItem extends OCIItem {

Review comment:
       API, really? For whom? 
   
   One thought: API modules should better be autoload - then they can't have UI 
registration. E.g. contrary to current state - however it all depends on the 
actual use-case.

##########
File path: 
enterprise/cloud.oracle/src/org/netbeans/api/cloud/oracle/OCIItem.java
##########
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+package org.netbeans.api.cloud.oracle;
+
+/**
+ * Represents Oracle Cloud Resource identified by Oracle Cloud Identifier 
(OCID)
+ * 
+ * @author Jan Horvath
+ */
+public class OCIItem {
+    final String id;
+    final String name;
+
+    /**
+    * Construct a new {@code OCIItem}.
+    * 
+    * @param id OCID of the item
+    * @param name Name of the item
+    */
+    public OCIItem(String id, String name) {

Review comment:
       Subclassable by public!?

##########
File path: ide/server/src/org/netbeans/api/server/CloudProvider.java
##########
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+package org.netbeans.api.server;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import org.netbeans.spi.server.ServerInstanceProvider;
+import org.openide.util.lookup.NamedServiceDefinition;
+
+/**
+ * Registration of {@code ServerInstanceProvider} to be displayed under Cloud 
node in Services.
+ * 
+ * @author Jan Horvath
+ */
+@NamedServiceDefinition(

Review comment:
       plus consider rewrite of other registraitons to use this new annotation.

##########
File path: enterprise/cloud.oracle/nbproject/project.properties
##########
@@ -0,0 +1,36 @@
+release.external/bcpkix-jdk15on-1.68.jar=modules/ext/bcpkix-jdk15on-1.68.jar
+release.external/bcprov-jdk15on-1.68.jar=modules/ext/bcprov-jdk15on-1.68.jar
+release.external/commons-codec-1.15.jar=modules/ext/commons-codec-1.15.jar
+release.external/commons-lang3-3.8.1.jar=modules/ext/commons-lang3-3.8.1.jar
+release.external/commons-logging-1.2.jar=modules/ext/commons-logging-1.2.jar
+release.external/hk2-api-2.6.1.jar=modules/ext/hk2-api-2.6.1.jar
+release.external/hk2-locator-2.6.1.jar=modules/ext/hk2-locator-2.6.1.jar
+release.external/hk2-utils-2.6.1.jar=modules/ext/hk2-utils-2.6.1.jar
+release.external/j2objc-annotations-1.3.jar=modules/ext/j2objc-annotations-1.3.jar
+release.external/jackson-annotations-2.12.0.jar=modules/ext/jackson-annotations-2.12.0.jar
+release.external/jackson-core-2.12.0.jar=modules/ext/jackson-core-2.12.0.jar
+release.external/jackson-databind-2.12.0.jar=modules/ext/jackson-databind-2.12.0.jar
+release.external/jackson-datatype-jsr310-2.12.0.jar=modules/ext/jackson-datatype-jsr310-2.12.0.jar
+release.external/jakarta.activation-api-1.2.1.jar=modules/ext/jakarta.activation-api-1.2.1.jar
+release.external/jakarta.annotation-api-1.3.5.jar=modules/ext/jakarta.annotation-api-1.3.5.jar
+release.external/jakarta.inject-2.6.1.jar=modules/ext/jakarta.inject-2.6.1.jar
+release.external/jakarta.ws.rs-api-2.1.6.jar=modules/ext/jakarta.ws.rs-api-2.1.6.jar
+release.external/jersey-apache-connector-2.34.jar=modules/ext/jersey-apache-connector-2.34.jar
+release.external/jersey-client-2.34.jar=modules/ext/jersey-client-2.34.jar
+release.external/jersey-common-2.34.jar=modules/ext/jersey-common-2.34.jar
+release.external/jersey-entity-filtering-2.34.jar=modules/ext/jersey-entity-filtering-2.34.jar
+release.external/jersey-hk2-2.34.jar=modules/ext/jersey-hk2-2.34.jar
+release.external/jersey-media-json-jackson-2.34.jar=modules/ext/jersey-media-json-jackson-2.34.jar
+release.external/jsr305-3.0.2.jar=modules/ext/jsr305-3.0.2.jar
+release.external/nimbus-jose-jwt-9.11.1.jar=modules/ext/nimbus-jose-jwt-9.11.1.jar
+release.external/oci-java-sdk-circuitbreaker-2.10.0.jar=modules/ext/oci-java-sdk-circuitbreaker-2.10.0.jar
+release.external/oci-java-sdk-common-2.10.0.jar=modules/ext/oci-java-sdk-common-2.10.0.jar
+release.external/oci-java-sdk-database-2.10.0.jar=modules/ext/oci-java-sdk-database-2.10.0.jar
+release.external/oci-java-sdk-identity-2.10.0.jar=modules/ext/oci-java-sdk-identity-2.10.0.jar
+release.external/oci-java-sdk-workrequests-2.10.0.jar=modules/ext/oci-java-sdk-workrequests-2.10.0.jar
+release.external/resilience4j-circuitbreaker-1.2.0.jar=modules/ext/resilience4j-circuitbreaker-1.2.0.jar

Review comment:
       I believe these libraries will need `licenseinfo.xml` in the module - 
CCing @matthiasblaesing  - again I am surprised, no build fails. 

##########
File path: 
enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/DatabaseNode.java
##########
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+package org.netbeans.modules.cloud.oracle;
+
+import org.netbeans.api.cloud.oracle.OCIItem;
+import javax.swing.Action;
+import org.openide.nodes.AbstractNode;
+import org.openide.nodes.Children;
+import org.openide.util.Utilities;
+import org.openide.util.lookup.Lookups;
+
+/**
+ *
+ * @author Jan Horvath
+ */
+public class DatabaseNode extends AbstractNode {
+    
+    private static final String DB_ICON = 
"org/netbeans/modules/cloud/oracle/resources/database.svg"; // NOI18N
+    
+    public DatabaseNode(OCIItem dbSummary) {
+        super(Children.LEAF, Lookups.fixed(dbSummary));
+        setName(dbSummary.getName()); 
+        setDisplayName(dbSummary.getName());
+        setIconBaseWithExtension(DB_ICON);
+    }
+   
+    @Override
+    public Action[] getActions(boolean context) {
+        return Utilities.actionsForPath("cloud/oracle/db").toArray(new 
Action[0]); // NOI18N

Review comment:
       The path for actions is an API and needs a note in `arch.xml`. How did 
you decided on the `could/oracle/db` path?

##########
File path: 
enterprise/cloud.oracle/src/org/netbeans/api/cloud/oracle/OCIManager.java
##########
@@ -0,0 +1,196 @@
+/*
+ * 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.
+ */
+package org.netbeans.api.cloud.oracle;
+
+import com.oracle.bmc.ConfigFileReader;
+import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider;
+import com.oracle.bmc.database.DatabaseClient;
+import com.oracle.bmc.database.model.GenerateAutonomousDatabaseWalletDetails;
+import 
com.oracle.bmc.database.requests.GenerateAutonomousDatabaseWalletRequest;
+import com.oracle.bmc.database.requests.ListAutonomousDatabasesRequest;
+import 
com.oracle.bmc.database.responses.GenerateAutonomousDatabaseWalletResponse;
+import com.oracle.bmc.identity.Identity;
+import com.oracle.bmc.identity.IdentityClient;
+import com.oracle.bmc.identity.model.Tenancy;
+import com.oracle.bmc.identity.requests.GetTenancyRequest;
+import com.oracle.bmc.identity.requests.ListCompartmentsRequest;
+import com.oracle.bmc.identity.responses.GetTenancyResponse;
+import com.oracle.bmc.identity.responses.ListCompartmentsResponse;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import org.openide.util.Exceptions;
+
+/**
+ * Manages access to Oracle Cloud Resources
+ * 
+ * @author Jan Horvath
+ */
+public final class OCIManager {
+
+    
+    private ConfigFileReader.ConfigFile configFile;
+    private ConfigFileAuthenticationDetailsProvider provider;
+    private ConfigFileAuthenticationDetailsProvider configProvider;
+    
+    private static OCIManager instance;
+
+    private OCIManager() {
+        init();
+    }
+    
+    private void init() {
+        try {
+            configFile = ConfigFileReader.parseDefault();
+            provider = new ConfigFileAuthenticationDetailsProvider(configFile);
+            configProvider = new 
ConfigFileAuthenticationDetailsProvider(configFile);
+        } catch (IOException ex) {
+            Exceptions.printStackTrace(ex);
+        }
+    }
+    
+    public static synchronized OCIManager getDefault() {
+        if (instance == null) {
+            instance = new OCIManager();
+        }
+        return instance;
+    }
+
+    /**
+     * Retrieves information about Tenancy configured in ~/.oci
+     * 
+     * @return Optional {@code OCIItem} describing the Tenancy. If 
Optional.empty() OCI configuration was not found
+     */
+    public Optional<OCIItem> getTenancy() {

Review comment:
       I don't like `Optional`. Can't you return `null`?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



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