Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.registry.DataSourcePreferenceStore;
import org.jkiss.utils.CommonUtils;

import java.util.Map;

public class WebConnectionConfigInputHandler<T extends WebConnectionConfig, C extends DataSourceDescriptor> {
private static final Log log = Log.getLog(WebConnectionConfigInputHandler.class);
protected final T input;
Expand Down Expand Up @@ -93,6 +96,11 @@
input.isSharedCredentials()
);
dataSource.setConnectionReadOnly(input.isReadOnly());
DataSourcePreferenceStore preferenceStore = dataSource.getPreferenceStore();
Map<String, Object> defaultUserSettings = input.getDefaultUserSettings();
for (Map.Entry<String, Object> entry : defaultUserSettings.entrySet()) {
preferenceStore.setValue(entry.getKey(), (String)entry.getValue());

Check warning on line 102 in server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebConnectionConfigInputHandler.java

View workflow job for this annotation

GitHub Actions / Server / Lint

[checkstyle] reported by reviewdog 🐶 'typecast' is not followed by whitespace. Raw Output: /github/workspace/./server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebConnectionConfigInputHandler.java:102:61: warning: 'typecast' is not followed by whitespace. (com.puppycrawl.tools.checkstyle.checks.whitespace.WhitespaceAfterCheck)
}
}

@NotNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.jkiss.dbeaver.model.meta.Property;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -64,6 +65,8 @@ public class WebConnectionConfig {
private Boolean defaultAutoCommit;
private String defaultCatalogName;
private String defaultSchemaName;
@NotNull
private Map<String, Object> defaultUserSettings = new LinkedHashMap<>();

public WebConnectionConfig() {
}
Expand Down Expand Up @@ -111,6 +114,7 @@ public WebConnectionConfig(@NotNull Map<String, Object> params) {
String configType = JSONUtils.getString(params, "configurationType");
configurationType = configType == null ? null : DBPDriverConfigurationType.valueOf(configType);

defaultUserSettings = JSONUtils.getObject(params, "defaultUserSettings");
networkHandlersConfig = new ArrayList<>();
for (Map<String, Object> nhc : JSONUtils.getObjectList(params, "networkHandlersConfig")) {
networkHandlersConfig.add(new WebNetworkHandlerConfigInput(nhc));
Expand Down Expand Up @@ -367,4 +371,13 @@ public String getDefaultSchemaName() {
public void setDefaultSchemaName(String defaultSchemaName) {
this.defaultSchemaName = defaultSchemaName;
}

@NotNull
public Map<String, Object> getDefaultUserSettings() {
return defaultUserSettings;
}

public void setDefaultUserSettings(@NotNull Map<String, Object> defaultUserSettings) {
this.defaultUserSettings = defaultUserSettings;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,13 @@
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import org.jkiss.dbeaver.model.navigator.DBNDataSource;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor;
import org.jkiss.dbeaver.model.preferences.DBPPropertySource;
import org.jkiss.dbeaver.model.rm.RMConstants;
import org.jkiss.dbeaver.model.rm.RMProjectPermission;
import org.jkiss.dbeaver.model.runtime.DBRRunnableParametrized;
import org.jkiss.dbeaver.registry.DataSourcePreferenceStore;
import org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor;
import org.jkiss.dbeaver.registry.network.NetworkHandlerRegistry;
import org.jkiss.dbeaver.runtime.DBWorkbench;
Expand Down Expand Up @@ -293,6 +295,16 @@ public DBNBrowseSettings getDefaultNavigatorSettings() {
return dataSourceContainer.getNavigatorSettings().getOriginalSettings();
}

@Property
@NotNull
public Map<String, String> defaultUserSettings() {
DBPPreferenceStore preferenceStore = dataSourceContainer.getPreferenceStore();
if (preferenceStore instanceof DataSourcePreferenceStore dataSourcePreferenceStore) {
return dataSourcePreferenceStore.getProperties();
}
return Collections.emptyMap();
}

@Property
@NotNull
public List<WebDataFormat> getSupportedDataFormats() {
Expand Down Expand Up @@ -578,4 +590,14 @@ public List<String> getTools() {
public void setCredentialsSavedInSession(@Nullable Boolean credentialsSavedInSession) {
this.credentialsSavedInSession = credentialsSavedInSession;
}


@Property
public Map<String, String> getConnectionPreferences() {
DBPPreferenceStore preferenceStore = dataSourceContainer.getPreferenceStore();
if (preferenceStore instanceof DataSourcePreferenceStore dataSourcePreferenceStore) {
return dataSourcePreferenceStore.getProperties();
}
return Collections.emptyMap();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -565,6 +565,8 @@ type ConnectionInfo {
requiredAuth: String
defaultCatalogName: String @since(version: "25.0.5")
defaultSchemaName: String @since(version: "25.0.5")
"Default user settings for connection"
defaultUserSettings: Object @since(version: "25.3.5")

"List of tools that can be used with this connection. Returns empty list if no tools are available"
tools: [String!]! @since(version: "24.1.3")
Expand Down Expand Up @@ -741,6 +743,8 @@ input ConnectionConfig {
defaultCatalogName: String @since(version: "25.0.5") @deprecated(reason: "25.2.1 use expertPropertyValues instead")
"Sets schema name for the connection"
defaultSchemaName: String @since(version: "25.0.5") @deprecated(reason: "25.2.1 use expertPropertyValues instead")
"Default user settings for connection"
defaultUserSettings: Object @since(version: "25.3.5")
}

####################################################
Expand Down Expand Up @@ -846,6 +850,7 @@ extend type Mutation {
"Sets to default navigator settings for connection. Resets all user navigator settings for this connection."
clearConnectionNavigatorSettings(projectId: ID!, id: ID!): ConnectionInfo! @since(version: "25.3.2")

setObjectSettings(id: ID!, projectId:ID, objectType: String, settings: Object!): Object! @since(version: "25.3.5")
#### Generic async functions

"Cancel async task by ID"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import jakarta.servlet.http.HttpServletResponse;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.rm.RMConstants;
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
import org.jkiss.dbeaver.registry.settings.ProductSettingDescriptor;
Expand Down Expand Up @@ -213,6 +214,14 @@ WebConnectionInfo clearConnectionNavigatorSettings(
@NotNull String id
) throws DBWebException;

Object setObjectSettings(
@NotNull WebSession webSession,
@NotNull String projectId,
@NotNull String objectType,
@NotNull String objectId,
@NotNull Map<String, String> settings
) throws DBException;

///////////////////////////////////////////
// Async tasks

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,13 @@ public void bindWiring(DBWBindingContext model) throws DBWebException {
getArgumentVal(env, "id")
)
)
.dataFetcher("setObjectSettings", env -> getService(env).setObjectSettings(
getWebSession(env),
getProjectReference(env),
getArgumentVal(env, "objectType"),
getArgumentVal(env, "id"),
getArgumentVal(env, "settings")
))

.dataFetcher("asyncTaskInfo", env -> getService(env).getAsyncTaskInfo(
getWebSession(env),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.secret.DBSSecretController;
import org.jkiss.dbeaver.model.secret.DBSSecretValue;
import org.jkiss.dbeaver.model.security.SMObjectType;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettingsUtils;
Expand Down Expand Up @@ -133,6 +134,7 @@
) throws DBWebException {
if (id != null) {
WebConnectionInfo connectionInfo = getConnectionState(webSession, projectId, id);
Map<String, String> connectionPreferences = connectionInfo.getConnectionPreferences();
if (connectionInfo != null) {
return Collections.singletonList(connectionInfo);
}
Expand Down Expand Up @@ -760,9 +762,26 @@
return connectionInfo;
}

@Override
public Object setObjectSettings(
@NotNull WebSession webSession,
@NotNull String projectId,
@NotNull String objectType,
@NotNull String objectId,
@NotNull Map<String, String> settings
) throws DBException {

SMObjectType smObjectType = SMObjectType.valueOf(objectType);
webSession.getSecurityController().setObjectSettings(projectId, smObjectType, objectId, settings);
//fixme return proper object
return settings.entrySet().stream()
.filter(e -> e.getValue() != null)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}

@Override
public WebAsyncTaskInfo getAsyncTaskInfo(WebSession webSession, String taskId, Boolean removeOnFinish)
throws DBWebException {

Check warning on line 784 in server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java

View workflow job for this annotation

GitHub Actions / Server / Lint

[checkstyle] reported by reviewdog 🐶 'throws' has incorrect indentation level 8, expected level should be 12. Raw Output: /github/workspace/./server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java:784:9: warning: 'throws' has incorrect indentation level 8, expected level should be 12. (com.puppycrawl.tools.checkstyle.checks.indentation.IndentationCheck)
return webSession.asyncTaskStatus(taskId, CommonUtils.toBoolean(removeOnFinish));
}

Expand Down
Loading