1 package org.eclipse.aether.resolution;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25
26 import org.eclipse.aether.RepositorySystem;
27 import org.eclipse.aether.RequestTrace;
28 import org.eclipse.aether.artifact.Artifact;
29 import org.eclipse.aether.graph.DependencyNode;
30 import org.eclipse.aether.repository.RemoteRepository;
31
32 /**
33 * A request to resolve an artifact.
34 *
35 * @see RepositorySystem#resolveArtifacts(org.eclipse.aether.RepositorySystemSession, java.util.Collection)
36 * @see Artifact#getFile()
37 */
38 public final class ArtifactRequest
39 {
40
41 private Artifact artifact;
42
43 private DependencyNode node;
44
45 private List<RemoteRepository> repositories = Collections.emptyList();
46
47 private String context = "";
48
49 private RequestTrace trace;
50
51 /**
52 * Creates an uninitialized request.
53 */
54 public ArtifactRequest()
55 {
56 // enables default constructor
57 }
58
59 /**
60 * Creates a request with the specified properties.
61 *
62 * @param artifact The artifact to resolve, may be {@code null}.
63 * @param repositories The repositories to resolve the artifact from, may be {@code null}.
64 * @param context The context in which this request is made, may be {@code null}.
65 */
66 public ArtifactRequest( Artifact artifact, List<RemoteRepository> repositories, String context )
67 {
68 setArtifact( artifact );
69 setRepositories( repositories );
70 setRequestContext( context );
71 }
72
73 /**
74 * Creates a request from the specified dependency node.
75 *
76 * @param node The dependency node to resolve, may be {@code null}.
77 */
78 public ArtifactRequest( DependencyNode node )
79 {
80 setDependencyNode( node );
81 setRepositories( node.getRepositories() );
82 setRequestContext( node.getRequestContext() );
83 }
84
85 /**
86 * Gets the artifact to resolve.
87 *
88 * @return The artifact to resolve or {@code null}.
89 */
90 public Artifact getArtifact()
91 {
92 return artifact;
93 }
94
95 /**
96 * Sets the artifact to resolve.
97 *
98 * @param artifact The artifact to resolve, may be {@code null}.
99 * @return This request for chaining, never {@code null}.
100 */
101 public ArtifactRequest setArtifact( Artifact artifact )
102 {
103 this.artifact = artifact;
104 return this;
105 }
106
107 /**
108 * Gets the dependency node (if any) for which to resolve the artifact.
109 *
110 * @return The dependency node to resolve or {@code null} if unknown.
111 */
112 public DependencyNode getDependencyNode()
113 {
114 return node;
115 }
116
117 /**
118 * Sets the dependency node to resolve.
119 *
120 * @param node The dependency node to resolve, may be {@code null}.
121 * @return This request for chaining, never {@code null}.
122 */
123 public ArtifactRequest setDependencyNode( DependencyNode node )
124 {
125 this.node = node;
126 if ( node != null )
127 {
128 setArtifact( node.getDependency().getArtifact() );
129 }
130 return this;
131 }
132
133 /**
134 * Gets the repositories to resolve the artifact from.
135 *
136 * @return The repositories, never {@code null}.
137 */
138 public List<RemoteRepository> getRepositories()
139 {
140 return repositories;
141 }
142
143 /**
144 * Sets the repositories to resolve the artifact from.
145 *
146 * @param repositories The repositories, may be {@code null}.
147 * @return This request for chaining, never {@code null}.
148 */
149 public ArtifactRequest setRepositories( List<RemoteRepository> repositories )
150 {
151 if ( repositories == null )
152 {
153 this.repositories = Collections.emptyList();
154 }
155 else
156 {
157 this.repositories = repositories;
158 }
159 return this;
160 }
161
162 /**
163 * Adds the specified repository for the resolution.
164 *
165 * @param repository The repository to add, may be {@code null}.
166 * @return This request for chaining, never {@code null}.
167 */
168 public ArtifactRequest addRepository( RemoteRepository repository )
169 {
170 if ( repository != null )
171 {
172 if ( this.repositories.isEmpty() )
173 {
174 this.repositories = new ArrayList<>();
175 }
176 this.repositories.add( repository );
177 }
178 return this;
179 }
180
181 /**
182 * Gets the context in which this request is made.
183 *
184 * @return The context, never {@code null}.
185 */
186 public String getRequestContext()
187 {
188 return context;
189 }
190
191 /**
192 * Sets the context in which this request is made.
193 *
194 * @param context The context, may be {@code null}.
195 * @return This request for chaining, never {@code null}.
196 */
197 public ArtifactRequest setRequestContext( String context )
198 {
199 this.context = ( context != null ) ? context : "";
200 return this;
201 }
202
203 /**
204 * Gets the trace information that describes the higher level request/operation in which this request is issued.
205 *
206 * @return The trace information about the higher level operation or {@code null} if none.
207 */
208 public RequestTrace getTrace()
209 {
210 return trace;
211 }
212
213 /**
214 * Sets the trace information that describes the higher level request/operation in which this request is issued.
215 *
216 * @param trace The trace information about the higher level operation, may be {@code null}.
217 * @return This request for chaining, never {@code null}.
218 */
219 public ArtifactRequest setTrace( RequestTrace trace )
220 {
221 this.trace = trace;
222 return this;
223 }
224
225 @Override
226 public String toString()
227 {
228 return getArtifact() + " < " + getRepositories();
229 }
230
231 }