Skip to content

Commit

Permalink
dbeaver/dbeaver-ee#1907 supports shared tasks configurations; (#1173)
Browse files Browse the repository at this point in the history
* dbeaver/dbeaver-ee#1907 supports shared tasks configurations;

* dbeaver/dbeaver-ee#1907 typo fixed

* dbeaver/dbeaver-ee#1907 code style fix
  • Loading branch information
LonwoLonwo authored Sep 27, 2022
1 parent 860b92e commit 27e2025
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.rm.RMProject;
import org.jkiss.dbeaver.model.rm.RMProjectPermission;
import org.jkiss.dbeaver.model.rm.RMProjectType;
import org.jkiss.dbeaver.runtime.DBWorkbench;

import java.nio.file.Path;
Expand Down Expand Up @@ -38,6 +39,28 @@ public static Path getProjectPath(RMProject project) {
}
}

/**
* Different types of project have different location on the workspace. Method returns path to the project.
*
* @param projectId project name or other identifier
* @return path to the project based on the name of projects and prefixes that it contains
*/
@NotNull
public static Path getProjectPathByName(@NotNull String projectId) {
if (!projectId.contains("_") || projectId.startsWith("_")) {
return getRootPath().resolve(BaseWebApplication.getInstance().getDefaultProjectName());
}
String prefix = projectId.substring(0, projectId.indexOf("_"));
switch (RMProjectType.getByPrefix(prefix)) {
case GLOBAL:
return getRootPath().resolve(BaseWebApplication.getInstance().getDefaultProjectName());
case SHARED:
return getSharedProjectsPath().resolve(projectId);
default:
return getUserProjectsPath().resolve(projectId);
}
}

