1 package io.getunleash.repository;
2
3 import io.getunleash.Segment;
4 import io.getunleash.lang.Nullable;
5 import java.io.Serializable;
6 import java.util.Collection;
7 import java.util.Collections;
8 import java.util.Map;
9 import java.util.Optional;
10 import java.util.concurrent.ConcurrentHashMap;
11 import java.util.function.Function;
12 import java.util.stream.Collectors;
13
14 public final class SegmentCollection implements Serializable {
15
16     static final long serialVersionUID = 1214L;
17     private final Collection<Segment> segments;
18     private final transient Map<Integer, Segment> cache;
19
20     public SegmentCollection(final Collection<Segment> segments) {
21         this.segments = ensureNotNull(segments);
22         if (this.segments.size() > 0) {
23             this.cache =
24                     segments.stream()
25                             .collect(
26                                     Collectors.toConcurrentMap(
27                                             Segment::getId, Function.identity()));
28         } else {
29             this.cache = new ConcurrentHashMap<>();
30         }
31     }
32
33     private Collection<Segment> ensureNotNull(@Nullable Collection<Segment> segments) {
34         return Optional.ofNullable(segments).orElseGet(Collections::emptyList);
35     }
36
37     public Collection<Segment> getSegments() {
38         return Collections.unmodifiableCollection(segments);
39     }
40
41     public Segment getSegment(final Integer id) {
42         return cache.get(id);
43     }
44 }
45