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.util.Map;
23
24 /**
25 * A piece of repository metadata, e.g. an index of available versions. In contrast to an artifact, which usually exists
26 * in only one repository, metadata usually exists in multiple repositories and each repository contains a different
27 * copy of the metadata. <em>Note:</em> Metadata instances are supposed to be immutable, e.g. any exposed mutator method
28 * returns a new metadata instance and leaves the original instance unchanged. Implementors are strongly advised to obey
29 * this contract. <em>Note:</em> Implementors are strongly advised to inherit from {@link AbstractMetadata} instead of
30 * directly implementing this interface.
31 *
32 * @noimplement This interface is not intended to be implemented by clients.
33 * @noextend This interface is not intended to be extended by clients.
34 */
35 public interface Metadata {
36
37 /**
38 * The nature of the metadata.
39 */
40 enum Nature {
41 /**
42 * The metadata refers to release artifacts only.
43 */
44 RELEASE,
45
46 /**
47 * The metadata refers to snapshot artifacts only.
48 */
49 SNAPSHOT,
50
51 /**
52 * The metadata refers to either release or snapshot artifacts.
53 */
54 RELEASE_OR_SNAPSHOT
55 }
56
57 /**
58 * Gets the group identifier of this metadata.
59 *
60 * @return The group identifier or an empty string if the metadata applies to the entire repository, never
61 * {@code null}.
62 */
63 String getGroupId();
64
65 /**
66 * Gets the artifact identifier of this metadata.
67 *
68 * @return The artifact identifier or an empty string if the metadata applies to the groupId level only, never
69 * {@code null}.
70 */
71 String getArtifactId();
72
73 /**
74 * Gets the version of this metadata.
75 *
76 * @return The version or an empty string if the metadata applies to the groupId:artifactId level only, never
77 * {@code null}.
78 */
79 String getVersion();
80
81 /**
82 * Gets the type of the metadata, e.g. "maven-metadata.xml".
83 *
84 * @return The type of the metadata, never {@code null}.
85 */
86 String getType();
87
88 /**
89 * Gets the nature of this metadata. The nature indicates to what artifact versions the metadata refers.
90 *
91 * @return The nature, never {@code null}.
92 */
93 Nature getNature();
94
95 /**
96 * Gets the file of this metadata. Note that only resolved metadata has a file associated with it.
97 *
98 * @return The file or {@code null} if none.
99 */
100 File getFile();
101
102 /**
103 * Sets the file of the metadata.
104 *
105 * @param file The file of the metadata, may be {@code null}
106 * @return The new metadata, never {@code null}.
107 */
108 Metadata setFile(File file);
109
110 /**
111 * Gets the specified property.
112 *
113 * @param key The name of the property, must not be {@code null}.
114 * @param defaultValue The default value to return in case the property is not set, may be {@code null}.
115 * @return The requested property value or {@code null} if the property is not set and no default value was
116 * provided.
117 */
118 String getProperty(String key, String defaultValue);
119
120 /**
121 * Gets the properties of this metadata.
122 *
123 * @return The (read-only) properties, never {@code null}.
124 */
125 Map<String, String> getProperties();
126
127 /**
128 * Sets the properties for the metadata.
129 *
130 * @param properties The properties for the metadata, may be {@code null}.
131 * @return The new metadata, never {@code null}.
132 */
133 Metadata setProperties(Map<String, String> properties);
134 }