forked from oras-project/oras-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfig.java
More file actions
140 lines (127 loc) · 3.73 KB
/
Copy pathConfig.java
File metadata and controls
140 lines (127 loc) · 3.73 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
/*-
* =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.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Map;
import land.oras.utils.Const;
import land.oras.utils.JsonUtils;
import org.jspecify.annotations.NullUnmarked;
import org.jspecify.annotations.Nullable;
/**
* Class for config
*/
@NullUnmarked
public final class Config extends Descriptor {
/**
* The base 64 encoded data
*/
private final @Nullable String data;
/**
* Constructor
* @param mediaType The media type
* @param digest The digest
* @param size The size
*/
private Config(String mediaType, String digest, long size, @Nullable String data, Annotations annotations) {
super(
digest,
size,
mediaType,
!annotations.configAnnotations().isEmpty() ? Map.copyOf(annotations.configAnnotations()) : null,
null);
this.data = data;
}
/**
* Get the annotations
* @return The annotations
*/
@Override
public @Nullable Map<String, String> getAnnotations() {
return annotations;
}
/**
* Create a new config with annotations
* @param annotations The annotations
* @return The new config
*/
public Config withAnnotations(Annotations annotations) {
return new Config(mediaType, digest, size, data, annotations);
}
/**
* Create a new config with media type
* @param mediaType The media type
* @return The new config
*/
public Config withMediaType(String mediaType) {
return new Config(
mediaType,
digest,
size,
data,
annotations == null ? Annotations.empty() : Annotations.ofConfig(annotations));
}
/**
* Get the data as bytes
* @return The data as bytes
*/
public byte[] getDataBytes() {
if (data != null) {
return Base64.getDecoder().decode(data);
}
return "{}".getBytes(StandardCharsets.UTF_8);
}
/**
* Get the data as a string
* @return The data as a string
*/
public @Nullable String getData() {
return data;
}
/**
* Create a config from a JSON string
* @param json The JSON string
* @return The config
*/
public static Config fromJson(String json) {
return JsonUtils.fromJson(json, Config.class);
}
/**
* An empty config
* @return The empty config
*/
public static Config empty() {
return new Config(
Const.DEFAULT_EMPTY_MEDIA_TYPE,
"sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a",
2,
"e30=",
Annotations.empty());
}
/**
* A config with referrence on a blob (too large for data)
* @param mediaType The media type
* @param layer The layer
* @return The config
*/
public static Config fromBlob(String mediaType, Layer layer) {
return new Config(mediaType, layer.getDigest(), layer.getSize(), null, Annotations.empty());
}
}