Skip to content

Commit 5d2fbe7

Browse files
Namespace support in NGResourceLoader, skeleton for usage in the manager
1 parent 765a4a3 commit 5d2fbe7

File tree

2 files changed

+25
-24
lines changed

2 files changed

+25
-24
lines changed

ng-appserver/src/main/java/ng/appserver/resources/NGResourceLoader.java

+18-17
Original file line numberDiff line numberDiff line change
@@ -39,30 +39,31 @@ public String identifier() {
3939
}
4040
}
4141

42-
private Map<ResourceType, List<ResourceSource>> _resourceSources = new ConcurrentHashMap<>();
42+
private Map<String, Map<ResourceType, List<ResourceSource>>> _allResourceSources = new ConcurrentHashMap<>();
4343

4444
public void addResourceSource( final String namespace, final ResourceType type, final ResourceSource source ) {
45-
List<ResourceSource> sources = _resourceSources.get( type );
46-
47-
if( sources == null ) {
48-
sources = new ArrayList<>();
49-
_resourceSources.put( type, sources );
50-
}
51-
52-
sources.add( source );
53-
_resourceSources.put( type, sources );
45+
_allResourceSources
46+
.computeIfAbsent( namespace, _unused -> new ConcurrentHashMap<>() )
47+
.computeIfAbsent( type, _unused -> new ArrayList<>() )
48+
.add( source );
5449
}
5550

5651
/**
5752
* @return The named resource if it exists, an empty optional if not found
5853
*/
59-
private Optional<byte[]> readResource( final ResourceType type, String resourcePath ) {
60-
Objects.requireNonNull( type );
54+
private Optional<byte[]> readResource( final String namespace, final ResourceType resourceType, String resourcePath ) {
55+
Objects.requireNonNull( resourceType );
6156
Objects.requireNonNull( resourcePath );
6257

63-
final List<ResourceSource> list = _resourceSources.get( type );
58+
final Map<ResourceType, List<ResourceSource>> sourceMapForNamespace = _allResourceSources.get( namespace );
59+
60+
if( sourceMapForNamespace == null ) {
61+
return Optional.empty();
62+
}
63+
64+
final List<ResourceSource> sourceListForType = sourceMapForNamespace.get( resourceType );
6465

65-
if( list == null ) {
66+
if( sourceListForType == null ) {
6667
return Optional.empty();
6768
}
6869

@@ -73,7 +74,7 @@ private Optional<byte[]> readResource( final ResourceType type, String resourceP
7374
resourcePath = resourcePath.substring( 1 );
7475
}
7576

76-
for( ResourceSource source : list ) {
77+
for( ResourceSource source : sourceListForType ) {
7778
final Optional<byte[]> result = source.bytesForResourceWithPath( resourcePath );
7879

7980
// FIXME: We should (optionally?) allow iterating through all registered sources to check for duplicates // Hugi 2024-06-14
@@ -88,8 +89,8 @@ private Optional<byte[]> readResource( final ResourceType type, String resourceP
8889
/**
8990
* @return The named resource if it exists, an empty optional if not found
9091
*/
91-
public Optional<byte[]> bytesForResource( final ResourceType type, String resourcePath ) {
92-
return readResource( type, resourcePath );
92+
public Optional<byte[]> bytesForResource( final String namespace, final ResourceType type, String resourcePath ) {
93+
return readResource( namespace, type, resourcePath );
9394
}
9495

9596
/**

ng-appserver/src/main/java/ng/appserver/resources/NGResourceManager.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,22 @@ private NGResourceLoader resourceLoader() {
5454
}
5555

5656
public Optional<byte[]> bytesForAppResourceNamed( final String resourceName ) {
57-
return bytesForAnyResource( resourceName, StandardResourceType.App );
57+
return bytesForAnyResource( "app", resourceName, StandardResourceType.App );
5858
}
5959

6060
public Optional<byte[]> bytesForWebserverResourceNamed( final String resourceName ) {
61-
return bytesForAnyResource( resourceName, StandardResourceType.WebServer );
61+
return bytesForAnyResource( "app", resourceName, StandardResourceType.WebServer );
6262
}
6363

6464
public Optional<byte[]> bytesForComponentResourceNamed( final String resourceName ) {
65-
return bytesForAnyResource( resourceName, StandardResourceType.ComponentTemplate );
65+
return bytesForAnyResource( "app", resourceName, StandardResourceType.ComponentTemplate );
6666
}
6767

6868
public Optional<byte[]> bytesForPublicResourceNamed( final String resourceName ) {
69-
return bytesForAnyResource( resourceName, StandardResourceType.Public );
69+
return bytesForAnyResource( "app", resourceName, StandardResourceType.Public );
7070
}
7171

72-
private Optional<byte[]> bytesForAnyResource( final String resourceName, ResourceType resourceType ) {
72+
private Optional<byte[]> bytesForAnyResource( final String namespace, final String resourceName, ResourceType resourceType ) {
7373
Objects.requireNonNull( resourceName );
7474
Objects.requireNonNull( resourceType );
7575

@@ -84,12 +84,12 @@ private Optional<byte[]> bytesForAnyResource( final String resourceName, Resourc
8484

8585
// FIXME: Applies to both non-existing and un-cached resources. Add an "I already checked this, it doesn't exist" resource cache entry
8686
if( resource == null ) {
87-
resource = resourceLoader().bytesForResource( resourceType, resourceName );
87+
resource = resourceLoader().bytesForResource( namespace, resourceType, resourceName );
8888
cacheMap.put( resourceName, resource );
8989
}
9090
}
9191
else {
92-
resource = resourceLoader().bytesForResource( resourceType, resourceName );
92+
resource = resourceLoader().bytesForResource( namespace, resourceType, resourceName );
9393
}
9494

9595
return resource;

0 commit comments

Comments
 (0)