summaryrefslogtreecommitdiffstats
path: root/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/vcmr/ChangeRequestSource.java
blob: e5b3422b79b4751210e3a8214ea03941144bd10a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration.vcmr;

import java.time.ZonedDateTime;
import java.util.List;
import java.util.Objects;

import static com.yahoo.vespa.hosted.controller.api.integration.vcmr.ChangeRequestSource.Status.*;

/**
 * @author olaa
 */
public class ChangeRequestSource {

    private final String system;
    private final String id;
    private final Status status;
    private final String url;
    private final ZonedDateTime plannedStartTime;
    private final ZonedDateTime plannedEndTime;


    public ChangeRequestSource(String system, String id, String url, Status status, ZonedDateTime plannedStartTime, ZonedDateTime plannedEndTime) {
        this.system = Objects.requireNonNull(system);
        this.id = Objects.requireNonNull(id);
        this.url = Objects.requireNonNull(url);
        this.status = Objects.requireNonNull(status);
        this.plannedStartTime = Objects.requireNonNull(plannedStartTime);
        this.plannedEndTime = Objects.requireNonNull(plannedEndTime);
    }

    public String getSystem() {
        return system;
    }

    public String getId() {
        return id;
    }

    public Status getStatus() {
        return status;
    }

    public String getUrl() {
        return url;
    }

    public ZonedDateTime getPlannedStartTime() {
        return plannedStartTime;
    }

    public ZonedDateTime getPlannedEndTime() {
        return plannedEndTime;
    }

    @Override
    public String toString() {
        return "ChangeRequestSource{" +
                "system='" + system + '\'' +
                ", id='" + id + '\'' +
                ", status=" + status +
                ", url='" + url + '\'' +
                ", plannedStartTime=" + plannedStartTime +
                ", plannedEndTime=" + plannedEndTime +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ChangeRequestSource that = (ChangeRequestSource) o;
        return Objects.equals(system, that.system) &&
                Objects.equals(id, that.id) &&
                status == that.status &&
                Objects.equals(url, that.url) &&
                Objects.equals(plannedStartTime, that.plannedStartTime) &&
                Objects.equals(plannedEndTime, that.plannedEndTime);
    }

    @Override
    public int hashCode() {
        return Objects.hash(system, id, status, url, plannedStartTime, plannedEndTime);
    }

    public boolean isClosed() {
        return List.of(CLOSED, CANCELED, COMPLETE).contains(status);
    }

    public enum Status {
        DRAFT,
        WAITING_FOR_APPROVAL,
        APPROVED,
        STARTED,
        COMPLETE,
        CLOSED,
        CANCELED,
        UNKNOWN_STATUS
    }

    public static class Builder {
        private String system;
        private String id;
        private String url;
        private Status status;
        private ZonedDateTime plannedStartTime;
        private ZonedDateTime plannedEndTime;

        public Builder system(String system) {
            this.system = system;
            return this;
        }

        public Builder id(String id) {
            this.id = id;
            return this;
        }

        public Builder url(String url) {
            this.url = url;
            return this;
        }

        public Builder status(Status status) {
            this.status = status;
            return this;
        }

        public Builder plannedStartTime(ZonedDateTime plannedStartTime) {
            this.plannedStartTime = plannedStartTime;
            return this;
        }

        public Builder plannedEndTime(ZonedDateTime plannedEndTime) {
            this.plannedEndTime = plannedEndTime;
            return this;
        }

        public ChangeRequestSource build() {
            return new ChangeRequestSource(system, id, url, status, plannedStartTime, plannedEndTime);
        }
    }

}