Skip to content

Commit f47f917

Browse files
committed
dbeaver/pro#5848 add events for project renaming
1 parent 1279473 commit f47f917

File tree

8 files changed

+185
-125
lines changed

8 files changed

+185
-125
lines changed

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

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@
2727
import org.jkiss.dbeaver.model.rm.RMProject;
2828
import org.jkiss.dbeaver.model.rm.RMProjectType;
2929
import org.jkiss.utils.CommonUtils;
30-
import org.jkiss.utils.Pair;
3130

3231
import java.nio.file.Path;
33-
import java.util.Collection;
3432

3533
public abstract class BaseWebProjectImpl extends BaseProjectImpl implements RMControllerProvider {
3634

@@ -104,50 +102,6 @@ public boolean isUseSecretStorage() {
104102
return false;
105103
}
106104

107-
/**
108-
* Method for Bulk Update of resources properties paths
109-
*
110-
* @param oldToNewPaths collection of OldPath to NewPath pairs
111-
*/
112-
public void moveResourcePropertiesBatch(@NotNull Collection<Pair<String, String>> oldToNewPaths) {
113-
loadMetadata();
114-
synchronized (metadataSync) {
115-
for (var pathsPair : oldToNewPaths) {
116-
final var oldResourcePath = CommonUtils.normalizeResourcePath(pathsPair.getFirst());
117-
final var newResourcePath = CommonUtils.normalizeResourcePath(pathsPair.getSecond());
118-
final var resProps = resourceProperties.remove(oldResourcePath);
119-
if (resProps != null) {
120-
resourceProperties.put(newResourcePath, resProps);
121-
}
122-
}
123-
}
124-
flushMetadata();
125-
}
126-
127-
/**
128-
* Method for Bulk Remove of resources properties
129-
*/
130-
public boolean resetResourcesPropertiesBatch(@NotNull Collection<String> resourcesPaths) {
131-
loadMetadata();
132-
boolean propertiesChanged = false;
133-
synchronized (metadataSync) {
134-
for (var resourcePath : resourcesPaths) {
135-
var removedProperties = resourceProperties.remove(CommonUtils.normalizeResourcePath(resourcePath));
136-
if (removedProperties != null) {
137-
propertiesChanged = true;
138-
}
139-
}
140-
}
141-
if (propertiesChanged) {
142-
flushMetadata();
143-
}
144-
return propertiesChanged;
145-
}
146-
147-
public Path getMetadataFilePath() {
148-
return getMetadataPath().resolve(METADATA_STORAGE_FILE);
149-
}
150-
151105
@Override
152106
public boolean isPrivateProject() {
153107
return RMProjectType.USER.equals(getRMProject().getType());

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

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void setProjectProperty(
9999
@NotNull String propName,
100100
@NotNull Object propValue
101101
) throws DBException {
102-
BaseWebProjectImpl webProject = getWebProject(projectId, false);
102+
RMLocalProject webProject = getWebProject(projectId, false);
103103
doFileWriteOperation(projectId, webProject.getMetadataFilePath(),
104104
() -> {
105105
log.debug("Updating value for property '" + propName + "' in project '" + projectId + "'");
@@ -271,7 +271,7 @@ public void moveProjectDataSourceFolder(
271271
}
272272
}
273273

274-
protected abstract BaseWebProjectImpl getWebProject(String projectId, boolean refresh) throws DBException;
274+
protected abstract RMLocalProject getWebProject(String projectId, boolean refresh) throws DBException;
275275

276276
protected abstract <T> T doFileWriteOperation(String projectId, Path file, RMFileOperation<T> operation)
277277
throws DBException;
@@ -316,25 +316,6 @@ public InternalWebProjectImpl(
316316
);
317317
}
318318

319-
@NotNull
320-
@Override
321-
public String getName() {
322-
Object projectName = this.getProjectProperty(BaseWebProjectImpl.PROP_PROJECT_NAME);
323-
if (projectName != null) {
324-
return projectName.toString();
325-
}
326-
return super.getName();
327-
}
328-
329-
@Nullable
330-
public String getDescription() {
331-
Object projectDescription = this.getProjectProperty(BaseWebProjectImpl.PROP_PROJECT_DESCRIPTION);
332-
if (projectDescription != null) {
333-
return projectDescription.toString();
334-
}
335-
return null;
336-
}
337-
338319
@NotNull
339320
@Override
340321
protected DBPDataSourceRegistry createDataSourceRegistry() {

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

Lines changed: 14 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616
*/
1717
package io.cloudbeaver.model.rm.local;
1818

19-
import com.google.gson.Gson;
20-
import com.google.gson.GsonBuilder;
21-
import io.cloudbeaver.BaseWebProjectImpl;
2219
import io.cloudbeaver.DBWConstants;
2320
import io.cloudbeaver.model.app.ServletApplication;
2421
import io.cloudbeaver.service.security.SMUtils;
@@ -50,8 +47,6 @@
5047
import org.jkiss.utils.Pair;
5148

5249
import java.io.IOException;
53-
import java.io.Reader;
54-
import java.nio.charset.StandardCharsets;
5550
import java.nio.file.*;
5651
import java.text.MessageFormat;
5752
import java.time.OffsetDateTime;
@@ -67,10 +62,6 @@
6762
public class LocalResourceController extends BaseLocalResourceController {
6863

6964
private static final Log log = Log.getLog(LocalResourceController.class);
70-
private static final Gson GSON = new GsonBuilder()
71-
.setPrettyPrinting()
72-
.create();
73-
private static final String PROJECT_INFO_CONF = ".project-info.conf";
7465

7566
protected final SMCredentialsProvider credentialsProvider;
7667

@@ -81,7 +72,7 @@ public class LocalResourceController extends BaseLocalResourceController {
8172
private Supplier<SMController> smControllerSupplier;
8273
protected final List<RMFileOperationHandler> fileHandlers;
8374

84-
private final Map<String, BaseWebProjectImpl> projectRegistries = new LinkedHashMap<>();
75+
private final Map<String, RMLocalProject> projectRegistries = new LinkedHashMap<>();
8576

8677
public LocalResourceController(
8778
DBPWorkspace workspace,
@@ -116,26 +107,23 @@ private Path getPrivateProjectPath() {
116107
return userId == null ? null : this.userProjectsPath.resolve(userId);
117108
}
118109

119-
protected BaseWebProjectImpl getWebProject(String projectId, boolean refresh) throws DBException {
110+
protected RMLocalProject getWebProject(String projectId, boolean refresh) throws DBException {
120111
synchronized (projectRegistries) {
121-
BaseWebProjectImpl project = projectRegistries.get(projectId);
112+
RMLocalProject project = projectRegistries.get(projectId);
122113
if (project == null || refresh) {
123-
SessionContextImpl sessionContext = new SessionContextImpl(null);
124-
RMProject rmProject = makeProjectFromId(projectId, false);
125-
project = createWebProjectImpl(projectId, sessionContext, rmProject);
114+
project = createWebProjectImpl(projectId, new SessionContextImpl(null));
126115
projectRegistries.put(projectId, project);
127116
}
128117
return project;
129118
}
130119
}
131120

132121
@NotNull
133-
protected InternalWebProjectImpl createWebProjectImpl(
134-
String projectId,
135-
SessionContextImpl sessionContext,
136-
RMProject rmProject
122+
protected RMLocalProject createWebProjectImpl(
123+
@NotNull String projectId,
124+
@NotNull SessionContextImpl sessionContext
137125
) throws DBException {
138-
return new InternalWebProjectImpl(sessionContext, rmProject, getProjectPath(projectId));
126+
return new RMLocalProject(workspace, sessionContext, getProjectPath(projectId), parseProjectName(projectId).getType());
139127
}
140128

141129
@NotNull
@@ -256,7 +244,7 @@ public RMProject[] listAllSharedProjects() throws DBException {
256244
var allPaths = list.toList();
257245
for (Path path : allPaths) {
258246
var projectPerms = getProjectPermissions(
259-
makeProjectIdFromPath(path, RMProjectType.SHARED),
247+
RMUtils.makeProjectIdFromPath(path, RMProjectType.SHARED),
260248
RMProjectType.SHARED
261249
);
262250
var rmProject = makeProjectFromPath(path, projectPerms, RMProjectType.SHARED, false);
@@ -306,7 +294,7 @@ public RMProject createProject(@NotNull String name, @Nullable String descriptio
306294
@Override
307295
public RMProject updateProject(@NotNull String projectId, @NotNull RMProjectInfo projectInfo) throws DBException {
308296
try (var projectLock = lockController.lock(projectId, "updateProject")) {
309-
BaseWebProjectImpl project = getWebProject(projectId, false);
297+
RMLocalProject project = getWebProject(projectId, false);
310298
Path targetPath = getProjectPath(projectId);
311299
if (!Files.exists(targetPath)) {
312300
throw new DBException("Project folder '" + projectId + "' not found");
@@ -658,7 +646,7 @@ public String setResourceProperty(
658646
) throws DBException {
659647
try (var ignoredLock = lockController.lock(projectId, "resourcePropertyUpdate")) {
660648
validateResourcePath(resourcePath);
661-
BaseWebProjectImpl webProject = getWebProject(projectId, false);
649+
RMLocalProject webProject = getWebProject(projectId, false);
662650
doFileWriteOperation(projectId, webProject.getMetadataFilePath(),
663651
() -> {
664652
log.debug("Updating resource property '" + propertyName + "' in project '" + projectId + "'");
@@ -679,7 +667,7 @@ public String setResourceProperties(
679667
) throws DBException {
680668
try (var ignoredLock = lockController.lock(projectId, "resourcePropertyUpdate")) {
681669
validateResourcePath(resourcePath);
682-
BaseWebProjectImpl webProject = getWebProject(projectId, false);
670+
RMLocalProject webProject = getWebProject(projectId, false);
683671
doFileWriteOperation(projectId, webProject.getMetadataFilePath(),
684672
() -> {
685673
log.debug("Updating resource '" + resourcePath + "' properties in project '" + projectId + "'");
@@ -713,12 +701,6 @@ private Path getTargetPath(@NotNull String projectId, @NotNull String resourcePa
713701
}
714702
}
715703

716-
717-
private String makeProjectIdFromPath(Path path, RMProjectType type) {
718-
String projectName = path.getFileName().toString();
719-
return type.getPrefix() + "_" + projectName;
720-
}
721-
722704
@Nullable
723705
protected RMProject makeProjectFromId(String projectId, boolean loadPermissions) throws DBException {
724706
var projectName = parseProjectName(projectId);
@@ -758,14 +740,9 @@ private RMProject makeProjectFromPath(Path path, Set<RMProjectPermission> permis
758740
.flatMap(rmProjectPermission -> rmProjectPermission.getAllPermissions().stream())
759741
.toArray(String[]::new);
760742

761-
RMProject project = new RMProject();
762-
project.setName(path.getFileName().toString());
763-
project.setId(makeProjectIdFromPath(path, type));
764-
project.setType(type);
743+
RMLocalProject webProject = new RMLocalProject(workspace, new SessionContextImpl(null), path, type);
744+
RMProject project = webProject.getRMProject();
765745
project.setProjectPermissions(allProjectPermissions);
766-
InternalWebProjectImpl webProject = new InternalWebProjectImpl(new SessionContextImpl(null), project, path);
767-
project.setName(webProject.getName());
768-
project.setDescription(webProject.getDescription());
769746
if (Files.exists(path)) {
770747
try {
771748
project.setCreateTime(
@@ -784,19 +761,6 @@ private RMProject makeProjectFromPath(Path path, Set<RMProjectPermission> permis
784761
return project;
785762
}
786763

787-
@NotNull
788-
private RMProjectInfo readProjectInfo(@NotNull Path projectPath) {
789-
Path projectInfoPath = projectPath.resolve(PROJECT_INFO_CONF);
790-
if (Files.exists(projectInfoPath)) {
791-
try (Reader reader = Files.newBufferedReader(projectInfoPath, StandardCharsets.UTF_8)) {
792-
return GSON.fromJson(reader, RMProjectInfo.class);
793-
} catch (IOException e) {
794-
log.error("Error reading project information from " + projectInfoPath, e);
795-
}
796-
}
797-
return new RMProjectInfo(projectPath.getFileName().toString(), null);
798-
}
799-
800764
private void createResourceTypeFolders(Path path) {
801765
// FIXME: do not create folders by force!!!
802766
var resourceTypes = ResourceTypeRegistry.getInstance().getResourceTypes();

0 commit comments

Comments
 (0)