Skip to content

Commit b56bc6e

Browse files
committed
dbeaver/pro#5848 add rename to desktop te
1 parent 3b6e487 commit b56bc6e

File tree

7 files changed

+115
-90
lines changed

7 files changed

+115
-90
lines changed

server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/BaseWebProjectImpl.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,7 @@
2222
import org.jkiss.dbeaver.model.app.DBPWorkspace;
2323
import org.jkiss.dbeaver.model.auth.SMSessionContext;
2424
import org.jkiss.dbeaver.model.impl.app.BaseProjectImpl;
25-
import org.jkiss.dbeaver.model.rm.RMController;
26-
import org.jkiss.dbeaver.model.rm.RMControllerProvider;
27-
import org.jkiss.dbeaver.model.rm.RMProject;
28-
import org.jkiss.dbeaver.model.rm.RMProjectType;
29-
import org.jkiss.utils.CommonUtils;
25+
import org.jkiss.dbeaver.model.rm.*;
3026

3127
import java.nio.file.Path;
3228

@@ -109,13 +105,12 @@ public boolean isPrivateProject() {
109105

110106
@Override
111107
public void updateProject(@Nullable String newName, @Nullable String description) throws DBException {
112-
super.updateProject(newName, description);
113-
if (CommonUtils.isNotEmpty(newName)) {
114-
getRMProject().setName(newName);
115-
}
116-
if (CommonUtils.isNotEmpty(description)) {
117-
getRMProject().setDescription(description);
118-
}
108+
RMProject rmProject = getResourceController().updateProject(this.getId(), new RMProjectInfo(newName, description));
109+
updateProjectInfo(rmProject.getName(), rmProject.getDescription());
110+
}
119111

112+
public void updateProjectInfo(@Nullable String newName, @Nullable String description) {
113+
this.project.setName(newName);
114+
this.project.setDescription(description);
120115
}
121116
}

server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java

Lines changed: 11 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.cloudbeaver.service.security.SMUtils;
2222
import io.cloudbeaver.service.sql.WebSQLConstants;
2323
import io.cloudbeaver.utils.ServletAppUtils;
24+
import io.cloudbeaver.utils.WebRMUtils;
2425
import io.cloudbeaver.utils.file.UniversalFileVisitor;
2526
import org.eclipse.core.runtime.IPath;
2627
import org.jkiss.code.NotNull;
@@ -123,7 +124,7 @@ protected RMLocalProject createWebProjectImpl(
123124
@NotNull String projectId,
124125
@NotNull SessionContextImpl sessionContext
125126
) throws DBException {
126-
return new RMLocalProject(workspace, sessionContext, getProjectPath(projectId), parseProjectName(projectId).getType());
127+
return new RMLocalProject(workspace, sessionContext, getProjectPath(projectId), WebRMUtils.parseProjectName(projectId).getType());
127128
}
128129

129130
@NotNull
@@ -178,7 +179,7 @@ private List<RMProject> readAccessibleSharedProjects(@NotNull String userId) thr
178179
.stream()
179180
.filter(smObjectPermissions -> CommonUtils.isNotEmpty(smObjectPermissions.getObjectId()))
180181
.map(projectPermission -> makeProjectFromPath(
181-
sharedProjectsPath.resolve(parseProjectNameUnsafe(projectPermission.getObjectId()).getName()),
182+
sharedProjectsPath.resolve(WebRMUtils.parseProjectNameUnsafe(projectPermission.getObjectId()).getName()),
182183
Arrays.stream(projectPermission.getPermissions()).map(RMProjectPermission::fromPermission).collect(Collectors.toSet()),
183184
RMProjectType.SHARED, true)
184185
)
@@ -299,11 +300,11 @@ public RMProject updateProject(@NotNull String projectId, @NotNull RMProjectInfo
299300
if (!Files.exists(targetPath)) {
300301
throw new DBException("Project folder '" + projectId + "' not found");
301302
}
302-
if (!project.getRMProject().isShared()) {
303+
if (!project.canUpdateProjectName()) {
303304
throw new DBException("Project '" + projectId + "' is not shared");
304305
}
305306
project.updateProject(projectInfo.getName(), projectInfo.getDescription());
306-
return project.getRMProject();
307+
return WebRMUtils.createRmProjectFromWebProject(project);
307308
}
308309
}
309310

