Skip to content

Commit 1418003

Browse files
authored
Equality for most model entities (#317)
2 parents 1259f6b + 0822215 commit 1418003

24 files changed

+609
-16
lines changed

src/main/java/land/oras/Annotations.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,9 @@ public String toJson() {
137137
file.putAll(filesAnnotations());
138138
return JsonUtils.toJson(file);
139139
}
140+
141+
@Override
142+
public String toString() {
143+
return toJson();
144+
}
140145
}

src/main/java/land/oras/ArtifactType.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
package land.oras;
2222

23+
import java.util.Objects;
2324
import land.oras.exception.OrasException;
2425
import land.oras.utils.Const;
2526
import org.jspecify.annotations.NullMarked;
@@ -46,11 +47,6 @@ public String getMediaType() {
4647
return mediaType;
4748
}
4849

49-
@Override
50-
public String toString() {
51-
return mediaType;
52-
}
53-
5450
/**
5551
* Create an artifact type
5652
* @param artifactType The artifact type. Can be null
@@ -74,4 +70,21 @@ public static ArtifactType from(@Nullable String artifactType) {
7470
public static ArtifactType unknown() {
7571
return new ArtifactType(Const.DEFAULT_ARTIFACT_MEDIA_TYPE);
7672
}
73+
74+
@Override
75+
public boolean equals(Object o) {
76+
if (o == null || getClass() != o.getClass()) return false;
77+
ArtifactType that = (ArtifactType) o;
78+
return Objects.equals(getMediaType(), that.getMediaType());
79+
}
80+
81+
@Override
82+
public int hashCode() {
83+
return Objects.hashCode(getMediaType());
84+
}
85+
86+
@Override
87+
public String toString() {
88+
return mediaType;
89+
}
7790
}

src/main/java/land/oras/Config.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.nio.charset.StandardCharsets;
2424
import java.util.Base64;
2525
import java.util.Map;
26+
import java.util.Objects;
2627
import land.oras.utils.Const;
2728
import land.oras.utils.JsonUtils;
2829
import org.jspecify.annotations.NullUnmarked;
@@ -139,4 +140,21 @@ public static Config empty() {
139140
public static Config fromBlob(String mediaType, Layer layer) {
140141
return new Config(mediaType, layer.getDigest(), layer.getSize(), null, Annotations.empty());
141142
}
143+
144+
@Override
145+
public boolean equals(Object o) {
146+
if (o == null || getClass() != o.getClass()) return false;
147+
Config config = (Config) o;
148+
return Objects.equals(toJson(), config.toJson());
149+
}
150+
151+
@Override
152+
public int hashCode() {
153+
return Objects.hashCode(toJson());
154+
}
155+
156+
@Override
157+
public String toString() {
158+
return toJson();
159+
}
142160
}

src/main/java/land/oras/ContainerRef.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import java.net.URLEncoder;
2424
import java.nio.charset.StandardCharsets;
25+
import java.util.Objects;
2526
import java.util.regex.Matcher;
2627
import java.util.regex.Pattern;
2728
import land.oras.exception.OrasException;
@@ -372,4 +373,28 @@ public ContainerRef forRegistry(Registry registry) {
372373
tag,
373374
digest);
374375
}
376+
377+
@Override
378+
public boolean equals(Object o) {
379+
if (o == null || getClass() != o.getClass()) return false;
380+
ContainerRef that = (ContainerRef) o;
381+
return Objects.equals(getRegistry(), that.getRegistry())
382+
&& Objects.equals(getRepository(), that.getRepository())
383+
&& Objects.equals(getNamespace(), that.getNamespace())
384+
&& Objects.equals(getDigest(), that.getDigest())
385+
&& Objects.equals(getTag(), that.getTag());
386+
}
387+
388+
@Override
389+
public int hashCode() {
390+
return Objects.hash(getRegistry(), getRepository(), getNamespace(), getDigest(), getTag());
391+
}
392+
393+
@Override
394+
public String toString() {
395+
if (namespace != null && !namespace.isEmpty()) {
396+
return "%s/%s/%s:%s%s".formatted(registry, namespace, repository, tag, digest != null ? "@" + digest : "");
397+
}
398+
return "%s/%s:%s%s".formatted(registry, repository, tag, digest != null ? "@" + digest : "");
399+
}
375400
}

src/main/java/land/oras/Descriptor.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,4 +203,21 @@ public static Descriptor of(String digest, Long size, String mediaType) {
203203
public static Descriptor of(String digest, Long size) {
204204
return new Descriptor(digest, size, Const.DEFAULT_DESCRIPTOR_MEDIA_TYPE, null, null, null);
205205
}
206+
207+
@Override
208+
public boolean equals(Object o) {
209+
if (o == null || getClass() != o.getClass()) return false;
210+
Descriptor that = (Descriptor) o;
211+
return Objects.equals(toJson(), that.toJson());
212+
}
213+
214+
@Override
215+
public int hashCode() {
216+
return Objects.hash(toJson());
217+
}
218+
219+
@Override
220+
public String toString() {
221+
return toJson();
222+
}
206223
}

src/main/java/land/oras/Index.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.LinkedList;
2626
import java.util.List;
2727
import java.util.Map;
28+
import java.util.Objects;
2829
import land.oras.utils.Const;
2930
import land.oras.utils.JsonUtils;
3031
import org.jspecify.annotations.Nullable;
@@ -190,4 +191,21 @@ public static Index fromPath(Path path) {
190191
public static Index fromManifests(List<ManifestDescriptor> descriptors) {
191192
return new Index(2, Const.DEFAULT_INDEX_MEDIA_TYPE, null, descriptors, null, null, null, null);
192193
}
194+
195+
@Override
196+
public boolean equals(Object o) {
197+
if (o == null || getClass() != o.getClass()) return false;
198+
Index index = (Index) o;
199+
return Objects.equals(toJson(), index.toJson());
200+
}
201+
202+
@Override
203+
public int hashCode() {
204+
return Objects.hash(toJson());
205+
}
206+
207+
@Override
208+
public String toString() {
209+
return toJson();
210+
}
193211
}

src/main/java/land/oras/Layer.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.nio.file.Path;
2626
import java.util.Base64;
2727
import java.util.Map;
28+
import java.util.Objects;
2829
import land.oras.exception.OrasException;
2930
import land.oras.utils.Const;
3031
import land.oras.utils.JsonUtils;
@@ -203,4 +204,21 @@ public static Layer empty() {
203204
"e30=",
204205
Map.of());
205206
}
207+
208+
@Override
209+
public boolean equals(Object o) {
210+
if (o == null || getClass() != o.getClass()) return false;
211+
Layer layer = (Layer) o;
212+
return Objects.equals(toJson(), layer.toJson());
213+
}
214+
215+
@Override
216+
public int hashCode() {
217+
return Objects.hash(toJson());
218+
}
219+
220+
@Override
221+
public String toString() {
222+
return toJson();
223+
}
206224
}

src/main/java/land/oras/LayoutRef.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
package land.oras;
2222

2323
import java.nio.file.Path;
24+
import java.util.Objects;
2425
import java.util.regex.Pattern;
2526
import land.oras.exception.OrasException;
2627
import land.oras.utils.SupportedAlgorithm;
@@ -152,4 +153,28 @@ public boolean isValidDigest() {
152153
public String getRepository() {
153154
return getFolder().toString();
154155
}
156+
157+
@Override
158+
public boolean equals(Object o) {
159+
if (o == null || getClass() != o.getClass()) return false;
160+
LayoutRef layoutRef = (LayoutRef) o;
161+
return Objects.equals(getFolder(), layoutRef.getFolder()) && Objects.equals(tag, layoutRef.tag);
162+
}
163+
164+
@Override
165+
public int hashCode() {
166+
return Objects.hash(getFolder(), tag);
167+
}
168+
169+
@Override
170+
public String toString() {
171+
if (tag != null) {
172+
if (isValidDigest()) {
173+
return "%s@%s".formatted(getFolder().toString(), tag);
174+
}
175+
return "%s:%s".formatted(getFolder().toString(), tag);
176+
} else {
177+
return getFolder().toString();
178+
}
179+
}
155180
}

src/main/java/land/oras/Manifest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Collections;
2525
import java.util.List;
2626
import java.util.Map;
27+
import java.util.Objects;
2728
import land.oras.utils.Const;
2829
import land.oras.utils.JsonUtils;
2930
import org.jspecify.annotations.NonNull;
@@ -288,4 +289,21 @@ public static Manifest empty() {
288289
Annotations.empty(),
289290
null);
290291
}
292+
293+
@Override
294+
public boolean equals(Object o) {
295+
if (o == null || getClass() != o.getClass()) return false;
296+
Manifest manifest = (Manifest) o;
297+
return Objects.equals(toJson(), manifest.toJson());
298+
}
299+
300+
@Override
301+
public int hashCode() {
302+
return Objects.hash(toJson());
303+
}
304+
305+
@Override
306+
public String toString() {
307+
return toJson();
308+
}
291309
}

src/main/java/land/oras/ManifestDescriptor.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,21 @@ public static ManifestDescriptor of(Descriptor descriptor) {
194194
null,
195195
descriptor.getAnnotations());
196196
}
197+
198+
@Override
199+
public boolean equals(Object o) {
200+
if (o == null || getClass() != o.getClass()) return false;
201+
ManifestDescriptor that = (ManifestDescriptor) o;
202+
return Objects.equals(toJson(), that.toJson());
203+
}
204+
205+
@Override
206+
public int hashCode() {
207+
return Objects.hash(toJson());
208+
}
209+
210+
@Override
211+
public String toString() {
212+
return toJson();
213+
}
197214
}

0 commit comments

Comments
 (0)