Completed
Push — master ( 8f8478...3a1842 )
by Tomasz
03:30
created

builder(String)   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 2
rs 10
cc 1
1
package dev.hltech.dredd.domain.environment;
2
3
import com.google.common.collect.HashMultimap;
4
import com.google.common.collect.Multimap;
5
import lombok.AllArgsConstructor;
6
import lombok.EqualsAndHashCode;
7
import lombok.Getter;
8
import lombok.NoArgsConstructor;
9
10
import javax.persistence.*;
11
import java.util.Set;
12
import java.util.stream.Collectors;
0 ignored issues
show
Unused Code introduced by
Remove this unused import 'java.util.stream.Collectors'.
Loading history...
13
14
import static com.google.common.collect.Sets.newHashSet;
15
import static java.util.stream.Collectors.toSet;
16
import static lombok.AccessLevel.PROTECTED;
17
18
@Entity
19
@Table(name = "environments")
20
@Access(AccessType.FIELD)
21
public class EnvironmentAggregate {
22
23
    @Id
24
    private String name;
25
26
    @ElementCollection(fetch = FetchType.EAGER)
27
    @JoinTable(name = "service_versions", joinColumns = {
28
        @JoinColumn(name = "environment_name", referencedColumnName = "name"),
29
    })
30
    private Set<ServiceVersion> serviceVersions;
31
32
    protected EnvironmentAggregate() {
33
    }
34
35
    private EnvironmentAggregate(String name, Set<ServiceVersion> serviceVersions) {
36
        this.name = name;
37
        this.serviceVersions = serviceVersions;
38
    }
39
40
    public String getName() {
41
        return name;
42
    }
43
44
    public Set<ServiceVersion> findServices(String serviceName) {
45
        return serviceVersions.stream()
46
            .filter(sv -> sv.getName().equals(serviceName))
47
            .collect(toSet());
48
    }
49
50
    public Set<ServiceVersion> getAllServices() {
51
        return serviceVersions;
52
    }
53
54
    public static EnvironmentAggregate empty(String environmentName) {
55
        return new EnvironmentAggregate(environmentName, newHashSet());
56
    }
57
58
    @Embeddable
59
    @Getter
60
    @EqualsAndHashCode
61
    @AllArgsConstructor
62
    @NoArgsConstructor(access = PROTECTED)
63
    @Access(AccessType.FIELD)
64
    public static class ServiceVersion {
65
66
        private String name;
67
        private String version;
68
69
    }
70
71
    public static EnvironmentAggregateBuilder builder(String name) {
72
        return new EnvironmentAggregateBuilder(name);
73
    }
74
75
    public static class EnvironmentAggregateBuilder {
76
77
        private String name;
78
        private Multimap<String, String> serviceVersions = HashMultimap.create();
79
80
        private EnvironmentAggregateBuilder(String name) {
81
            this.name = name;
82
        }
83
84
        public void withServiceVersion(String name, String version) {
85
            serviceVersions.put(name, version);
86
        }
87
88
        public EnvironmentAggregate build() {
89
            return new EnvironmentAggregate(
90
                name,
91
                serviceVersions.entries()
92
                    .stream()
93
                    .map(e -> new ServiceVersion(e.getKey(), e.getValue()))
94
                    .collect(toSet())
95
            );
96
        }
97
98
    }
99
}
100