11package io .envoyproxy .controlplane .cache ;
22
33import 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 ;
74import com .google .protobuf .Message ;
85import java .util .List ;
96import java .util .Map ;
107import java .util .stream .Collector ;
11- import java .util .stream .Collectors ;
128import java .util .stream .StreamSupport ;
139
1410@ AutoValue
@@ -24,10 +20,10 @@ public abstract class SnapshotResources<T extends Message> {
2420 public static <T extends Message > SnapshotResources <T > create (
2521 Iterable <?> resources ,
2622 String version ) {
27- ImmutableMap < String , VersionedResource < T >> versionedResourcesMap = createVersionedResourcesMap (resources );
23+ ResourceMapBuilder < T > resourcesMapBuilder = createResourcesMap (resources );
2824 return new AutoValue_SnapshotResources <>(
29- versionedResourcesMap ,
30- createResourcesMap ( versionedResourcesMap ),
25+ resourcesMapBuilder . getVersionedResources () ,
26+ resourcesMapBuilder . getResources ( ),
3127 (r ) -> version
3228 );
3329 }
@@ -43,53 +39,22 @@ public static <T extends Message> SnapshotResources<T> create(
4339 public static <T extends Message > SnapshotResources <T > create (
4440 Iterable <VersionedResource <T >> resources ,
4541 ResourceVersionResolver versionResolver ) {
46- ImmutableMap < String , VersionedResource < T >> versionedResourcesMap = createVersionedResourcesMap (resources );
42+ ResourceMapBuilder < T > resourcesMapBuilder = createResourcesMap (resources );
4743 return new AutoValue_SnapshotResources <>(
48- versionedResourcesMap ,
49- createResourcesMap ( versionedResourcesMap ),
44+ resourcesMapBuilder . getVersionedResources () ,
45+ resourcesMapBuilder . getResources ( ),
5046 versionResolver );
5147 }
5248
53- private static <T extends Message > ImmutableMap < String , VersionedResource < T >> createVersionedResourcesMap (
49+ private static <T extends Message > ResourceMapBuilder < T > createResourcesMap (
5450 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- }
8251
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 ));
9358 }
9459
9560 /**
0 commit comments