Skip to content

Commit c86b7c0

Browse files
Merge branch 'devel' into dbeaver/pro#7693-jsonb-string-value-fix
2 parents cf40178 + 147edde commit c86b7c0

File tree

42 files changed

+599
-327
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+599
-327
lines changed

server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -24,63 +24,83 @@
2424
import org.jkiss.code.Nullable;
2525
import org.jkiss.dbeaver.DBException;
2626
import org.jkiss.dbeaver.Log;
27+
import org.jkiss.dbeaver.model.DBPAdaptable;
2728
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
29+
import org.jkiss.dbeaver.model.DBPObjectSettingsProvider;
2830
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
2931
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistryCache;
3032
import org.jkiss.dbeaver.model.navigator.DBNModel;
3133
import org.jkiss.dbeaver.model.rm.RMProject;
3234
import org.jkiss.dbeaver.model.rm.RMUtils;
35+
import org.jkiss.dbeaver.model.security.SMControllerUtils;
3336
import org.jkiss.dbeaver.model.security.SMObjectType;
3437
import org.jkiss.dbeaver.model.websocket.event.datasource.WSDataSourceEvent;
3538
import org.jkiss.dbeaver.model.websocket.event.datasource.WSDataSourceProperty;
3639
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
3740
import org.jkiss.dbeaver.registry.DataSourceRegistry;
41+
import org.jkiss.dbeaver.registry.project.BaseProjectSettings;
3842
import org.jkiss.dbeaver.runtime.jobs.DisconnectJob;
3943
import org.jkiss.utils.CommonUtils;
4044

4145
import java.nio.file.Path;
42-
import java.util.ArrayList;
43-
import java.util.HashMap;
44-
import java.util.List;
45-
import java.util.Map;
46-
import java.util.concurrent.ConcurrentHashMap;
46+
import java.util.*;
4747

48-
public class WebSessionProjectImpl extends WebProjectImpl {
48+
public class WebSessionProjectImpl extends WebProjectImpl implements DBPAdaptable {
4949
private static final Log log = Log.getLog(WebSessionProjectImpl.class);
50+
5051
protected final WebSession webSession;
5152
private final Map<String, WebConnectionInfo> connections = new HashMap<>();
52-
private final Map<String, Object> projectSettings = new ConcurrentHashMap<>();
53+
private final BaseProjectSettings projectSettings;
5354
private boolean registryIsLoaded = false;
5455

5556
public WebSessionProjectImpl(
5657
@NotNull WebSession webSession,
5758
@NotNull RMProject project
5859
) {
59-
super(
60-
webSession.getWorkspace(),
61-
webSession.getRmController(),
62-
webSession.getSessionContext(),
63-
project,
64-
webSession.getUserPreferenceStore(),
65-
RMUtils.getProjectPath(project)
66-
);
67-
this.webSession = webSession;
60+
this(webSession, project, null);
6861
}
6962

7063
public WebSessionProjectImpl(
7164
@NotNull WebSession webSession,
7265
@NotNull RMProject project,
73-
@NotNull Path path
66+
@Nullable Path path
7467
) {
7568
super(
7669
webSession.getWorkspace(),
7770
webSession.getRmController(),
7871
webSession.getSessionContext(),
7972
project,
8073
webSession.getUserPreferenceStore(),
81-
path
74+
path == null ? RMUtils.getProjectPath(project) : path
8275
);
8376
this.webSession = webSession;
77+
this.projectSettings = new BaseProjectSettings(this) {
78+
@NotNull
79+
@Override
80+
protected Map<SMObjectType, Map<String, Map<String, String>>> loadAllProjectSettings() throws DBException {
81+
if (webSession.getUser() == null) {
82+
return new LinkedHashMap<>();
83+
}
84+
return SMControllerUtils.getObjectSettingsMap(WebSessionProjectImpl.this, webSession.getSecurityController());
85+
}
86+
87+
@Override
88+
protected void saveProjectSettings(
89+
@NotNull SMObjectType objectType,
90+
@NotNull String objectId,
91+
@NotNull Map<String, String> settings
92+
) throws DBException {
93+
if (webSession.getUserContext().isNonAnonymousUserAuthorizedInSM()) {
94+
webSession.getSecurityController().setObjectSettings(getId(), objectType, objectId, settings);
95+
}
96+
}
97+
98+
};
99+
}
100+
101+
@NotNull
102+
public BaseProjectSettings getProjectSettings() {
103+
return projectSettings;
84104
}
85105

86106
@Nullable
@@ -89,6 +109,14 @@ public DBNModel getNavigatorModel() {
89109
return webSession.getNavigatorModel();
90110
}
91111

112+
@Override
113+
public <T> T getAdapter(@NotNull Class<T> adapter) {
114+
if (adapter == DBPObjectSettingsProvider.class) {
115+
return adapter.cast(projectSettings);
116+
}
117+
return null;
118+
}
119+
92120
@NotNull
93121
@Override
94122
protected DBPDataSourceRegistry createDataSourceRegistry() {
@@ -244,21 +272,6 @@ public synchronized boolean updateProjectDataSources(@NotNull WSDataSourceEvent
244272
return sendDataSourceUpdatedEvent;
245273
}
246274

247-
// TODO: load project settings on project load
248-
public void refreshProjectSettings() throws DBException {
249-
if (webSession.getUser() == null) {
250-
projectSettings.clear();
251-
return;
252-
}
253-
Map<String, Object> loadedSettings = webSession.getSecurityController().getObjectSettings(
254-
getId(),
255-
SMObjectType.project,
256-
null
257-
);
258-
projectSettings.clear();
259-
projectSettings.putAll(loadedSettings);
260-
}
261-
262275
@NotNull
263276
public WebConnectionInfo createConnectionInfo(@NotNull DBPDataSourceContainer dataSourceDescriptor) {
264277
return new WebConnectionInfo(webSession, dataSourceDescriptor);
@@ -331,19 +344,9 @@ public boolean deleteConnection(@NotNull String connectionId) throws DBWebExcept
331344
@NotNull
332345
private WebConnectionInfo closeAndDeleteConnection(@NotNull WebConnectionInfo connectionInfo) throws DBWebException {
333346
DBPDataSourceContainer dataSourceContainer = connectionInfo.getDataSourceContainer();
334-
boolean disconnected = WebDataSourceUtils.disconnectDataSource(webSession, dataSourceContainer);
347+
WebDataSourceUtils.disconnectDataSource(webSession, dataSourceContainer);
335348
DBPDataSourceRegistry registry = getDataSourceRegistry();
336349
registry.removeDataSource(dataSourceContainer);
337-
try {
338-
registry.checkForErrors();
339-
} catch (DBException e) {
340-
try {
341-
registry.addDataSource(dataSourceContainer);
342-
} catch (DBException ex) {
343-
log.error("Error re-adding after delete attempt", e);
344-
}
345-
throw new DBWebException("Failed to delete connection", e);
346-
}
347350
removeConnection(dataSourceContainer);
348351
return connectionInfo;
349352
}

0 commit comments

Comments
 (0)