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.repository;
20  
21  import java.util.ArrayList;
22  import java.util.Collection;
23  import java.util.Collections;
24  import java.util.LinkedHashSet;
25  import java.util.List;
26  
27  import org.apache.maven.artifact.Artifact;
28  import org.apache.maven.artifact.metadata.ArtifactMetadata;
29  import org.apache.maven.artifact.repository.ArtifactRepository;
30  import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
31  import org.apache.maven.artifact.repository.MavenArtifactRepository;
32  import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
33  
34  /**
35   * Delegating local artifact repository chains the reactor, IDE workspace
36   * and user local repository.
37   */
38  @Deprecated
39  public class DelegatingLocalArtifactRepository extends MavenArtifactRepository {
40      private LocalArtifactRepository buildReactor;
41  
42      private LocalArtifactRepository ideWorkspace;
43  
44      private ArtifactRepository userLocalArtifactRepository;
45  
46      public DelegatingLocalArtifactRepository(ArtifactRepository artifactRepository) {
47          this.userLocalArtifactRepository = artifactRepository;
48      }
49  
50      public void setBuildReactor(LocalArtifactRepository localRepository) {
51          this.buildReactor = localRepository;
52      }
53  
54      public void setIdeWorkspace(LocalArtifactRepository localRepository) {
55          this.ideWorkspace = localRepository;
56      }
57  
58      /**
59       * @deprecated instead use {@link #getIdeWorkspace()}
60       */
61      @Deprecated
62      public LocalArtifactRepository getIdeWorspace() {
63          return ideWorkspace;
64      }
65  
66      public LocalArtifactRepository getIdeWorkspace() {
67          return getIdeWorspace();
68      }
69  
70      @Override
71      public Artifact find(Artifact artifact) {
72          if (!artifact.isRelease() && buildReactor != null) {
73              artifact = buildReactor.find(artifact);
74          }
75  
76          if (!artifact.isResolved() && ideWorkspace != null) {
77              artifact = ideWorkspace.find(artifact);
78          }
79  
80          if (!artifact.isResolved()) {
81              artifact = userLocalArtifactRepository.find(artifact);
82          }
83  
84          return artifact;
85      }
86  
87      @Override
88      public List<String> findVersions(Artifact artifact) {
89          Collection<String> versions = new LinkedHashSet<>();
90  
91          if (buildReactor != null) {
92              versions.addAll(buildReactor.findVersions(artifact));
93          }
94  
95          if (ideWorkspace != null) {
96              versions.addAll(ideWorkspace.findVersions(artifact));
97          }
98  
99          versions.addAll(userLocalArtifactRepository.findVersions(artifact));
100 
101         return Collections.unmodifiableList(new ArrayList<>(versions));
102     }
103 
104     public String pathOfLocalRepositoryMetadata(ArtifactMetadata metadata, ArtifactRepository repository) {
105         return userLocalArtifactRepository.pathOfLocalRepositoryMetadata(metadata, repository);
106     }
107 
108     public String getId() {
109         return userLocalArtifactRepository.getId();
110     }
111 
112     @Override
113     public String pathOf(Artifact artifact) {
114         return userLocalArtifactRepository.pathOf(artifact);
115     }
116 
117     @Override
118     public String getBasedir() {
119         return (userLocalArtifactRepository != null) ? userLocalArtifactRepository.getBasedir() : null;
120     }
121 
122     @Override
123     public ArtifactRepositoryLayout getLayout() {
124         return userLocalArtifactRepository.getLayout();
125     }
126 
127     @Override
128     public ArtifactRepositoryPolicy getReleases() {
129         return userLocalArtifactRepository.getReleases();
130     }
131 
132     @Override
133     public ArtifactRepositoryPolicy getSnapshots() {
134         return userLocalArtifactRepository.getSnapshots();
135     }
136 
137     @Override
138     public String getKey() {
139         return userLocalArtifactRepository.getKey();
140     }
141 
142     @Override
143     public String getUrl() {
144         return userLocalArtifactRepository.getUrl();
145     }
146 
147     @Override
148     public int hashCode() {
149         int hash = 17;
150         hash = hash * 31 + (buildReactor == null ? 0 : buildReactor.hashCode());
151         hash = hash * 31 + (ideWorkspace == null ? 0 : ideWorkspace.hashCode());
152         hash = hash * 31 + (userLocalArtifactRepository == null ? 0 : userLocalArtifactRepository.hashCode());
153 
154         return hash;
155     }
156 
157     @Override
158     public boolean equals(Object obj) {
159         if (this == obj) {
160             return true;
161         }
162         if (obj == null) {
163             return false;
164         }
165         if (getClass() != obj.getClass()) {
166             return false;
167         }
168 
169         DelegatingLocalArtifactRepository other = (DelegatingLocalArtifactRepository) obj;
170 
171         return eq(buildReactor, other.buildReactor)
172                 && eq(ideWorkspace, other.ideWorkspace)
173                 && eq(userLocalArtifactRepository, other.userLocalArtifactRepository);
174     }
175 }