16
16
*/
17
17
package io .cloudbeaver .model .rm .local ;
18
18
19
- import com .google .gson .Gson ;
20
- import com .google .gson .GsonBuilder ;
21
- import io .cloudbeaver .BaseWebProjectImpl ;
22
19
import io .cloudbeaver .DBWConstants ;
23
20
import io .cloudbeaver .model .app .ServletApplication ;
24
21
import io .cloudbeaver .service .security .SMUtils ;
50
47
import org .jkiss .utils .Pair ;
51
48
52
49
import java .io .IOException ;
53
- import java .io .Reader ;
54
- import java .nio .charset .StandardCharsets ;
55
50
import java .nio .file .*;
56
51
import java .text .MessageFormat ;
57
52
import java .time .OffsetDateTime ;
67
62
public class LocalResourceController extends BaseLocalResourceController {
68
63
69
64
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" ;
74
65
75
66
protected final SMCredentialsProvider credentialsProvider ;
76
67
@@ -81,7 +72,7 @@ public class LocalResourceController extends BaseLocalResourceController {
81
72
private Supplier <SMController > smControllerSupplier ;
82
73
protected final List <RMFileOperationHandler > fileHandlers ;
83
74
84
- private final Map <String , BaseWebProjectImpl > projectRegistries = new LinkedHashMap <>();
75
+ private final Map <String , RMLocalProject > projectRegistries = new LinkedHashMap <>();
85
76
86
77
public LocalResourceController (
87
78
DBPWorkspace workspace ,
@@ -116,26 +107,23 @@ private Path getPrivateProjectPath() {
116
107
return userId == null ? null : this .userProjectsPath .resolve (userId );
117
108
}
118
109
119
- protected BaseWebProjectImpl getWebProject (String projectId , boolean refresh ) throws DBException {
110
+ protected RMLocalProject getWebProject (String projectId , boolean refresh ) throws DBException {
120
111
synchronized (projectRegistries ) {
121
- BaseWebProjectImpl project = projectRegistries .get (projectId );
112
+ RMLocalProject project = projectRegistries .get (projectId );
122
113
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 ));
126
115
projectRegistries .put (projectId , project );
127
116
}
128
117
return project ;
129
118
}
130
119
}
131
120
132
121
@ 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
137
125
) throws DBException {
138
- return new InternalWebProjectImpl ( sessionContext , rmProject , getProjectPath (projectId ));
126
+ return new RMLocalProject ( workspace , sessionContext , getProjectPath (projectId ), parseProjectName ( projectId ). getType ( ));
139
127
}
140
128
141
129
@ NotNull
@@ -256,7 +244,7 @@ public RMProject[] listAllSharedProjects() throws DBException {
256
244
var allPaths = list .toList ();
257
245
for (Path path : allPaths ) {
258
246
var projectPerms = getProjectPermissions (
259
- makeProjectIdFromPath (path , RMProjectType .SHARED ),
247
+ RMUtils . makeProjectIdFromPath (path , RMProjectType .SHARED ),
260
248
RMProjectType .SHARED
261
249
);
262
250
var rmProject = makeProjectFromPath (path , projectPerms , RMProjectType .SHARED , false );
@@ -306,7 +294,7 @@ public RMProject createProject(@NotNull String name, @Nullable String descriptio
306
294
@ Override
307
295
public RMProject updateProject (@ NotNull String projectId , @ NotNull RMProjectInfo projectInfo ) throws DBException {
308
296
try (var projectLock = lockController .lock (projectId , "updateProject" )) {
309
- BaseWebProjectImpl project = getWebProject (projectId , false );
297
+ RMLocalProject project = getWebProject (projectId , false );
310
298
Path targetPath = getProjectPath (projectId );
311
299
if (!Files .exists (targetPath )) {
312
300
throw new DBException ("Project folder '" + projectId + "' not found" );
@@ -658,7 +646,7 @@ public String setResourceProperty(
658
646
) throws DBException {
659
647
try (var ignoredLock = lockController .lock (projectId , "resourcePropertyUpdate" )) {
660
648
validateResourcePath (resourcePath );
661
- BaseWebProjectImpl webProject = getWebProject (projectId , false );
649
+ RMLocalProject webProject = getWebProject (projectId , false );
662
650
doFileWriteOperation (projectId , webProject .getMetadataFilePath (),
663
651
() -> {
664
652
log .debug ("Updating resource property '" + propertyName + "' in project '" + projectId + "'" );
@@ -679,7 +667,7 @@ public String setResourceProperties(
679
667
) throws DBException {
680
668
try (var ignoredLock = lockController .lock (projectId , "resourcePropertyUpdate" )) {
681
669
validateResourcePath (resourcePath );
682
- BaseWebProjectImpl webProject = getWebProject (projectId , false );
670
+ RMLocalProject webProject = getWebProject (projectId , false );
683
671
doFileWriteOperation (projectId , webProject .getMetadataFilePath (),
684
672
() -> {
685
673
log .debug ("Updating resource '" + resourcePath + "' properties in project '" + projectId + "'" );
@@ -713,12 +701,6 @@ private Path getTargetPath(@NotNull String projectId, @NotNull String resourcePa
713
701
}
714
702
}
715
703
716
-
717
- private String makeProjectIdFromPath (Path path , RMProjectType type ) {
718
- String projectName = path .getFileName ().toString ();
719
- return type .getPrefix () + "_" + projectName ;
720
- }
721
-
722
704
@ Nullable
723
705
protected RMProject makeProjectFromId (String projectId , boolean loadPermissions ) throws DBException {
724
706
var projectName = parseProjectName (projectId );
@@ -758,14 +740,9 @@ private RMProject makeProjectFromPath(Path path, Set<RMProjectPermission> permis
758
740
.flatMap (rmProjectPermission -> rmProjectPermission .getAllPermissions ().stream ())
759
741
.toArray (String []::new );
760
742
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 ();
765
745
project .setProjectPermissions (allProjectPermissions );
766
- InternalWebProjectImpl webProject = new InternalWebProjectImpl (new SessionContextImpl (null ), project , path );
767
- project .setName (webProject .getName ());
768
- project .setDescription (webProject .getDescription ());
769
746
if (Files .exists (path )) {
770
747
try {
771
748
project .setCreateTime (
@@ -784,19 +761,6 @@ private RMProject makeProjectFromPath(Path path, Set<RMProjectPermission> permis
784
761
return project ;
785
762
}
786
763
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
-
800
764
private void createResourceTypeFolders (Path path ) {
801
765
// FIXME: do not create folders by force!!!
802
766
var resourceTypes = ResourceTypeRegistry .getInstance ().getResourceTypes ();
0 commit comments