Cloud extension improvements

This commit is contained in:
Serge Rider
2020-05-21 16:47:30 +03:00
parent 52f3e98f98
commit d6282bf342
3 changed files with 28 additions and 17 deletions
@@ -28,14 +28,16 @@ import io.cloudbeaver.server.CBPlatform;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.meta.Association;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.navigator.DBNProject;
import org.jkiss.dbeaver.model.navigator.DBNProjectDatabases;
import org.jkiss.dbeaver.model.runtime.*;
import org.jkiss.dbeaver.runtime.jobs.DisconnectJob;
import org.jkiss.utils.CommonUtils;
@@ -81,6 +83,7 @@ public class WebSession {
private DBNModel navigatorModel;
private DBNProjectDatabases databases;
private DBRProgressMonitor progressMonitor = new SessionProgressMonitor();
private DBNProject projectNode;
public WebSession(HttpSession httpSession) {
this.id = httpSession.getId();
@@ -173,7 +176,7 @@ public class WebSession {
this.navigatorModel.initialize();
DBPProject project = platform.getWorkspace().getActiveProject();
DBNProject projectNode = this.navigatorModel.getRoot().getProjectNode(project);
this.projectNode = this.navigatorModel.getRoot().getProjectNode(project);
this.databases = projectNode.getDatabases();
this.locale = Locale.getDefault().getLanguage();
@@ -245,7 +248,11 @@ public class WebSession {
return navigatorModel;
}
public DBNProjectDatabases getDatabases() {
public DBNProject getProjectNode() {
return projectNode;
}
public DBNProjectDatabases getDatabasesNode() {
return databases;
}
@@ -302,14 +309,12 @@ public class WebSession {
connectionInfo = connections.get(connectionID);
}
if (connectionInfo == null) {
DBNNode dbNode = null;
try {
dbNode = navigatorModel.getNodeByPath(progressMonitor, connectionID);
} catch (DBException e) {
log.debug(e);
}
if (dbNode instanceof DBNDataSource) {
return new WebConnectionInfo(this, ((DBNDataSource) dbNode).getDataSourceContainer());
DBPDataSourceContainer dataSource = databases.getDataSourceRegistry().getDataSource(connectionID);
if (dataSource != null) {
connectionInfo = new WebConnectionInfo(this, dataSource);
synchronized (connections) {
connections.put(connectionID, connectionInfo);
}
} else {
throw new DBWebException("Connection '" + connectionID + "' not found");
}
@@ -135,7 +135,7 @@ public class WebServiceCore implements DBWServiceCore {
throw new DBWebException("Datasource '" + dataSourceId + "' not found");
}
DBPDataSourceRegistry sessionRegistry = webSession.getDatabases().getDataSourceRegistry();
DBPDataSourceRegistry sessionRegistry = webSession.getDatabasesNode().getDataSourceRegistry();
DBPDataSourceContainer newDataSource = sessionRegistry.createDataSource(dataSourceTemplate);
newDataSource.setSavePassword(true);
((DataSourceDescriptor)newDataSource).setTemporary(true);
@@ -164,7 +164,7 @@ public class WebServiceCore implements DBWServiceCore {
@Override
public WebConnectionInfo createConnection(WebSession webSession, WebConnectionConfig connectionConfig) throws DBWebException {
DBPDataSourceRegistry sessionRegistry = webSession.getDatabases().getDataSourceRegistry();
DBPDataSourceRegistry sessionRegistry = webSession.getDatabasesNode().getDataSourceRegistry();
DBPDataSourceContainer newDataSource = makeConnectionInstance(connectionConfig, sessionRegistry);
if (CommonUtils.isEmpty(newDataSource.getName())) {
@@ -181,7 +181,7 @@ public class WebServiceCore implements DBWServiceCore {
@Override
public WebConnectionInfo testConnection(WebSession webSession, WebConnectionConfig connectionConfig) throws DBWebException {
DBPDataSourceRegistry sessionRegistry = webSession.getDatabases().getDataSourceRegistry();
DBPDataSourceRegistry sessionRegistry = webSession.getDatabasesNode().getDataSourceRegistry();
DBPDataSourceContainer newDataSource = makeConnectionInstance(connectionConfig, sessionRegistry);
try {
@@ -216,7 +216,7 @@ public class WebServiceCore implements DBWServiceCore {
// Disconnect in async mode?
//new DisconnectJob(connectionInfo.getDataSource()).schedule();
}
webSession.getDatabases().getDataSourceRegistry().removeDataSource(connectionInfo.getDataSourceContainer());
webSession.getDatabasesNode().getDataSourceRegistry().removeDataSource(connectionInfo.getDataSourceContainer());
webSession.removeConnection(connectionInfo);
return disconnected;
@@ -35,6 +35,7 @@ import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
@@ -56,7 +57,12 @@ public class WebServiceNavigator implements DBWServiceNavigator {
DBNNode[] nodeChildren;
boolean isRootPath = CommonUtils.isEmpty(parentPath) || "/".equals(parentPath);
if (isRootPath) {
nodeChildren = session.getDatabases().getChildren(monitor);
nodeChildren = session.getDatabasesNode().getChildren(monitor);
// Inject extra nodes
List<DBNNode> extraNodes = session.getProjectNode().getExtraNodes();
if (!extraNodes.isEmpty()) {
nodeChildren = ArrayUtils.concatArrays(extraNodes.toArray(new DBNNode[0]), nodeChildren);
}
} else {
DBNNode parentNode = session.getNavigatorModel().getNodeByPath(monitor, parentPath);
if (parentNode == null) {