1
1
package io .envoyproxy .controlplane .cache ;
2
2
3
3
import com .google .auto .value .AutoValue ;
4
- import com .google .common .base .Predicates ;
5
- import com .google .common .collect .ImmutableMap ;
6
- import com .google .common .collect .ImmutableMap .Builder ;
7
4
import com .google .protobuf .Message ;
8
5
import java .util .List ;
9
6
import java .util .Map ;
10
7
import java .util .stream .Collector ;
11
- import java .util .stream .Collectors ;
12
8
import java .util .stream .StreamSupport ;
13
9
14
10
@ AutoValue
@@ -24,10 +20,10 @@ public abstract class SnapshotResources<T extends Message> {
24
20
public static <T extends Message > SnapshotResources <T > create (
25
21
Iterable <?> resources ,
26
22
String version ) {
27
- ImmutableMap < String , VersionedResource < T >> versionedResourcesMap = createVersionedResourcesMap (resources );
23
+ ResourceMapBuilder < T > resourcesMapBuilder = createResourcesMap (resources );
28
24
return new AutoValue_SnapshotResources <>(
29
- versionedResourcesMap ,
30
- createResourcesMap ( versionedResourcesMap ),
25
+ resourcesMapBuilder . getVersionedResources () ,
26
+ resourcesMapBuilder . getResources ( ),
31
27
(r ) -> version
32
28
);
33
29
}
@@ -43,53 +39,22 @@ public static <T extends Message> SnapshotResources<T> create(
43
39
public static <T extends Message > SnapshotResources <T > create (
44
40
Iterable <VersionedResource <T >> resources ,
45
41
ResourceVersionResolver versionResolver ) {
46
- ImmutableMap < String , VersionedResource < T >> versionedResourcesMap = createVersionedResourcesMap (resources );
42
+ ResourceMapBuilder < T > resourcesMapBuilder = createResourcesMap (resources );
47
43
return new AutoValue_SnapshotResources <>(
48
- versionedResourcesMap ,
49
- createResourcesMap ( versionedResourcesMap ),
44
+ resourcesMapBuilder . getVersionedResources () ,
45
+ resourcesMapBuilder . getResources ( ),
50
46
versionResolver );
51
47
}
52
48
53
- private static <T extends Message > ImmutableMap < String , VersionedResource < T >> createVersionedResourcesMap (
49
+ private static <T extends Message > ResourceMapBuilder < T > createResourcesMap (
54
50
Iterable <?> resources ) {
55
- List <?> resourcesList = StreamSupport .stream (resources .spliterator (), false )
56
- .collect (Collectors .toList ());
57
- if (resourcesList .stream ().allMatch (Predicates .instanceOf (VersionedResource .class )::apply )) {
58
- ImmutableMap <String , VersionedResource <T >> result = resourcesList .stream ()
59
- .collect (
60
- Collector .of (
61
- Builder <String , VersionedResource <T >>::new ,
62
- (b , e ) -> {
63
- VersionedResource <T > eCast = (VersionedResource <T >) e ;
64
- b .put (Resources .getResourceName (eCast .resource ()), eCast );
65
- },
66
- (b1 , b2 ) -> b1 .putAll (b2 .build ()),
67
- Builder ::build ));
68
- return result ;
69
- } else {
70
- return StreamSupport .stream (resources .spliterator (), false )
71
- .collect (
72
- Collector .of (
73
- Builder <String , VersionedResource <T >>::new ,
74
- (b , e ) -> {
75
- T eCast = (T ) e ;
76
- b .put (Resources .getResourceName (eCast ), VersionedResource .create (eCast ));
77
- },
78
- (b1 , b2 ) -> b1 .putAll (b2 .build ()),
79
- Builder ::build ));
80
- }
81
- }
82
51
83
- private static <T extends Message > ImmutableMap <String , T > createResourcesMap (
84
- ImmutableMap <String , VersionedResource <T >> versionedResources ) {
85
- return versionedResources .values ().stream ().collect (
86
- Collector .of (
87
- Builder <String , T >::new ,
88
- (b , e ) -> {
89
- b .put (Resources .getResourceName (e .resource ()), e .resource ());
90
- },
91
- (b1 , b2 ) -> b1 .putAll (b2 .build ()),
92
- Builder ::build ));
52
+ return StreamSupport .stream (resources .spliterator (), false )
53
+ .collect (
54
+ Collector .of (
55
+ ResourceMapBuilder <T >::new ,
56
+ ResourceMapBuilder ::put ,
57
+ ResourceMapBuilder ::putAll ));
93
58
}
94
59
95
60
/**
0 commit comments