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