CB-348 Origin details

This commit is contained in:
Serge Rider
2020-10-30 14:50:47 +03:00
parent 796505ba1f
commit 32ef7c5394
4 changed files with 42 additions and 6 deletions
@@ -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
@@ -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 {
@@ -227,7 +227,7 @@ public class WebConnectionInfo {
@Property
public WebConnectionOriginInfo getOrigin() {
return new WebConnectionOriginInfo(dataSourceContainer.getOrigin());
return new WebConnectionOriginInfo(session, dataSourceContainer, dataSourceContainer.getOrigin());
}
@Property
@@ -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);
}
}
}