public static Set<String> parseProjectPermissions(Set<String> permissions) {
return permissions.stream()
.map(RMProjectPermission::fromPermission).filter(Objects::nonNull)
Expand All @@ -48,7 +71,7 @@ public static Set<String> parseProjectPermissions(Set<String> permissions) {
public static RMProject createAnonymousProject() {
RMProject project = new RMProject("anonymous");
project.setId("anonymous");
project.setType(RMProject.Type.USER);
project.setType(RMProjectType.USER);
project.setProjectPermissions(RMProjectPermission.DATA_SOURCES_EDIT.getAllPermissions());
return project;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,16 +133,16 @@ public RMProject[] listAccessibleProjects() throws DBException {
//FIXME: remove legacy global project support
//admin has all edit access
//user has only read access
var globalProjectPermissions = getProjectPermissions(globalProjectName, RMProject.Type.GLOBAL);
var globalProjectPermissions = getProjectPermissions(globalProjectName, RMProjectType.GLOBAL);

RMProject globalProject = makeProjectFromPath(getGlobalProjectPath(), globalProjectPermissions, RMProject.Type.GLOBAL, true);
RMProject globalProject = makeProjectFromPath(getGlobalProjectPath(), globalProjectPermissions, RMProjectType.GLOBAL, true);
if (globalProject != null) {
projects.add(globalProject);
}

//user has full access to his private project
var userProjectPermission = getProjectPermissions(null, RMProject.Type.USER);
RMProject userProject = makeProjectFromPath(getPrivateProjectPath(), userProjectPermission, RMProject.Type.USER, false);
var userProjectPermission = getProjectPermissions(null, RMProjectType.USER);
RMProject userProject = makeProjectFromPath(getPrivateProjectPath(), userProjectPermission, RMProjectType.USER, false);
if (userProject != null) {
projects.add(0, userProject);
}
Expand All @@ -163,13 +163,13 @@ private List<RMProject> readAccessibleSharedProjects(@NotNull String userId) thr
.map(projectPermission -> makeProjectFromPath(
sharedProjectsPath.resolve(parseProjectName(projectPermission.getObjectId()).getName()),
projectPermission.getPermissions().stream().map(RMProjectPermission::fromPermission).collect(Collectors.toSet()),
RMProject.Type.SHARED, true)
RMProjectType.SHARED, true)
)
.filter(Objects::nonNull)
.collect(Collectors.toList());
}

private Set<RMProjectPermission> getProjectPermissions(@Nullable String projectId, RMProject.Type projectType) throws DBException {
private Set<RMProjectPermission> getProjectPermissions(@Nullable String projectId, RMProjectType projectType) throws DBException {
var activeUserCreds = credentialsProvider.getActiveUserCredentials();

switch (projectType) {
Expand Down Expand Up @@ -209,10 +209,10 @@ public RMProject[] listAllSharedProjects() throws DBException {
var allPaths = Files.list(sharedProjectsPath).collect(Collectors.toList());
for (Path path : allPaths) {
var projectPerms = getProjectPermissions(
makeProjectIdFromPath(path, RMProject.Type.SHARED),
RMProject.Type.SHARED
makeProjectIdFromPath(path, RMProjectType.SHARED),
RMProjectType.SHARED
);
var rmProject = makeProjectFromPath(path, projectPerms, RMProject.Type.SHARED, false);
var rmProject = makeProjectFromPath(path, projectPerms, RMProjectType.SHARED, false);
projects.add(rmProject);
}
return projects.stream()
Expand All @@ -238,7 +238,7 @@ public RMProject createProject(@NotNull String name, @Nullable String descriptio
if (Files.exists(projectPath)) {
throw new DBException("Project '" + name + "' already exists");
}
project = makeProjectFromPath(projectPath, Set.of(), RMProject.Type.SHARED, false);
project = makeProjectFromPath(projectPath, Set.of(), RMProjectType.SHARED, false);
if (project == null) {
throw new DBException("Project '" + name + "' not created");
}
Expand Down Expand Up @@ -546,7 +546,7 @@ private Path getTargetPath(@NotNull String projectId, @NotNull String resourcePa
}


private String makeProjectIdFromPath(Path path, RMProject.Type type) {
private String makeProjectIdFromPath(Path path, RMProjectType type) {
String projectName = path.getFileName().toString();
return type.getPrefix() + "_" + projectName;
}
Expand All @@ -561,7 +561,7 @@ private RMProject makeProjectFromId(String projectId, boolean loadPermissions) t
return makeProjectFromPath(projectPath, permissions, projectName.getType(), false);
}

private RMProject makeProjectFromPath(Path path, Set<RMProjectPermission> permissions, RMProject.Type type, boolean checkExistence) {
private RMProject makeProjectFromPath(Path path, Set<RMProjectPermission> permissions, RMProjectType type, boolean checkExistence) {
if (path == null) {
return null;
}
Expand Down Expand Up @@ -599,7 +599,7 @@ private RMProject makeProjectFromPath(Path path, Set<RMProjectPermission> permis

private Path getProjectPath(String projectId) throws DBException {
RMProjectName project = parseProjectName(projectId);
RMProject.Type type = project.getType();
RMProjectType type = project.getType();
String projectName = project.getName();
switch (type) {
case GLOBAL:
Expand Down Expand Up @@ -754,20 +754,16 @@ public String getName() {
return name;
}

public RMProject.Type getType() {
switch (prefix) {
case RMProject.PREFIX_GLOBAL: return RMProject.Type.GLOBAL;
case RMProject.PREFIX_SHARED: return RMProject.Type.SHARED;
default: return RMProject.Type.USER;
}
public RMProjectType getType() {
return RMProjectType.getByPrefix(prefix);
}
}
public static RMProjectName parseProjectName(String projectId) {
String prefix;
String name;
int divPos = projectId.indexOf("_");
if (divPos < 0) {
prefix = RMProject.Type.USER.getPrefix();
prefix = RMProjectType.USER.getPrefix();
name = projectId;
} else {
prefix = projectId.substring(0, divPos);
Expand All @@ -778,12 +774,12 @@ public static RMProjectName parseProjectName(String projectId) {

public static boolean isGlobalProject(String projectId) {
RMProjectName rmProjectName = parseProjectName(projectId);
return RMProject.Type.GLOBAL.getPrefix().equals(rmProjectName.getPrefix());
return RMProjectType.GLOBAL.getPrefix().equals(rmProjectName.getPrefix());
}

public static boolean isPrivateProject(String projectId, String userId) {
RMProjectName rmProjectName = parseProjectName(projectId);
return RMProject.Type.USER.getPrefix().equals(rmProjectName.getPrefix()) &&
return RMProjectType.USER.getPrefix().equals(rmProjectName.getPrefix()) &&
rmProjectName.name.equals(userId);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import org.jkiss.dbeaver.model.rm.RMController;
import org.jkiss.dbeaver.model.rm.RMProject;
import org.jkiss.dbeaver.model.rm.RMProjectPermission;
import org.jkiss.dbeaver.model.rm.RMProjectType;
import org.jkiss.dbeaver.model.runtime.AbstractJob;
import org.jkiss.dbeaver.model.runtime.BaseProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
Expand Down Expand Up @@ -348,7 +349,7 @@ private void loadProjects() {

public VirtualProjectImpl createVirtualProject(RMProject project) {
// Do not filter data sources from user project
DataSourceFilter filter = project.getType() == RMProject.Type.GLOBAL
DataSourceFilter filter = project.getType() == RMProjectType.GLOBAL
? this::isDataSourceAccessible
: x -> true;
VirtualProjectImpl sessionProject = application.createProjectImpl(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.model.auth.SMAuthenticationManager;
import org.jkiss.dbeaver.model.rm.RMProject;
import org.jkiss.dbeaver.model.rm.RMProjectType;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.utils.CommonUtils;

Expand Down Expand Up @@ -161,6 +161,6 @@ public static boolean isGlobalProject(DBPProject project) {

public static String getGlobalProjectId() {
String globalConfigurationName = getWebApplication().getDefaultProjectName();
return RMProject.Type.GLOBAL.getPrefix() + "_" + globalConfigurationName;
return RMProjectType.GLOBAL.getPrefix() + "_" + globalConfigurationName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration;
import org.jkiss.dbeaver.model.net.ssh.SSHConstants;
import org.jkiss.dbeaver.model.rm.RMProject;
import org.jkiss.dbeaver.model.rm.RMProjectType;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
import org.jkiss.dbeaver.registry.DataSourceProviderDescriptor;
Expand Down Expand Up @@ -335,7 +336,7 @@ public static void updateConfigAndRefreshDatabases(WebSession session, String pr
}

public static boolean isGlobalProject(DBPProject project) {
return project.getId().equals(RMProject.PREFIX_GLOBAL + "_" + CBApplication.getInstance().getDefaultProjectName());
return project.getId().equals(RMProjectType.GLOBAL.getPrefix() + "_" + CBApplication.getInstance().getDefaultProjectName());
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import io.cloudbeaver.model.user.WebUser;
import io.cloudbeaver.registry.WebFeatureRegistry;
import io.cloudbeaver.registry.WebPermissionDescriptor;
import io.cloudbeaver.registry.WebServiceDescriptor;
import io.cloudbeaver.registry.WebServiceRegistry;
import io.cloudbeaver.server.CBAppConfig;
import io.cloudbeaver.server.CBApplication;
Expand All @@ -49,7 +48,7 @@
import org.jkiss.dbeaver.model.navigator.DBNDataSource;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.rm.RMProject;
import org.jkiss.dbeaver.model.rm.RMProjectType;
import org.jkiss.dbeaver.model.security.SMAuthProviderCustomConfiguration;
import org.jkiss.dbeaver.model.security.SMConstants;
import org.jkiss.dbeaver.model.security.SMDataSourceGrant;
Expand Down Expand Up @@ -767,7 +766,7 @@ public Boolean setUserMetaParameterValues(WebSession webSession, String userId,

private DBPDataSourceRegistry getGlobalRegistry(WebSession session) {
String globalConfigurationName = CBApplication.getInstance().getDefaultProjectName();
return session.getProjectById(RMProject.Type.GLOBAL.getPrefix() + "_" + globalConfigurationName).getDataSourceRegistry();
return session.getProjectById(RMProjectType.GLOBAL.getPrefix() + "_" + globalConfigurationName).getDataSourceRegistry();
}

private void validatePermissions(@NotNull String expectedScope, @NotNull Collection<String> permissions) throws DBWebException {
Expand Down

0 comments on commit 27e2025

Please sign in to comment.