CB-5623 fix npe (#3030)

This commit is contained in:
Ainur
2024-10-29 16:12:10 +00:00
committed by GitHub
parent 2c7df05c45
commit d3be30f55b
10 changed files with 43 additions and 25 deletions
@@ -48,7 +48,7 @@ public class FSUtils {
public static DBNPathBase getNodeByPath(@NotNull WebSession webSession, @NotNull String nodePath) throws DBException {
DBRProgressMonitor monitor = webSession.getProgressMonitor();
DBNModel navigatorModel = webSession.getNavigatorModel();
DBNModel navigatorModel = webSession.getNavigatorModelOrThrow();
DBNNode node = navigatorModel.getNodeByPath(monitor, nodePath);
if (!(node instanceof DBNPathBase dbnPath)) {
throw new DBWebException("Node '" + nodePath + "' is not found in File Systems");
@@ -399,10 +399,18 @@ public class WebSession extends BaseWebSession
this.locale = locale != null ? locale : Locale.getDefault().getLanguage();
}
@Nullable
public DBNModel getNavigatorModel() {
return navigatorModel;
}
@NotNull
public DBNModel getNavigatorModelOrThrow() throws DBWebException {
if (navigatorModel != null) {
return navigatorModel;
}
throw new DBWebException("Navigator model is not found in session");
}
/**
* Returns and clears progress messages
*/
@@ -335,8 +335,8 @@ public class WebServiceUtils extends WebCommonUtils {
return container.getName() + " [" + container.getId() + "]";
}
public static void updateConfigAndRefreshDatabases(WebSession session, String projectId) {
DBNProject projectNode = session.getNavigatorModel().getRoot().getProjectNode(session.getProjectById(projectId));
public static void updateConfigAndRefreshDatabases(WebSession session, String projectId) throws DBWebException {
DBNProject projectNode = session.getNavigatorModelOrThrow().getRoot().getProjectNode(session.getProjectById(projectId));
DBNModel.updateConfigAndRefreshDatabases(projectNode.getDatabases());
}
@@ -20,6 +20,7 @@ import io.cloudbeaver.model.session.BaseWebSession;
import io.cloudbeaver.model.session.WebSession;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.websocket.event.datasource.WSDatasourceFolderEvent;
import org.jkiss.utils.CommonUtils;
@@ -32,15 +33,19 @@ public class WSFolderUpdatedEventHandlerImpl extends WSAbstractProjectEventHandl
@Override
protected void updateSessionData(@NotNull BaseWebSession activeUserSession, @NotNull WSDatasourceFolderEvent event) {
if (activeUserSession instanceof WebSession) {
var webSession = (WebSession) activeUserSession;
if (activeUserSession instanceof WebSession webSession) {
var project = webSession.getProjectById(event.getProjectId());
if (project == null) {
log.debug("Project " + event.getProjectId() + " is not found in session " + webSession.getSessionId());
return;
}
project.getDataSourceRegistry().refreshConfig();
webSession.getNavigatorModel().getRoot().getProjectNode(project).getDatabases().refreshChildren();
DBNModel navigatorModel = webSession.getNavigatorModel();
if (navigatorModel == null) {
log.debug("Navigator model is not found in session " + webSession.getSessionId());
return;
}
navigatorModel.getRoot().getProjectNode(project).getDatabases().refreshChildren();
}
activeUserSession.addSessionEvent(event);
}
@@ -639,7 +639,7 @@ public class WebServiceCore implements DBWServiceCore {
@NotNull WebConnectionConfig config
) throws DBWebException {
try {
DBNModel navigatorModel = webSession.getNavigatorModel();
DBNModel navigatorModel = webSession.getNavigatorModelOrThrow();
WebSessionProjectImpl project = getProjectById(webSession, projectId);
DBPDataSourceRegistry dataSourceRegistry = project.getDataSourceRegistry();
@@ -83,7 +83,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
DBNNode[] nodeChildren;
boolean isRootPath = CommonUtils.isEmpty(parentPath) || "/".equals(parentPath) || ROOT_DATABASES.equals(parentPath);
DBNModel navigatorModel = session.getNavigatorModel();
DBNModel navigatorModel = session.getNavigatorModelOrThrow();
Set<String> applicableDrivers = WebServiceUtils.getApplicableDriversIds();
if (isRootPath) {
DBNRoot rootNode = navigatorModel.getRoot();
@@ -155,8 +155,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
try {
DBRProgressMonitor monitor = session.getProgressMonitor();
DBNModel navigatorModel = session.getNavigatorModel();
DBNNode node = navigatorModel.getNodeByPath(monitor, nodePath);
DBNNode node = session.getNavigatorModelOrThrow().getNodeByPath(monitor, nodePath);
if (node == null) {
throw new DBWebException("Node '" + nodePath + "' not found");
}
@@ -198,7 +197,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
try {
DBRProgressMonitor monitor = session.getProgressMonitor();
DBNNode node = session.getNavigatorModel().getNodeByPath(monitor, nodePath);
DBNNode node = session.getNavigatorModelOrThrow().getNodeByPath(monitor, nodePath);
if (node == null) {
throw new DBWebException("Navigator node '" + nodePath + "' not found");
}
@@ -217,7 +216,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
try {
DBRProgressMonitor monitor = webSession.getProgressMonitor();
DBNNode node = webSession.getNavigatorModel().getNodeByPath(monitor, nodePath);
DBNNode node = webSession.getNavigatorModelOrThrow().getNodeByPath(monitor, nodePath);
if (node == null) {
throw new DBWebException("Navigator node '" + nodePath + "' not found");
}
@@ -256,7 +255,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
try {
DBRProgressMonitor monitor = session.getProgressMonitor();
DBNNode node = session.getNavigatorModel().getNodeByPath(monitor, nodePath);
DBNNode node = session.getNavigatorModelOrThrow().getNodeByPath(monitor, nodePath);
if (node == null) {
throw new DBWebException("Navigator node '" + nodePath + "' not found");
}
@@ -380,10 +379,9 @@ public class WebServiceNavigator implements DBWServiceNavigator {
}
@Nullable
protected WebNavigatorNodeInfo getNodeFromObject(WebSession session, DBSObject object){
DBNModel navigatorModel = session.getNavigatorModel();
protected WebNavigatorNodeInfo getNodeFromObject(WebSession session, DBSObject object) throws DBWebException {
DBRProgressMonitor monitor = session.getProgressMonitor();
DBNNode node = navigatorModel.getNodeByObject(monitor, object, false);
DBNNode node = session.getNavigatorModelOrThrow().getNodeByObject(monitor, object, false);
return node == null ? null : new WebNavigatorNodeInfo(session, node);
}
@@ -397,7 +395,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
try {
DBRProgressMonitor monitor = session.getProgressMonitor();
DBNNode node = session.getNavigatorModel().getNodeByPath(monitor, nodePath);
DBNNode node = session.getNavigatorModelOrThrow().getNodeByPath(monitor, nodePath);
if (node == null) {
throw new DBWebException("Navigator node '" + nodePath + "' not found");
}
@@ -502,8 +500,9 @@ public class WebServiceNavigator implements DBWServiceNavigator {
String projectId = null;
boolean containsFolderNodes = false;
Map<DBNNode, DBEObjectMaker> nodes = new LinkedHashMap<>();
DBNModel model = session.getNavigatorModelOrThrow();
for (String path : nodePaths) {
DBNNode node = session.getNavigatorModel().getNodeByPath(monitor, path);
DBNNode node = model.getNodeByPath(monitor, path);
if (node == null) {
throw new DBWebException("Navigator node '" + path + "' not found");
}
@@ -598,9 +597,10 @@ public class WebServiceNavigator implements DBWServiceNavigator {
try {
DBRProgressMonitor monitor = session.getProgressMonitor();
DBNNode folderNode;
folderNode = session.getNavigatorModel().getNodeByPath(monitor, folderNodePath);
DBNModel navigatorModel = session.getNavigatorModelOrThrow();
folderNode = navigatorModel.getNodeByPath(monitor, folderNodePath);
for (String path : nodePaths) {
DBNNode node = session.getNavigatorModel().getNodeByPath(monitor, path);
DBNNode node = navigatorModel.getNodeByPath(monitor, path);
if (node == null) {
throw new DBWebException("Navigator node '" + path + "' not found");
}
@@ -950,7 +950,7 @@ public class WebSQLProcessor implements WebSessionProvider {
@NotNull
public <T> T getDataContainerByNodePath(DBRProgressMonitor monitor, @NotNull String containerPath, Class<T> type) throws DBException {
DBNNode node = webSession.getNavigatorModel().getNodeByPath(monitor, containerPath);
DBNNode node = webSession.getNavigatorModelOrThrow().getNodeByPath(monitor, containerPath);
if (node == null) {
throw new DBWebException("Container node '" + containerPath + "' not found");
}
@@ -40,6 +40,7 @@ import org.jkiss.dbeaver.model.exec.trace.DBCTrace;
import org.jkiss.dbeaver.model.exec.trace.DBCTraceDynamic;
import org.jkiss.dbeaver.model.exec.trace.DBCTraceProperty;
import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.sql.*;
@@ -241,8 +242,9 @@ public class WebServiceSQL implements DBWServiceSQL {
private List<DBSObject> getObjectListFromNodeIds(@NotNull WebSession session, @NotNull List<String> nodePathList) throws DBWebException {
try {
List<DBSObject> objectList = new ArrayList<>(nodePathList.size());
DBNModel navigatorModel = session.getNavigatorModelOrThrow();
for (String nodePath : nodePathList) {
DBNNode node = session.getNavigatorModel().getNodeByPath(session.getProgressMonitor(), nodePath);
DBNNode node = navigatorModel.getNodeByPath(session.getProgressMonitor(), nodePath);
if (node == null) {
throw new DBException("Node '" + nodePath + "' not found");
}
@@ -51,7 +51,7 @@ public class WebServiceFS implements DBWServiceFS {
if (project == null) {
throw new DBException(MessageFormat.format("Project ''{0}'' is not found in session", projectId));
}
DBNProject projectNode = webSession.getNavigatorModel().getRoot().getProjectNode(project);
DBNProject projectNode = webSession.getNavigatorModelOrThrow().getRoot().getProjectNode(project);
if (projectNode == null) {
throw new DBException(MessageFormat.format("Project ''{0}'' is not found in navigator model", projectId));
}
@@ -78,7 +78,7 @@ public class WebServiceFS implements DBWServiceFS {
@NotNull String nodePath
) throws DBWebException {
try {
var node = webSession.getNavigatorModel().getNodeByPath(webSession.getProgressMonitor(), nodePath);
var node = webSession.getNavigatorModelOrThrow().getNodeByPath(webSession.getProgressMonitor(), nodePath);
if (!(node instanceof DBNFileSystem fs)) {
throw new DBException(MessageFormat.format("Node ''{0}'' is not File System", nodePath));
}
@@ -52,6 +52,9 @@ public class WebServiceBindingMetadata extends WebServiceBindingBase<DBWServiceM
private DBNNode getNodeFromPath(DataFetchingEnvironment env) throws DBException {
WebSession webSession = getWebSession(env);
String nodePath = env.getArgument("nodeId");
return webSession.getNavigatorModel().getNodeByPath(webSession.getProgressMonitor(), nodePath);
if (nodePath == null) {
throw new DBException("Node path is null");
}
return webSession.getNavigatorModelOrThrow().getNodeByPath(webSession.getProgressMonitor(), nodePath);
}
}