View Javadoc
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.apache.maven.project.artifact;
20  
21  import java.io.File;
22  import java.util.Collection;
23  import java.util.List;
24  
25  import org.apache.maven.artifact.Artifact;
26  import org.apache.maven.artifact.handler.ArtifactHandler;
27  import org.apache.maven.artifact.metadata.ArtifactMetadata;
28  import org.apache.maven.artifact.repository.ArtifactRepository;
29  import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
30  import org.apache.maven.artifact.versioning.ArtifactVersion;
31  import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
32  import org.apache.maven.artifact.versioning.VersionRange;
33  import org.apache.maven.project.MavenProject;
34  
35  /**
36   * Wraps an active project instance to be able to receive updates from its artifact without affecting the original
37   * attributes of this artifact.
38   *
39   * TODO I think this exposes a design flaw in that the immutable and mutable parts of an artifact are in one class and
40   * should be split. ie scope, file, etc depend on the context of use, whereas everything else is immutable.
41   */
42  @Deprecated
43  public class ActiveProjectArtifact implements Artifact {
44      private final Artifact artifact;
45  
46      private final MavenProject project;
47  
48      public ActiveProjectArtifact(MavenProject project, Artifact artifact) {
49          this.artifact = artifact;
50          this.project = project;
51  
52          artifact.setFile(project.getArtifact().getFile());
53          artifact.setResolved(true);
54      }
55  
56      /** {@inheritDoc} */
57      @Override
58      public File getFile() {
59          // we need to get the latest file for the project, not the artifact that was created at one point in time
60          return project.getArtifact().getFile();
61      }
62  
63      /** {@inheritDoc} */
64      @Override
65      public String getGroupId() {
66          return artifact.getGroupId();
67      }
68  
69      /** {@inheritDoc} */
70      @Override
71      public String getArtifactId() {
72          return artifact.getArtifactId();
73      }
74  
75      /** {@inheritDoc} */
76      @Override
77      public String getVersion() {
78          return artifact.getVersion();
79      }
80  
81      /** {@inheritDoc} */
82      @Override
83      public void setVersion(String version) {
84          artifact.setVersion(version);
85      }
86  
87      /** {@inheritDoc} */
88      @Override
89      public String getScope() {
90          return artifact.getScope();
91      }
92  
93      /** {@inheritDoc} */
94      @Override
95      public String getType() {
96          return artifact.getType();
97      }
98  
99      /** {@inheritDoc} */
100     @Override
101     public String getClassifier() {
102         return artifact.getClassifier();
103     }
104 
105     /** {@inheritDoc} */
106     @Override
107     public boolean hasClassifier() {
108         return artifact.hasClassifier();
109     }
110 
111     /** {@inheritDoc} */
112     @Override
113     public void setFile(File destination) {
114         artifact.setFile(destination);
115         project.getArtifact().setFile(destination);
116     }
117 
118     /** {@inheritDoc} */
119     @Override
120     public String getBaseVersion() {
121         return artifact.getBaseVersion();
122     }
123 
124     /** {@inheritDoc} */
125     @Override
126     public void setBaseVersion(String baseVersion) {
127         artifact.setBaseVersion(baseVersion);
128     }
129 
130     /** {@inheritDoc} */
131     @Override
132     public String getId() {
133         return artifact.getId();
134     }
135 
136     /** {@inheritDoc} */
137     @Override
138     public String getDependencyConflictId() {
139         return artifact.getDependencyConflictId();
140     }
141 
142     /** {@inheritDoc} */
143     @Override
144     public void addMetadata(ArtifactMetadata metadata) {
145         artifact.addMetadata(metadata);
146     }
147 
148     /** {@inheritDoc} */
149     @Override
150     public Collection<ArtifactMetadata> getMetadataList() {
151         return artifact.getMetadataList();
152     }
153 
154     /** {@inheritDoc} */
155     @Override
156     public void setRepository(ArtifactRepository remoteRepository) {
157         artifact.setRepository(remoteRepository);
158     }
159 
160     /** {@inheritDoc} */
161     @Override
162     public ArtifactRepository getRepository() {
163         return artifact.getRepository();
164     }
165 
166     /** {@inheritDoc} */
167     @Override
168     public void updateVersion(String version, ArtifactRepository localRepository) {
169         artifact.updateVersion(version, localRepository);
170     }
171 
172     /** {@inheritDoc} */
173     @Override
174     public String getDownloadUrl() {
175         return artifact.getDownloadUrl();
176     }
177 
178     /** {@inheritDoc} */
179     @Override
180     public void setDownloadUrl(String downloadUrl) {
181         artifact.setDownloadUrl(downloadUrl);
182     }
183 
184     /** {@inheritDoc} */
185     @Override
186     public ArtifactFilter getDependencyFilter() {
187         return artifact.getDependencyFilter();
188     }
189 
190     /** {@inheritDoc} */
191     @Override
192     public void setDependencyFilter(ArtifactFilter artifactFilter) {
193         artifact.setDependencyFilter(artifactFilter);
194     }
195 
196     /** {@inheritDoc} */
197     @Override
198     public ArtifactHandler getArtifactHandler() {
199         return artifact.getArtifactHandler();
200     }
201 
202     /** {@inheritDoc} */
203     @Override
204     public List<String> getDependencyTrail() {
205         return artifact.getDependencyTrail();
206     }
207 
208     /** {@inheritDoc} */
209     @Override
210     public void setDependencyTrail(List<String> dependencyTrail) {
211         artifact.setDependencyTrail(dependencyTrail);
212     }
213 
214     /** {@inheritDoc} */
215     @Override
216     public void setScope(String scope) {
217         artifact.setScope(scope);
218     }
219 
220     /** {@inheritDoc} */
221     @Override
222     public VersionRange getVersionRange() {
223         return artifact.getVersionRange();
224     }
225 
226     /** {@inheritDoc} */
227     @Override
228     public void setVersionRange(VersionRange newRange) {
229         artifact.setVersionRange(newRange);
230     }
231 
232     /** {@inheritDoc} */
233     @Override
234     public void selectVersion(String version) {
235         artifact.selectVersion(version);
236     }
237 
238     /** {@inheritDoc} */
239     @Override
240     public void setGroupId(String groupId) {
241         artifact.setGroupId(groupId);
242     }
243 
244     /** {@inheritDoc} */
245     @Override
246     public void setArtifactId(String artifactId) {
247         artifact.setArtifactId(artifactId);
248     }
249 
250     /** {@inheritDoc} */
251     @Override
252     public boolean isSnapshot() {
253         return artifact.isSnapshot();
254     }
255 
256     /** {@inheritDoc} */
257     @Override
258     public int compareTo(Artifact a) {
259         return artifact.compareTo(a);
260     }
261 
262     /** {@inheritDoc} */
263     @Override
264     public void setResolved(boolean resolved) {
265         artifact.setResolved(resolved);
266     }
267 
268     /** {@inheritDoc} */
269     @Override
270     public boolean isResolved() {
271         return artifact.isResolved();
272     }
273 
274     /** {@inheritDoc} */
275     @Override
276     public void setResolvedVersion(String version) {
277         artifact.setResolvedVersion(version);
278     }
279 
280     /** {@inheritDoc} */
281     @Override
282     public void setArtifactHandler(ArtifactHandler handler) {
283         artifact.setArtifactHandler(handler);
284     }
285 
286     /** {@inheritDoc} */
287     @Override
288     public String toString() {
289         return "active project artifact[artifact: " + artifact + ", project: " + project + "]";
290     }
291 
292     /** {@inheritDoc} */
293     @Override
294     public boolean isRelease() {
295         return artifact.isRelease();
296     }
297 
298     /** {@inheritDoc} */
299     @Override
300     public void setRelease(boolean release) {
301         artifact.setRelease(release);
302     }
303 
304     /** {@inheritDoc} */
305     @Override
306     public List<ArtifactVersion> getAvailableVersions() {
307         return artifact.getAvailableVersions();
308     }
309 
310     /** {@inheritDoc} */
311     @Override
312     public void setAvailableVersions(List<ArtifactVersion> versions) {
313         artifact.setAvailableVersions(versions);
314     }
315 
316     /** {@inheritDoc} */
317     @Override
318     public boolean isOptional() {
319         return artifact.isOptional();
320     }
321 
322     /** {@inheritDoc} */
323     @Override
324     public ArtifactVersion getSelectedVersion() throws OverConstrainedVersionException {
325         return artifact.getSelectedVersion();
326     }
327 
328     /** {@inheritDoc} */
329     @Override
330     public boolean isSelectedVersionKnown() throws OverConstrainedVersionException {
331         return artifact.isSelectedVersionKnown();
332     }
333 
334     /** {@inheritDoc} */
335     @Override
336     public void setOptional(boolean optional) {
337         artifact.setOptional(optional);
338     }
339 
340     /** {@inheritDoc} */
341     @Override
342     public int hashCode() {
343         int result = 17;
344 
345         result = 37 * result + getGroupId().hashCode();
346         result = 37 * result + getArtifactId().hashCode();
347         result = 37 * result + getType().hashCode();
348         if (getVersion() != null) {
349             result = 37 * result + getVersion().hashCode();
350         }
351         result = 37 * result + (getClassifier() != null ? getClassifier().hashCode() : 0);
352 
353         return result;
354     }
355 
356     /** {@inheritDoc} */
357     @Override
358     public boolean equals(Object o) {
359         if (o == this) {
360             return true;
361         }
362 
363         if (o instanceof Artifact a) {
364             if (!a.getGroupId().equals(getGroupId())) {
365                 return false;
366             } else if (!a.getArtifactId().equals(getArtifactId())) {
367                 return false;
368             } else if (!a.getVersion().equals(getVersion())) {
369                 return false;
370             } else if (!a.getType().equals(getType())) {
371                 return false;
372             } else {
373                 return a.getClassifier() == null
374                         ? getClassifier() == null
375                         : a.getClassifier().equals(getClassifier());
376             }
377         } else {
378             return false;
379         }
380     }
381 }