提交 6599e464 编写于 作者: S Serge Rider

Show implicit nav nodes (ER Diagrams, Bookmarks, etc) always

上级 4add1384
......@@ -231,11 +231,17 @@ public class ProjectRegistry implements DBPProjectManager, DBPExternalFileManage
return handler;
}
public Collection<ResourceHandlerDescriptor> getResourceHandlers()
@Override
public DBPResourceHandler[] getAllResourceHandlers()
{
return handlerDescriptors;
DBPResourceHandler[] handlers = new DBPResourceHandler[handlerDescriptors.size()];
for (int i = 0; i < handlerDescriptors.size(); i++) {
handlers[i] = handlerDescriptors.get(i).getHandler();
}
return handlers;
}
@Override
public IFolder getResourceDefaultRoot(IProject project, Class<? extends DBPResourceHandler> handlerType, boolean forceCreate)
{
if (project == null) {
......@@ -244,9 +250,14 @@ public class ProjectRegistry implements DBPProjectManager, DBPExternalFileManage
for (ResourceHandlerDescriptor rhd : handlerDescriptors) {
DBPResourceHandler handler = rhd.getHandler();
if (handler != null && handler.getClass() == handlerType) {
final IFolder realFolder = project.getFolder(rhd.getDefaultRoot(project));
String defaultRoot = rhd.getDefaultRoot(project);
if (defaultRoot == null) {
// No root
return null;
}
final IFolder realFolder = project.getFolder(defaultRoot);
if (!realFolder.exists() && forceCreate) {
if (forceCreate && !realFolder.exists()) {
try {
realFolder.create(true, true, new NullProgressMonitor());
} catch (CoreException e) {
......@@ -277,6 +288,11 @@ public class ProjectRegistry implements DBPProjectManager, DBPExternalFileManage
return dataSourceRegistry;
}
public ResourceHandlerDescriptor[] getResourceHandlerDescriptors()
{
return handlerDescriptors.toArray(new ResourceHandlerDescriptor[handlerDescriptors.size()]);
}
public DataSourceRegistry getActiveDataSourceRegistry()
{
if (activeProject == null) {
......
......@@ -171,7 +171,7 @@ public class PrefPageProjectSettings extends AbstractPrefPage implements IWorkbe
protected void performDefaults()
{
resourceTable.removeAll();
for (ResourceHandlerDescriptor descriptor : DBeaverCore.getInstance().getProjectRegistry().getResourceHandlers()) {
for (ResourceHandlerDescriptor descriptor : DBeaverCore.getInstance().getProjectRegistry().getResourceHandlerDescriptors()) {
if (!descriptor.isManagable()) {
continue;
}
......
......@@ -22,11 +22,14 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.*;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPDataSourceFolder;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.utils.ContentUtils;
......@@ -250,6 +253,10 @@ public class ResourceUtils {
if (scriptsFolder == null) {
scriptsFolder = scriptsRootFolder;
}
if (!scriptsFolder.exists()) {
scriptsFolder.create(true, true, new NullProgressMonitor());
}
if (CommonUtils.equalObjects(scriptsRootFolder, scriptsFolder)) {
// We are in the root folder
if (dataSourceContainer != null) {
......@@ -298,4 +305,22 @@ public class ResourceUtils {
return tempFile;
}
public static void checkFolderExists(IFolder folder)
throws DBException
{
checkFolderExists(folder, new VoidProgressMonitor());
}
public static void checkFolderExists(IFolder folder, DBRProgressMonitor monitor)
throws DBException
{
if (!folder.exists()) {
try {
folder.create(true, true, monitor.getNestedMonitor());
} catch (CoreException e) {
throw new DBException("Can't create folder '" + folder.getFullPath() + "'", e);
}
}
}
}
......@@ -36,6 +36,7 @@ import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen;
import org.jkiss.dbeaver.ui.resources.AbstractResourceHandler;
import org.jkiss.dbeaver.ui.resources.ResourceUtils;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.ArrayUtils;
......@@ -212,6 +213,7 @@ public class BookmarksHandlerImpl extends AbstractResourceHandler {
if (folder == null) {
throw new DBException("Can't detect folder for bookmark");
}
ResourceUtils.checkFolderExists(folder);
IFile file = ContentUtils.getUniqueFile(
folder,
......
......@@ -34,6 +34,7 @@ import org.jkiss.dbeaver.model.navigator.DBNResource;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.ui.resources.AbstractResourceHandler;
import org.jkiss.dbeaver.ui.resources.ResourceUtils;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.CommonUtils;
......@@ -130,6 +131,7 @@ public class ERDResourceHandler extends AbstractResourceHandler {
if (folder == null) {
throw new DBException("Can't detect folder for diagram");
}
ResourceUtils.checkFolderExists(folder, monitor);
final IFile file = ContentUtils.getUniqueFile(folder, CommonUtils.escapeFileName(title), ERD_EXT);
......
......@@ -17,15 +17,21 @@
package org.jkiss.dbeaver.model.app;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.jkiss.code.Nullable;
/**
* ProjectManager
*/
public interface DBPProjectManager
{
DBPResourceHandler[] getAllResourceHandlers();
@Nullable
DBPResourceHandler getResourceHandler(IResource resource);
@Nullable
IFolder getResourceDefaultRoot(IProject project, Class<? extends DBPResourceHandler> handlerType, boolean forceCreate);
IProject getActiveProject();
void setActiveProject(IProject project);
......@@ -35,4 +41,5 @@ public interface DBPProjectManager
void removeProjectListener(DBPProjectListener listener);
DBPDataSourceRegistry getDataSourceRegistry(IProject project);
}
......@@ -142,6 +142,18 @@ public class DBNProject extends DBNResource
return children;
}
@Override
protected IResource[] addImplicitMembers(IResource[] members) {
for (DBPResourceHandler rh : getModel().getPlatform().getProjectManager().getAllResourceHandlers()) {
IFolder rhDefaultRoot = getModel().getPlatform().getProjectManager().getResourceDefaultRoot(getProject(), rh.getClass(), false);
if (rhDefaultRoot != null && !rhDefaultRoot.exists()) {
// Add as explicit member
members = ArrayUtils.add(IResource.class, members, rhDefaultRoot);
}
}
return super.addImplicitMembers(members);
}
public DBNResource findResource(IResource resource)
{
List<IResource> path = new ArrayList<>();
......
......@@ -150,13 +150,16 @@ public class DBNResource extends DBNNode// implements IContributorResourceAdapte
{
List<DBNNode> result = new ArrayList<>();
try {
if (resource.exists()) {
IResource[] members = ((IContainer) resource).members(false);
members = addImplicitMembers(members);
for (IResource member : members) {
DBNNode newChild = makeNode(member);
if (newChild != null) {
result.add(newChild);
}
}
}
} catch (CoreException e) {
throw new DBException("Can't read container's members", e);
}
......@@ -170,6 +173,10 @@ public class DBNResource extends DBNNode// implements IContributorResourceAdapte
}
}
protected IResource[] addImplicitMembers(IResource[] members) {
return members;
}
DBNResource getChild(IResource resource)
{
if (children == null) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册