1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.eclipse.aether.metadata;
20
21 import java.io.File;
22 import java.nio.file.Path;
23 import java.util.Map;
24
25 import static java.util.Objects.requireNonNull;
26
27 /**
28 * A basic metadata instance. <em>Note:</em> Instances of this class are immutable and the exposed mutators return new
29 * objects rather than changing the current instance.
30 */
31 public final class DefaultMetadata extends AbstractMetadata {
32
33 private final String groupId;
34
35 private final String artifactId;
36
37 private final String version;
38
39 private final String type;
40
41 private final Nature nature;
42
43 private final Path path;
44
45 private final Map<String, String> properties;
46
47 /**
48 * Creates a new metadata for the repository root with the specific type and nature.
49 *
50 * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
51 * @param nature The nature of the metadata, must not be {@code null}.
52 */
53 public DefaultMetadata(String type, Nature nature) {
54 this("", "", "", type, nature, null, (Path) null);
55 }
56
57 /**
58 * Creates a new metadata for the groupId level with the specific type and nature.
59 *
60 * @param groupId The group identifier to which this metadata applies, may be {@code null}.
61 * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
62 * @param nature The nature of the metadata, must not be {@code null}.
63 */
64 public DefaultMetadata(String groupId, String type, Nature nature) {
65 this(groupId, "", "", type, nature, null, (Path) null);
66 }
67
68 /**
69 * Creates a new metadata for the groupId:artifactId level with the specific type and nature.
70 *
71 * @param groupId The group identifier to which this metadata applies, may be {@code null}.
72 * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
73 * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
74 * @param nature The nature of the metadata, must not be {@code null}.
75 */
76 public DefaultMetadata(String groupId, String artifactId, String type, Nature nature) {
77 this(groupId, artifactId, "", type, nature, null, (Path) null);
78 }
79
80 /**
81 * Creates a new metadata for the groupId:artifactId:version level with the specific type and nature.
82 *
83 * @param groupId The group identifier to which this metadata applies, may be {@code null}.
84 * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
85 * @param version The version to which this metadata applies, may be {@code null}.
86 * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
87 * @param nature The nature of the metadata, must not be {@code null}.
88 */
89 public DefaultMetadata(String groupId, String artifactId, String version, String type, Nature nature) {
90 this(groupId, artifactId, version, type, nature, null, (Path) null);
91 }
92
93 /**
94 * Creates a new metadata for the groupId:artifactId:version level with the specific type and nature.
95 *
96 * @param groupId The group identifier to which this metadata applies, may be {@code null}.
97 * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
98 * @param version The version to which this metadata applies, may be {@code null}.
99 * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
100 * @param nature The nature of the metadata, must not be {@code null}.
101 * @param file The resolved file of the metadata, may be {@code null}.
102 * @deprecated Use {@link #DefaultMetadata(String, String, String, String, Nature, Path)} instead.
103 */
104 @Deprecated
105 public DefaultMetadata(String groupId, String artifactId, String version, String type, Nature nature, File file) {
106 this(groupId, artifactId, version, type, nature, null, file);
107 }
108
109 /**
110 * Creates a new metadata for the groupId:artifactId:version level with the specific type and nature.
111 *
112 * @param groupId The group identifier to which this metadata applies, may be {@code null}.
113 * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
114 * @param version The version to which this metadata applies, may be {@code null}.
115 * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
116 * @param nature The nature of the metadata, must not be {@code null}.
117 * @param path The resolved file of the metadata, may be {@code null}.
118 * @since 2.0.0
119 */
120 public DefaultMetadata(String groupId, String artifactId, String version, String type, Nature nature, Path path) {
121 this(groupId, artifactId, version, type, nature, null, path);
122 }
123
124 /**
125 * Creates a new metadata for the groupId:artifactId:version level with the specific type and nature.
126 *
127 * @param groupId The group identifier to which this metadata applies, may be {@code null}.
128 * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
129 * @param version The version to which this metadata applies, may be {@code null}.
130 * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
131 * @param nature The nature of the metadata, must not be {@code null}.
132 * @param properties The properties of the metadata, may be {@code null} if none.
133 * @param file The resolved file of the metadata, may be {@code null}.
134 * @deprecated Use {@link #DefaultMetadata(String, String, String, String, Nature, Map, Path)} instead.
135 */
136 @Deprecated
137 public DefaultMetadata(
138 String groupId,
139 String artifactId,
140 String version,
141 String type,
142 Nature nature,
143 Map<String, String> properties,
144 File file) {
145 this.groupId = emptify(groupId);
146 this.artifactId = emptify(artifactId);
147 this.version = emptify(version);
148 this.type = emptify(type);
149 this.nature = requireNonNull(nature, "metadata nature cannot be null");
150 this.path = file != null ? file.toPath() : null;
151 this.properties = copyProperties(properties);
152 }
153
154 /**
155 * Creates a new metadata for the groupId:artifactId:version level with the specific type and nature.
156 *
157 * @param groupId The group identifier to which this metadata applies, may be {@code null}.
158 * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
159 * @param version The version to which this metadata applies, may be {@code null}.
160 * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
161 * @param nature The nature of the metadata, must not be {@code null}.
162 * @param properties The properties of the metadata, may be {@code null} if none.
163 * @param path The resolved file of the metadata, may be {@code null}.
164 * @since 2.0.0
165 */
166 public DefaultMetadata(
167 String groupId,
168 String artifactId,
169 String version,
170 String type,
171 Nature nature,
172 Map<String, String> properties,
173 Path path) {
174 this.groupId = emptify(groupId);
175 this.artifactId = emptify(artifactId);
176 this.version = emptify(version);
177 this.type = emptify(type);
178 this.nature = requireNonNull(nature, "metadata nature cannot be null");
179 this.path = path;
180 this.properties = copyProperties(properties);
181 }
182
183 DefaultMetadata(
184 String groupId,
185 String artifactId,
186 String version,
187 String type,
188 Nature nature,
189 Path path,
190 Map<String, String> properties) {
191 // NOTE: This constructor assumes immutability of the provided properties, for internal use only
192 this.groupId = emptify(groupId);
193 this.artifactId = emptify(artifactId);
194 this.version = emptify(version);
195 this.type = emptify(type);
196 this.nature = nature;
197 this.path = path;
198 this.properties = properties;
199 }
200
201 private static String emptify(String str) {
202 return (str == null) ? "" : str;
203 }
204
205 @Override
206 public String getGroupId() {
207 return groupId;
208 }
209
210 @Override
211 public String getArtifactId() {
212 return artifactId;
213 }
214
215 @Override
216 public String getVersion() {
217 return version;
218 }
219
220 @Override
221 public String getType() {
222 return type;
223 }
224
225 @Override
226 public Nature getNature() {
227 return nature;
228 }
229
230 @Deprecated
231 @Override
232 public File getFile() {
233 return path != null ? path.toFile() : null;
234 }
235
236 @Override
237 public Path getPath() {
238 return path;
239 }
240
241 @Override
242 public Map<String, String> getProperties() {
243 return properties;
244 }
245 }