use of org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults in project dbeaver by dbeaver.
the class ContextDefaultObjectsReader method run.
@Override
public void run(DBRProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
DBNModel navigatorModel = DBWorkbench.getPlatform().getNavigatorModel();
DBSObjectContainer objectContainer = DBUtils.getAdapter(DBSObjectContainer.class, dataSource);
if (objectContainer == null) {
return;
}
DBCExecutionContextDefaults contextDefaults = null;
if (executionContext != null) {
contextDefaults = executionContext.getContextDefaults();
}
if (contextDefaults == null) {
return;
}
try {
monitor.beginTask("Read default objects", 1);
currentDatabaseInstanceName = null;
Class<? extends DBSObject> childType = objectContainer.getPrimaryChildType(monitor);
if (childType == null || !DBSObjectContainer.class.isAssignableFrom(childType)) {
enabled = false;
} else {
enabled = true;
DBSObjectContainer defObject = null;
if (DBSCatalog.class.isAssignableFrom(childType)) {
defObject = contextDefaults.getDefaultCatalog();
}
if (defObject != null) {
Class<? extends DBSObject> catalogChildrenType = defObject.getPrimaryChildType(monitor);
if (catalogChildrenType != null && DBSSchema.class.isAssignableFrom(catalogChildrenType)) {
currentDatabaseInstanceName = defObject.getName();
if (contextDefaults.supportsSchemaChange()) {
objectContainer = defObject;
} else if (!contextDefaults.supportsCatalogChange()) {
// Nothing can be changed
objectContainer = null;
}
DBSSchema defaultSchema = contextDefaults.getDefaultSchema();
if (defaultSchema != null) {
defObject = defaultSchema;
}
}
}
objectList = objectContainer == null ? (defObject == null ? Collections.emptyList() : Collections.singletonList(defObject)) : objectContainer.getChildren(monitor);
defaultObject = defObject;
if (readNodes) {
// Cache navigator nodes
if (objectList != null) {
for (DBSObject child : objectList) {
if (DBUtils.getAdapter(DBSObjectContainer.class, child) != null) {
DBNDatabaseNode node = navigatorModel.getNodeByObject(monitor, child, false);
if (node != null) {
nodeList.add(node);
}
}
}
}
}
}
} catch (DBException e) {
throw new InvocationTargetException(e);
} finally {
monitor.done();
}
}
use of org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults in project dbeaver by dbeaver.
the class NavigatorHandlerLinkEditor method execute.
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
final IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
final IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
if (activeEditor == null) {
return null;
}
NavigatorViewBase navigatorView = NavigatorUtils.getActiveNavigatorView(event);
if (navigatorView == null) {
return null;
}
if (navigatorView instanceof ProjectExplorerView || (navigatorView instanceof ProjectNavigatorView && activeEditor instanceof ITextEditor)) {
IFile file = EditorUtils.getFileFromInput(activeEditor.getEditorInput());
if (file != null) {
showResourceInNavigator(navigatorView, file);
}
} else if (activeEditor.getEditorInput() instanceof IDatabaseEditorInput) {
IDatabaseEditorInput editorInput = (IDatabaseEditorInput) activeEditor.getEditorInput();
DBNNode dbnNode = editorInput.getNavigatorNode();
if (dbnNode != null) {
navigatorView.showNode(dbnNode);
}
} else if (activeEditor instanceof IDataSourceContainerProvider) {
DBPDataSourceContainer dsContainer = ((IDataSourceContainerProvider) activeEditor).getDataSourceContainer();
@NotNull DBSObject activeObject = null;
if (dsContainer != null) {
if (activeEditor instanceof DBPContextProvider) {
DBCExecutionContext executionContext = ((DBPContextProvider) activeEditor).getExecutionContext();
if (executionContext != null) {
DBCExecutionContextDefaults contextDefaults = executionContext.getContextDefaults();
if (contextDefaults != null) {
activeObject = contextDefaults.getDefaultSchema();
if (activeObject == null) {
activeObject = contextDefaults.getDefaultCatalog();
}
}
}
}
if (activeObject == null) {
DBPDataSource dataSource = dsContainer.getDataSource();
if (dataSource != null) {
activeObject = DBUtils.getDefaultOrActiveObject(dataSource.getDefaultInstance());
} else {
activeObject = dsContainer;
}
}
DBSObject objectToSelect = activeObject;
final NavigatorViewBase view = navigatorView;
UIUtils.runInUI(activePage.getWorkbenchWindow(), monitor -> {
DBSObject showObject = objectToSelect;
if (showObject instanceof DBSInstance && !(showObject instanceof DBPDataSourceContainer)) {
showObject = objectToSelect.getParentObject();
}
if (showObject instanceof DBPDataSource) {
showObject = ((DBPDataSource) showObject).getContainer();
}
DBNDatabaseNode objectNode = view.getModel().getNodeByObject(monitor, showObject, true);
if (objectNode != null) {
view.showNode(objectNode);
}
});
}
}
activePage.activate(navigatorView);
return null;
}
use of org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults in project dbeaver by dbeaver.
the class NavigatorUtils method syncEditorWithNavigator.
public static boolean syncEditorWithNavigator(INavigatorModelView navigatorView, IEditorPart activeEditor) {
if (!(activeEditor instanceof IDataSourceContainerProviderEx)) {
return false;
}
IDataSourceContainerProviderEx dsProvider = (IDataSourceContainerProviderEx) activeEditor;
Viewer navigatorViewer = navigatorView.getNavigatorViewer();
if (navigatorViewer == null) {
return false;
}
DBNNode selectedNode = getSelectedNode(navigatorViewer.getSelection());
if (!(selectedNode instanceof DBNDatabaseNode)) {
return false;
}
final DBPDataSourceContainer ds = ((DBNDatabaseNode) selectedNode).getDataSourceContainer();
if (ds == null) {
return false;
}
if (dsProvider.getDataSourceContainer() != ds) {
dsProvider.setDataSourceContainer(ds);
}
if (activeEditor instanceof DBPContextProvider) {
// Now check if we can change default object
DBSObject dbObject = ((DBNDatabaseNode) selectedNode).getObject();
if (dbObject instanceof DBSCatalog || dbObject instanceof DBSSchema) {
DBCExecutionContext navExecutionContext = null;
try {
navExecutionContext = DBUtils.getOrOpenDefaultContext(dbObject, false);
} catch (DBCException ignored) {
}
DBCExecutionContext editorExecutionContext = ((DBPContextProvider) activeEditor).getExecutionContext();
if (navExecutionContext != null && editorExecutionContext != null) {
DBCExecutionContextDefaults editorContextDefaults = editorExecutionContext.getContextDefaults();
if (editorContextDefaults != null) {
RuntimeUtils.runTask(monitor -> {
try {
monitor.beginTask("Change default object", 1);
if (dbObject instanceof DBSCatalog && dbObject != editorContextDefaults.getDefaultCatalog()) {
monitor.subTask("Change default catalog");
editorContextDefaults.setDefaultCatalog(monitor, (DBSCatalog) dbObject, null);
} else if (dbObject instanceof DBSSchema && dbObject != editorContextDefaults.getDefaultSchema()) {
monitor.subTask("Change default schema");
editorContextDefaults.setDefaultSchema(monitor, (DBSSchema) dbObject);
}
monitor.worked(1);
monitor.done();
} catch (DBCException e) {
throw new InvocationTargetException(e);
}
}, "Set active object", dbObject.getDataSource().getContainer().getPreferenceStore().getInt(ModelPreferences.CONNECTION_OPEN_TIMEOUT));
}
}
}
}
return true;
}
use of org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults in project dbeaver by dbeaver.
the class NavigatorHandlerSetDefaultObject method markObjectAsActive.
@SuppressWarnings("unchecked")
private void markObjectAsActive(final DBNDatabaseNode databaseNode, IEditorPart activeEditor) {
DBNNode parentNode = databaseNode.getParentNode();
if (parentNode instanceof DBNDatabaseItem) {
markObjectAsActive((DBNDatabaseItem) parentNode, activeEditor);
return;
}
DBSObject object = databaseNode.getObject();
DBPDataSource dataSource = object.getDataSource();
final DBCExecutionContext editorContext;
if (activeEditor instanceof DBPContextProvider) {
editorContext = ((DBPContextProvider) activeEditor).getExecutionContext();
} else {
editorContext = null;
}
TasksJob.runTask("Change default object", monitor -> {
try {
DBExecUtils.tryExecuteRecover(monitor, dataSource, param -> {
try {
DBCExecutionContext defaultContext = dataSource.getDefaultInstance().getDefaultContext(monitor, false);
DBCExecutionContext[] contextsToChange;
if (editorContext != null && editorContext != defaultContext && editorContext.getDataSource() == defaultContext.getDataSource()) {
contextsToChange = new DBCExecutionContext[] { defaultContext, editorContext };
} else {
contextsToChange = new DBCExecutionContext[] { defaultContext };
}
for (DBCExecutionContext executionContext : contextsToChange) {
DBCExecutionContextDefaults contextDefaults = executionContext.getContextDefaults();
if (contextDefaults != null) {
if (object instanceof DBSCatalog && contextDefaults.supportsCatalogChange()) {
contextDefaults.setDefaultCatalog(monitor, (DBSCatalog) object, null);
} else if (object instanceof DBSSchema && contextDefaults.supportsSchemaChange()) {
contextDefaults.setDefaultSchema(monitor, (DBSSchema) object);
} else {
throw new DBCException("Internal error: active object change not supported");
}
}
}
} catch (DBException e) {
throw new InvocationTargetException(e);
}
});
} catch (Exception e) {
throw new InvocationTargetException(e);
}
});
}
use of org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults in project dbeaver by dbeaver.
the class SelectDatabaseDialog method createUpperControls.
@Override
protected void createUpperControls(Composite dialogArea) {
DBPDataSource dataSource = dataSourceContainer.getDataSource();
if (currentInstanceName != null && dataSource != null) {
DBSObjectContainer instanceContainer = DBUtils.getAdapter(DBSObjectContainer.class, dataSource);
DBCExecutionContextDefaults contextDefaults = null;
DBCExecutionContext defaultContext = DBUtils.getDefaultContext(instanceContainer, true);
if (defaultContext != null) {
contextDefaults = defaultContext.getContextDefaults();
}
if (instanceContainer != null && contextDefaults != null && contextDefaults.supportsCatalogChange()) {
createInstanceSelector(dialogArea, instanceContainer);
}
}
}
Aggregations