From bc3cf355bff1ac779cefada0fce43b2b1d6023cc Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Mon, 20 Mar 2023 13:11:32 +0300 Subject: [PATCH] dbeaver/pro#1443 Resource types and icons model refactoring (#1545) --- .../model/rm/DBNResourceManagerResource.java | 49 ++++++++++++++----- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/DBNResourceManagerResource.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/DBNResourceManagerResource.java index 934b503968..1ed91657a7 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/DBNResourceManagerResource.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/DBNResourceManagerResource.java @@ -20,7 +20,6 @@ package io.cloudbeaver.model.rm; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; -import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.model.DBPImage; import org.jkiss.dbeaver.model.DBPObject; @@ -30,7 +29,11 @@ import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.rm.RMController; import org.jkiss.dbeaver.model.rm.RMProject; import org.jkiss.dbeaver.model.rm.RMResource; +import org.jkiss.dbeaver.model.rm.RMResourceType; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; +import org.jkiss.dbeaver.registry.ResourceTypeDescriptor; +import org.jkiss.dbeaver.registry.ResourceTypeRegistry; +import org.jkiss.utils.ArrayUtils; import org.jkiss.utils.CommonUtils; import org.jkiss.utils.IOUtils; @@ -38,9 +41,6 @@ import java.util.ArrayList; import java.util.List; public class DBNResourceManagerResource extends DBNAbstractResourceManagerNode { - private static final Log log = Log.getLog(DBNResourceManagerResource.class); - private static final String FILE_EXTENSION_SQL = "sql"; - private static final String FILE_EXTENSION_DATASET = "ds"; private final RMResource resource; @@ -66,17 +66,42 @@ public class DBNResourceManagerResource extends DBNAbstractResourceManagerNode { @Override public DBPImage getNodeIcon() { - return resource.isFolder() ? DBIcon.TREE_FOLDER : getNodeIconByType(); + if (resource.isFolder()) { + if (getParentNode() instanceof DBNResourceManagerResource) { + return DBIcon.TREE_FOLDER; + } + // It may be a special folder + ResourceTypeDescriptor folderResType = ResourceTypeRegistry.getInstance().getResourceTypeByRootPath( + getOwnerProject(), + getName() + ); + if (folderResType != null) { + return folderResType.getFolderIcon(); + } + return DBIcon.TREE_FOLDER; + } else { + var fileExtension = IOUtils.getFileExtension(getNodeName()); + if (!CommonUtils.isEmpty(fileExtension)) { + RMProject project = getProjectNode(); + if (project != null) { + for (RMResourceType rt : project.getResourceTypes()) { + if (ArrayUtils.contains(rt.getFileExtensions(), fileExtension)) { + return new DBIcon(null, rt.getIcon()); + } + } + } + } + return DBIcon.TREE_PAGE; + } } - private DBPImage getNodeIconByType() { - var fileExtension = IOUtils.getFileExtension(getNodeName()); - if (FILE_EXTENSION_SQL.equals(fileExtension)) { - return DBIcon.TREE_FILE; - } else if (FILE_EXTENSION_DATASET.equals(fileExtension)) { - return DBIcon.TREE_DATASET; + private RMProject getProjectNode() { + for (DBNNode node = this; node != null; node = node.getParentNode()) { + if (node instanceof DBNResourceManagerProject) { + return ((DBNResourceManagerProject) node).getProject(); + } } - return DBIcon.TREE_PAGE; + return null; } @Override