Bug 3656: Introducing karaf-plugin
[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.eclipse.aether.DefaultRepositorySystemSession;
10 import org.eclipse.aether.RepositorySystem;
11 import org.eclipse.aether.RepositorySystemSession;
12 import org.eclipse.aether.artifact.Artifact;
13 import org.eclipse.aether.artifact.DefaultArtifact;
14 import org.eclipse.aether.collection.CollectRequest;
15 import org.eclipse.aether.graph.Dependency;
16 import org.eclipse.aether.graph.DependencyFilter;
17 import org.eclipse.aether.installation.InstallRequest;
18 import org.eclipse.aether.installation.InstallationException;
19 import org.eclipse.aether.repository.LocalRepository;
20 import org.eclipse.aether.repository.LocalRepositoryManager;
21 import org.eclipse.aether.repository.RemoteRepository;
22 import org.eclipse.aether.resolution.ArtifactRequest;
23 import org.eclipse.aether.resolution.ArtifactResolutionException;
24 import org.eclipse.aether.resolution.ArtifactResult;
25 import org.eclipse.aether.resolution.DependencyRequest;
26 import org.eclipse.aether.resolution.DependencyResolutionException;
27 import org.eclipse.aether.resolution.DependencyResult;
28
29 public class AetherUtil {
30
31     private RepositorySystem repoSystem;
32
33     private RepositorySystemSession repoSession;
34
35     private List<RemoteRepository> remoteRepos;
36
37     protected File localRepository;
38
39     public AetherUtil(RepositorySystem repoSystem,RepositorySystemSession repoSession,List<RemoteRepository> remoteRepos, File localRepository) {
40         this.repoSystem = repoSystem;
41         this.repoSession = repoSession;
42         this.remoteRepos = remoteRepos;
43         this.localRepository = localRepository;
44     }
45
46     public Set<Artifact> resolveDependencies(List<Dependency>dependencies,DependencyFilter filter) throws DependencyResolutionException {
47         Set<Artifact> artifacts = new LinkedHashSet<Artifact>();
48         CollectRequest collectRequest = new CollectRequest();
49         collectRequest.setDependencies(dependencies);
50         collectRequest.setRepositories(remoteRepos);
51         DependencyRequest request = new DependencyRequest(collectRequest,filter);
52         DependencyResult results = repoSystem.resolveDependencies(repoSession, request);
53         for(ArtifactResult artifactResult: results.getArtifactResults()) {
54             artifacts.add(artifactResult.getArtifact());
55         }
56         return artifacts;
57     }
58
59     public Artifact resolveArtifact(Artifact artifact) throws ArtifactResolutionException {
60         ArtifactRequest request = new ArtifactRequest(artifact, remoteRepos,null);
61         ArtifactResult result = repoSystem.resolveArtifact(repoSession, request);
62         return result.getArtifact();
63     }
64
65     public Artifact resolveArtifact(String coord) throws ArtifactResolutionException {
66         DefaultArtifact artifact = new DefaultArtifact(coord);
67         return resolveArtifact(artifact);
68     }
69
70     public Set<Artifact> resolveArtifacts(Set<String> coords) throws ArtifactResolutionException {
71         Set<Artifact> result = new LinkedHashSet<Artifact>();
72         for(String coord: coords) {
73             result.add(resolveArtifact(coord));
74         }
75         return result;
76     }
77
78     public Dependency toDependency(String coord) {
79         Artifact artifact = new DefaultArtifact(coord);
80         Dependency dependency = new Dependency(artifact, null);
81         return dependency;
82     }
83
84     public List<Dependency> toDependencies(List<String> coords) {
85         List<Dependency> result = new ArrayList<Dependency>();
86         for(String coord: coords) {
87             result.add(toDependency(coord));
88         }
89         return result;
90     }
91
92     public void installArtifacts(Set<Artifact> artifacts) throws InstallationException {
93         LocalRepository localRepo = new LocalRepository(localRepository);
94         LocalRepositoryManager localManager = repoSystem.newLocalRepositoryManager(repoSession, localRepo);
95         DefaultRepositorySystemSession localSession = new DefaultRepositorySystemSession();
96         localSession.setLocalRepositoryManager(localManager);
97         InstallRequest installRequest = new InstallRequest();
98         for(Artifact featureArtifact : artifacts) {
99             installRequest.addArtifact(featureArtifact);
100         }
101         repoSystem.install(localSession, installRequest);
102     }
103 }