@@ -703,7 +704,7 @@ private Path getTargetPath(@NotNull String projectId, @NotNull String resourcePa
703704

704705
@Nullable
705706
protected RMProject makeProjectFromId(String projectId, boolean loadPermissions) throws DBException {
706-
var projectName = parseProjectName(projectId);
707+
var projectName = WebRMUtils.parseProjectName(projectId);
707708
var projectPath = getProjectPath(projectId);
708709
if (!Files.exists(projectPath)) {
709710
if (isPrivateProject(projectId) && isProjectOwner(projectId)) {
@@ -741,7 +742,7 @@ private RMProject makeProjectFromPath(Path path, Set<RMProjectPermission> permis
741742
.toArray(String[]::new);
742743

743744
RMLocalProject webProject = new RMLocalProject(workspace, new SessionContextImpl(null), path, type);
744-
RMProject project = webProject.getRMProject();
745+
RMProject project = WebRMUtils.createRmProjectFromWebProject(webProject);
745746
project.setProjectPermissions(allProjectPermissions);
746747
if (Files.exists(path)) {
747748
try {
@@ -837,7 +838,7 @@ protected <T> T doFileWriteOperation(String projectId, Path file, RMFileOperatio
837838
}
838839

839840
protected Path getProjectPath(String projectId) throws DBException {
840-
RMProjectName project = parseProjectName(projectId);
841+
RMProjectName project = WebRMUtils.parseProjectName(projectId);
841842
RMProjectType type = project.getType();
842843
String projectName = project.getName();
843844
switch (type) {
@@ -999,56 +1000,13 @@ public LocalResourceController build() throws DBException {
9991000
}
10001001
}
10011002

1002-
public static class RMProjectName {
1003-
String prefix;
1004-
String name;
1005-
1006-
private RMProjectName(String prefix, String name) {
1007-
this.prefix = prefix;
1008-
this.name = name;
1009-
}
1010-
1011-
public String getPrefix() {
1012-
return prefix;
1013-
}
1014-
1015-
public String getName() {
1016-
return name;
1017-
}
1018-
1019-
public RMProjectType getType() {
1020-
return RMProjectType.getByPrefix(prefix);
1021-
}
1022-
}
1023-
1024-
public static RMProjectName parseProjectName(String projectId) throws DBException {
1025-
if (CommonUtils.isEmpty(projectId)) {
1026-
throw new DBException("Project id is empty");
1027-
}
1028-
return parseProjectNameUnsafe(projectId);
1029-
}
1030-
1031-
private static RMProjectName parseProjectNameUnsafe(String projectId) {
1032-
String prefix;
1033-
String name;
1034-
int divPos = projectId.indexOf("_");
1035-
if (divPos < 0) {
1036-
prefix = RMProjectType.USER.getPrefix();
1037-
name = projectId;
1038-
} else {
1039-
prefix = projectId.substring(0, divPos);
1040-
name = projectId.substring(divPos + 1);
1041-
}
1042-
return new RMProjectName(prefix, name);
1043-
}
1044-
10451003
public static boolean isGlobalProject(String projectId) {
1046-
RMProjectName rmProjectName = parseProjectNameUnsafe(projectId);
1004+
RMProjectName rmProjectName = WebRMUtils.parseProjectNameUnsafe(projectId);
10471005
return RMProjectType.GLOBAL.getPrefix().equals(rmProjectName.getPrefix());
10481006
}
10491007

10501008
public static boolean isPrivateProject(String projectId) {
1051-
RMProjectName rmProjectName = parseProjectNameUnsafe(projectId);
1009+
RMProjectName rmProjectName = WebRMUtils.parseProjectNameUnsafe(projectId);
10521010
return RMProjectType.USER.getPrefix().equals(rmProjectName.getPrefix());
10531011
}
10541012

@@ -1059,7 +1017,7 @@ private boolean isProjectOwner(String projectId) {
10591017
}
10601018

10611019
public static boolean isProjectOwner(String projectId, String userId) {
1062-
RMProjectName rmProjectName = parseProjectNameUnsafe(projectId);
1020+
RMProjectName rmProjectName = WebRMUtils.parseProjectNameUnsafe(projectId);
10631021
return RMProjectType.USER.getPrefix().equals(rmProjectName.getPrefix()) &&
10641022
rmProjectName.name.equals(userId);
10651023
}

server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/RMLocalProject.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.jkiss.dbeaver.model.app.DBPWorkspace;
2323
import org.jkiss.dbeaver.model.auth.SMSessionContext;
2424
import org.jkiss.dbeaver.model.impl.app.BaseProjectImpl;
25-
import org.jkiss.dbeaver.model.rm.RMProject;
2625
import org.jkiss.dbeaver.model.rm.RMProjectType;
2726
import org.jkiss.dbeaver.model.rm.RMUtils;
2827
import org.jkiss.dbeaver.registry.DataSourceRegistry;
@@ -36,7 +35,7 @@ public class RMLocalProject extends BaseProjectImpl {
3635
@NotNull
3736
private final Path projectPath;
3837
@NotNull
39-
private final RMProject rmProject;
38+
private final RMProjectType projectType;
4039

4140
public RMLocalProject(
4241
@NotNull DBPWorkspace workspace,
@@ -46,11 +45,7 @@ public RMLocalProject(
4645
) {
4746
super(workspace, sessionContext);
4847
this.projectPath = projectPath;
49-
loadProperties();
50-
this.rmProject = new RMProject(getRmProjectName());
51-
this.rmProject.setId(RMUtils.makeProjectIdFromPath(projectPath, type));
52-
this.rmProject.setDescription(getDescription());
53-
this.rmProject.setType(type);
48+
this.projectType = type;
5449
}
5550

5651

@@ -62,13 +57,17 @@ public boolean isVirtual() {
6257
@NotNull
6358
@Override
6459
public String getId() {
65-
return rmProject.getId();
60+
return RMUtils.makeProjectIdFromPath(projectPath, projectType);
6661
}
6762

6863
@NotNull
6964
@Override
7065
public String getName() {
71-
return rmProject.getDisplayName();
66+
Object projectName = this.getProjectProperty(PROP_PROJECT_NAME);
67+
if (projectName != null) {
68+
return projectName.toString();
69+
}
70+
return projectPath.getFileName().toString();
7271
}
7372

7473
@NotNull
@@ -136,22 +135,13 @@ public boolean resetResourcesPropertiesBatch(@NotNull Collection<String> resourc
136135
return propertiesChanged;
137136
}
138137

139-
public RMProject getRMProject() {
140-
return rmProject;
138+
public boolean canUpdateProjectName() {
139+
return RMProjectType.SHARED.equals(projectType);
141140
}
142141

143142
@NotNull
144143
@Override
145144
protected DBPDataSourceRegistry createDataSourceRegistry() {
146145
return new DataSourceRegistry<>(this);
147146
}
148-
149-
@NotNull
150-
private String getRmProjectName() {
151-
Object projectName = this.getProjectProperty(PROP_PROJECT_NAME);
152-
if (projectName != null) {
153-
return projectName.toString();
154-
}
155-
return projectPath.getFileName().toString();
156-
}
157147
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* DBeaver - Universal Database Manager
3+
* Copyright (C) 2010-2025 DBeaver Corp and others
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package io.cloudbeaver.model.rm.local;
18+
19+
import org.jkiss.dbeaver.model.rm.RMProjectType;
20+
21+
public class RMProjectName {
22+
String prefix;
23+
String name;
24+
25+
public RMProjectName(String prefix, String name) {
26+
this.prefix = prefix;
27+
this.name = name;
28+
}
29+
30+
public String getPrefix() {
31+
return prefix;
32+
}
33+
34+
public String getName() {
35+
return name;
36+
}
37+
38+
public RMProjectType getType() {
39+
return RMProjectType.getByPrefix(prefix);
40+
}
41+
}

server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -985,7 +985,7 @@ public void updateSessionProject(@NotNull String projectId, @NotNull RMProjectIn
985985
if (project == null) {
986986
throw new DBException("Project not found: " + projectId);
987987
}
988-
project.updateProject(rmProjectInfo.getName(), rmProjectInfo.getDescription());
988+
project.updateProjectInfo(rmProjectInfo.getName(), rmProjectInfo.getDescription());
989989
}
990990

991991
@Override
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.cloudbeaver.utils;
2+
3+
import io.cloudbeaver.model.rm.local.RMProjectName;
4+
import org.jkiss.code.NotNull;
5+
import org.jkiss.dbeaver.DBException;
6+
import org.jkiss.dbeaver.model.app.DBPProject;
7+
import org.jkiss.dbeaver.model.rm.RMProject;
8+
import org.jkiss.dbeaver.model.rm.RMProjectType;
9+
import org.jkiss.utils.CommonUtils;
10+
11+
public class WebRMUtils {
12+
13+
public static RMProject createRmProjectFromWebProject(@NotNull DBPProject project) {
14+
RMProject rmProject = new RMProject();
15+
rmProject.setId(project.getId());
16+
rmProject.setName(project.getName());
17+
rmProject.setDescription(project.getDescription());
18+
rmProject.setType(parseProjectNameUnsafe(rmProject.getId()).getType());
19+
return rmProject;
20+
}
21+
22+
public static RMProjectName parseProjectName(@NotNull String projectId) throws DBException {
23+
if (CommonUtils.isEmpty(projectId)) {
24+
throw new DBException("Project id is empty");
25+
}
26+
return parseProjectNameUnsafe(projectId);
27+
}
28+
29+
public static RMProjectName parseProjectNameUnsafe(String projectId) {
30+
String prefix;
31+
String name;
32+
int divPos = projectId.indexOf("_");
33+
if (divPos < 0) {
34+
prefix = RMProjectType.USER.getPrefix();
35+
name = projectId;
36+
} else {
37+
prefix = projectId.substring(0, divPos);
38+
name = projectId.substring(divPos + 1);
39+
}
40+
return new RMProjectName(prefix, name);
41+
}
42+
}

server/bundles/io.cloudbeaver.service.rm/src/io/cloudbeaver/service/rm/impl/WebServiceRM.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,10 @@ public RMProject updateProject(
279279
if (project == null) {
280280
throw new DBException("Project not found: " + projectId);
281281
}
282-
RMProjectInfo projectInfo = new RMProjectInfo();
283-
projectInfo.setName(name == null ? project.getRMProject().getName() : name);
284-
projectInfo.setDescription(description == null ? project.getRMProject().getDescription() : description);
282+
RMProjectInfo projectInfo = new RMProjectInfo(name, description);
285283
RMProject rmProject = getResourceController(session).updateProject(projectId, projectInfo);
286-
project.updateProject(name, description);
284+
project.updateProject(rmProject.getName(), rmProject.getDescription());
285+
287286
ServletAppUtils.getServletApplication().getEventController().addEvent(
288287
WSProjectUpdateEvent.update(session.getSessionId(), session.getUserId(), rmProject.getId(), projectInfo)
289288
);

0 commit comments

Comments
 (0)