Bug 3656: Fix to take into account the repos installed by karaf framework
[odlparent.git] / karaf-plugin / src / main / java / org / opendaylight / odlparent / AetherUtil.java
1 package org.opendaylight.odlparent;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.LinkedHashSet;
6 import java.util.List;
7 import java.util.Set;
8
9 import org.apache.maven.plugin.logging.Log;
10 import org.eclipse.aether.DefaultRepositorySystemSession;
11 import org.eclipse.aether.RepositorySystem;
12 import org.eclipse.aether.RepositorySystemSession;
13 import org.eclipse.aether.artifact.Artifact;
14 import org.eclipse.aether.artifact.DefaultArtifact;
15 import org.eclipse.aether.collection.CollectRequest;
16 import org.eclipse.aether.graph.Dependency;
17 import org.eclipse.aether.graph.DependencyFilter;
18 import org.eclipse.aether.installation.InstallRequest;
19 import org.eclipse.aether.installation.InstallationException;
20 import org.eclipse.aether.repository.LocalRepository;
21 import org.eclipse.aether.repository.LocalRepositoryManager;
22 import org.eclipse.aether.repository.RemoteRepository;
23 import org.eclipse.aether.resolution.ArtifactRequest;
24 import org.eclipse.aether.resolution.ArtifactResolutionException;
25 import org.eclipse.aether.resolution.ArtifactResult;
26 import org.eclipse.aether.resolution.DependencyRequest;
27 import org.eclipse.aether.resolution.DependencyResolutionException;
28 import org.eclipse.aether.resolution.DependencyResult;
29
30 public class AetherUtil {
31
32     private RepositorySystem repoSystem;
33
34     private RepositorySystemSession repoSession;
35
36     private List<RemoteRepository> remoteRepos;
37
38     protected File localRepository;
39
40     protected Log log;
41
42     public AetherUtil(RepositorySystem repoSystem,RepositorySystemSession repoSession,List<RemoteRepository> remoteRepos, File localRepository,Log log) {
43         this.repoSystem = repoSystem;
44         this.repoSession = repoSession;
45         this.remoteRepos = remoteRepos;
46         this.localRepository = localRepository;
47         this.log = log;
48     }
49
50     public Set<Artifact> resolveDependencies(List<Dependency>dependencies,DependencyFilter filter) throws DependencyResolutionException {
51         Set<Artifact> artifacts = new LinkedHashSet<Artifact>();
52         CollectRequest collectRequest = new CollectRequest();
53         collectRequest.setDependencies(dependencies);
54         collectRequest.setRepositories(remoteRepos);
55         DependencyRequest request = new DependencyRequest(collectRequest,filter);
56         DependencyResult results = repoSystem.resolveDependencies(repoSession, request);
57         for(ArtifactResult artifactResult: results.getArtifactResults()) {
58             artifacts.add(artifactResult.getArtifact());
59         }
60         return artifacts;
61     }
62
63     public Artifact resolveArtifact(Artifact artifact) {
64         ArtifactRequest request = new ArtifactRequest(artifact, remoteRepos,null);
65         ArtifactResult result;
66         try {
67             result = repoSystem.resolveArtifact(repoSession, request);
68         } catch (ArtifactResolutionException e) {
69             log.warn("Unable to resolve artifact: " + e.getMessage());
70             return null;
71         }
72         return result.getArtifact();
73     }
74
75     public Artifact resolveArtifact(String coord) {
76         DefaultArtifact artifact = new DefaultArtifact(coord);
77         return resolveArtifact(artifact);
78     }
79
80     public Set<Artifact> resolveArtifacts(Set<String> coords) {
81         Set<Artifact> result = new LinkedHashSet<Artifact>();
82         for(String coord: coords) {
83             Artifact artifact = resolveArtifact(coord);
84             if (artifact != null) {
85                 result.add(artifact);
86             }
87         }
88         return result;
89     }
90
91     public Dependency toDependency(String coord) {
92         Artifact artifact = new DefaultArtifact(coord);
93         Dependency dependency = new Dependency(artifact, null);
94         return dependency;
95     }
96
97     public List<Dependency> toDependencies(List<String> coords) {
98         List<Dependency> result = new ArrayList<Dependency>();
99         for(String coord: coords) {
100             result.add(toDependency(coord));
101         }
102         return result;
103     }
104
105     public void installArtifacts(Set<Artifact> artifacts) throws InstallationException {
106         LocalRepository localRepo = new LocalRepository(localRepository);
107         LocalRepositoryManager localManager = repoSystem.newLocalRepositoryManager(repoSession, localRepo);
108         DefaultRepositorySystemSession localSession = new DefaultRepositorySystemSession();
109         localSession.setLocalRepositoryManager(localManager);
110         InstallRequest installRequest = new InstallRequest();
111         for(Artifact featureArtifact : artifacts) {
112             installRequest.addArtifact(featureArtifact);
113         }
114         repoSystem.install(localSession, installRequest);
115     }
116 }