diff --git a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls index 402802dd34..1c15134498 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls @@ -188,6 +188,7 @@ type ConnectionInfo { connected: Boolean! provided: Boolean! readOnly: Boolean! + useUrl: Boolean! saveCredentials: Boolean! connectTime: String @@ -212,6 +213,7 @@ type ConnectionOrigin { displayName: String! icon: String configuration: Object + details: [ObjectPropertyInfo!] } # Configuration of particular connection. Used for new connection create. Includes auth info diff --git a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls index 52d7af96a9..347bfa9f6f 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls @@ -10,10 +10,17 @@ type ObjectDescriptor { } input ObjectPropertyFilter { - ids: [String] - features: [String] - categories: [String] - dataTypes: [String] + ids: [String!] + features: [String!] + categories: [String!] + dataTypes: [String!] +} + +type ObjectDetails { + id: Int + displayName: String + description: String + value: Object } type DatabaseObjectInfo { diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebConnectionInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebConnectionInfo.java index 97e33ba0d6..c48a9c88b7 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebConnectionInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebConnectionInfo.java @@ -227,7 +227,7 @@ public class WebConnectionInfo { @Property public WebConnectionOriginInfo getOrigin() { - return new WebConnectionOriginInfo(dataSourceContainer.getOrigin()); + return new WebConnectionOriginInfo(session, dataSourceContainer, dataSourceContainer.getOrigin()); } @Property diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebConnectionOriginInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebConnectionOriginInfo.java index 13db2c4129..3b1c93c236 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebConnectionOriginInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebConnectionOriginInfo.java @@ -16,11 +16,20 @@ */ package io.cloudbeaver.model; +import io.cloudbeaver.DBWebException; import io.cloudbeaver.WebServiceUtils; +import io.cloudbeaver.model.session.WebSession; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; +import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.DBPDataSourceOrigin; +import org.jkiss.dbeaver.model.DBPObject; +import org.jkiss.dbeaver.model.meta.Property; +import org.jkiss.dbeaver.runtime.properties.ObjectPropertyDescriptor; +import org.jkiss.dbeaver.runtime.properties.PropertyCollector; +import java.util.Arrays; import java.util.Map; /** @@ -28,9 +37,13 @@ import java.util.Map; */ public class WebConnectionOriginInfo { + private final WebSession session; + private final DBPDataSourceContainer dataSourceContainer; private final DBPDataSourceOrigin origin; - public WebConnectionOriginInfo(DBPDataSourceOrigin origin) { + public WebConnectionOriginInfo(WebSession session, DBPDataSourceContainer dataSourceContainer, DBPDataSourceOrigin origin) { + this.session = session; + this.dataSourceContainer = dataSourceContainer; this.origin = origin; } @@ -54,4 +67,18 @@ public class WebConnectionOriginInfo { return origin.getConfiguration(); } + @Property + public WebPropertyInfo[] getDetails() throws DBWebException { + try { + DBPObject details = origin.getDataSourceDetails(session.getProgressMonitor(), dataSourceContainer); + PropertyCollector propertyCollector = new PropertyCollector(details, false); + propertyCollector.collectProperties(); + return Arrays.stream(propertyCollector.getProperties()) + .filter(p -> !(p instanceof ObjectPropertyDescriptor && ((ObjectPropertyDescriptor) p).isHidden())) + .map(p -> new WebPropertyInfo(session, p)).toArray(WebPropertyInfo[]::new); + } catch (DBException e) { + throw new DBWebException("Error reading origin details", e); + } + } + }