forked from oras-project/oras-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDescriptor.java
More file actions
145 lines (129 loc) · 3.76 KB
/
Descriptor.java
File metadata and controls
145 lines (129 loc) · 3.76 KB
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
145
/*-
* =LICENSE=
* ORAS Java SDK
* ===
* Copyright (C) 2024 - 2025 ORAS
* ===
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =LICENSEEND=
*/
package land.oras;
import java.util.Collections;
import java.util.Map;
import land.oras.utils.Const;
import land.oras.utils.JsonUtils;
import org.jspecify.annotations.Nullable;
/**
* Main class for descriptor
*/
public sealed class Descriptor permits Config, Manifest, Layer, Index {
/**
* The media type of the layer
*/
protected final String mediaType;
/**
* Annotations for the layer
*/
protected final @Nullable Map<String, String> annotations;
protected final @Nullable String digest;
protected final @Nullable Long size;
protected final @Nullable String artifactType;
protected Descriptor(
String digest, Long size, String mediaType, Map<String, String> annotations, String artifactType) {
this.digest = digest;
this.size = size;
this.mediaType = mediaType;
this.annotations = annotations;
this.artifactType = artifactType;
}
/**
* Get the annotations
* @return The annotations
*/
public Map<String, String> getAnnotations() {
if (annotations == null) {
return Map.of();
}
return Collections.unmodifiableMap(annotations);
}
/**
* Get the media type
* @return The media type
*/
public final String getMediaType() {
return mediaType;
}
/**
* Get the digest
* @return The digest
*/
public @Nullable String getDigest() {
return digest;
}
/**
* Get the size
* @return The size
*/
public @Nullable Long getSize() {
return size;
}
/**
* Get the artifact type
* @return The artifact type
*/
public @Nullable ArtifactType getArtifactType() {
if (artifactType != null) {
return ArtifactType.from(artifactType);
}
return null;
}
/**
* Return the JSON representation of this descriptor
* @return The JSON string
*/
public final String toJson() {
return JsonUtils.toJson(this);
}
/**
* Create a new descriptor
* @param digest The digest
* @param size The size
* @param mediaType The media type
* @param annotations The annotations
* @param artifactType The artifact type
* @return The descriptor
*/
public static Descriptor of(
String digest, Long size, String mediaType, Map<String, String> annotations, String artifactType) {
return new Descriptor(digest, size, mediaType, annotations, artifactType);
}
/**
* Create a new descriptor
* @param digest The digest
* @param size The size
* @param mediaType The media type
* @return The descriptor
*/
public static Descriptor of(String digest, Long size, String mediaType) {
return new Descriptor(digest, size, mediaType, null, null);
}
/**
* Create a new descriptor
* @param digest The digest
* @param size The size
* @return The descriptor
*/
public static Descriptor of(String digest, Long size) {
return new Descriptor(digest, size, Const.DEFAULT_DESCRIPTOR_MEDIA_TYPE, null, null);
}
}