1
2
3
4
5 package org.apache.maven.api.metadata;
6
7 import java.io.Serializable;
8 import java.util.Collections;
9 import java.util.HashMap;
10 import java.util.Map;
11 import java.util.Set;
12 import org.apache.maven.api.annotations.Experimental;
13 import org.apache.maven.api.annotations.Generated;
14 import org.apache.maven.api.annotations.Immutable;
15 import org.apache.maven.api.annotations.Nonnull;
16 import org.apache.maven.api.annotations.NotThreadSafe;
17 import org.apache.maven.api.annotations.ThreadSafe;
18
19
20
21
22 @Experimental
23 @Generated @ThreadSafe @Immutable
24 public class Snapshot
25 implements Serializable
26 {
27
28
29
30 final String timestamp;
31
32
33
34 final int buildNumber;
35
36
37
38 final boolean localCopy;
39
40
41
42
43
44 protected Snapshot(Builder builder) {
45 this.timestamp = builder.timestamp != null ? builder.timestamp : (builder.base != null ? builder.base.timestamp : null);
46 this.buildNumber = builder.buildNumber != null ? builder.buildNumber : (builder.base != null ? builder.base.buildNumber : 0);
47 this.localCopy = builder.localCopy != null ? builder.localCopy : (builder.base != null ? builder.base.localCopy : false);
48 }
49
50
51
52
53
54
55 public String getTimestamp() {
56 return this.timestamp;
57 }
58
59
60
61
62
63
64 public int getBuildNumber() {
65 return this.buildNumber;
66 }
67
68
69
70
71
72
73 public boolean isLocalCopy() {
74 return this.localCopy;
75 }
76
77
78
79
80
81
82 @Nonnull
83 public Builder with() {
84 return newBuilder(this);
85 }
86
87
88
89
90
91
92 @Nonnull
93 public Snapshot withTimestamp(String timestamp) {
94 return newBuilder(this, true).timestamp(timestamp).build();
95 }
96
97
98
99
100
101
102 @Nonnull
103 public Snapshot withBuildNumber(int buildNumber) {
104 return newBuilder(this, true).buildNumber(buildNumber).build();
105 }
106
107
108
109
110
111
112 @Nonnull
113 public Snapshot withLocalCopy(boolean localCopy) {
114 return newBuilder(this, true).localCopy(localCopy).build();
115 }
116
117
118
119
120
121
122
123
124 @Nonnull
125 public static Snapshot newInstance() {
126 return newInstance(true);
127 }
128
129
130
131
132
133
134
135
136 @Nonnull
137 public static Snapshot newInstance(boolean withDefaults) {
138 return newBuilder(withDefaults).build();
139 }
140
141
142
143
144
145
146
147
148 @Nonnull
149 public static Builder newBuilder() {
150 return newBuilder(true);
151 }
152
153
154
155
156
157
158
159 @Nonnull
160 public static Builder newBuilder(boolean withDefaults) {
161 return new Builder(withDefaults);
162 }
163
164
165
166
167
168
169
170
171 @Nonnull
172 public static Builder newBuilder(Snapshot from) {
173 return newBuilder(from, false);
174 }
175
176
177
178
179
180
181
182
183 @Nonnull
184 public static Builder newBuilder(Snapshot from, boolean forceCopy) {
185 return new Builder(from, forceCopy);
186 }
187
188
189
190
191
192
193 @NotThreadSafe
194 public static class Builder
195 {
196 Snapshot base;
197 String timestamp;
198 Integer buildNumber;
199 Boolean localCopy;
200
201 protected Builder(boolean withDefaults) {
202 if (withDefaults) {
203 this.buildNumber = 0;
204 this.localCopy = false;
205 }
206 }
207
208 protected Builder(Snapshot base, boolean forceCopy) {
209 if (forceCopy) {
210 this.timestamp = base.timestamp;
211 this.buildNumber = base.buildNumber;
212 this.localCopy = base.localCopy;
213 } else {
214 this.base = base;
215 }
216 }
217
218 @Nonnull
219 public Builder timestamp(String timestamp) {
220 this.timestamp = timestamp;
221 return this;
222 }
223
224 @Nonnull
225 public Builder buildNumber(int buildNumber) {
226 this.buildNumber = buildNumber;
227 return this;
228 }
229
230 @Nonnull
231 public Builder localCopy(boolean localCopy) {
232 this.localCopy = localCopy;
233 return this;
234 }
235
236
237 @Nonnull
238 public Snapshot build() {
239
240 if (base != null
241 && (timestamp == null || timestamp == base.timestamp)
242 && (buildNumber == null || buildNumber == base.buildNumber)
243 && (localCopy == null || localCopy == base.localCopy)
244 ) {
245 return base;
246 }
247 return new Snapshot(this);
248 }
249 }
250
251 }