@@ -39,30 +39,31 @@ public String identifier() {
39
39
}
40
40
}
41
41
42
- private Map <ResourceType , List <ResourceSource >> _resourceSources = new ConcurrentHashMap <>();
42
+ private Map <String , Map < ResourceType , List <ResourceSource >>> _allResourceSources = new ConcurrentHashMap <>();
43
43
44
44
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 );
54
49
}
55
50
56
51
/**
57
52
* @return The named resource if it exists, an empty optional if not found
58
53
*/
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 );
61
56
Objects .requireNonNull ( resourcePath );
62
57
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 );
64
65
65
- if ( list == null ) {
66
+ if ( sourceListForType == null ) {
66
67
return Optional .empty ();
67
68
}
68
69
@@ -73,7 +74,7 @@ private Optional<byte[]> readResource( final ResourceType type, String resourceP
73
74
resourcePath = resourcePath .substring ( 1 );
74
75
}
75
76
76
- for ( ResourceSource source : list ) {
77
+ for ( ResourceSource source : sourceListForType ) {
77
78
final Optional <byte []> result = source .bytesForResourceWithPath ( resourcePath );
78
79
79
80
// 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
88
89
/**
89
90
* @return The named resource if it exists, an empty optional if not found
90
91
*/
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 );
93
94
}
94
95
95
96
/**
0 commit comments