1 package org.eclipse.aether.internal.impl.collect;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Collection;
23 import java.util.Collections;
24 import java.util.List;
25
26 import org.eclipse.aether.DefaultRepositorySystemSession;
27 import org.eclipse.aether.RepositoryException;
28 import org.eclipse.aether.RepositorySystemSession;
29 import org.eclipse.aether.artifact.Artifact;
30 import org.eclipse.aether.artifact.ArtifactProperties;
31 import org.eclipse.aether.collection.VersionFilter;
32 import org.eclipse.aether.graph.DefaultDependencyNode;
33 import org.eclipse.aether.graph.Dependency;
34 import org.eclipse.aether.graph.DependencyNode;
35 import org.eclipse.aether.repository.ArtifactRepository;
36 import org.eclipse.aether.repository.RemoteRepository;
37 import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
38 import org.eclipse.aether.resolution.ArtifactDescriptorResult;
39 import org.eclipse.aether.resolution.VersionRangeRequest;
40 import org.eclipse.aether.resolution.VersionRangeResolutionException;
41 import org.eclipse.aether.resolution.VersionRangeResult;
42 import org.eclipse.aether.version.Version;
43
44
45
46
47
48 public class DependencyCollectionUtils
49 {
50
51 @SuppressWarnings( "checkstyle:parameternumber" )
52 static DefaultDependencyNode addDependencyNode( DependencyNode parent, List<Artifact> relocations,
53 PremanagedDependency preManaged, VersionRangeResult rangeResult,
54 Version version, Dependency d, Collection<Artifact> aliases,
55 List<RemoteRepository> repos, String requestContext )
56 {
57 DefaultDependencyNode child = new DefaultDependencyNode( d );
58 preManaged.applyTo( child );
59 child.setRelocations( relocations );
60 child.setVersionConstraint( rangeResult.getVersionConstraint() );
61 child.setVersion( version );
62 child.setAliases( aliases );
63 child.setRepositories( repos );
64 child.setRequestContext( requestContext );
65 parent.getChildren().add( child );
66 return child;
67 }
68
69 @SuppressWarnings( "checkstyle:parameternumber" )
70 static DefaultDependencyNode createDependencyNode( DependencyNode parent, List<Artifact> relocations,
71 PremanagedDependency preManaged, VersionRangeResult rangeResult,
72 Version version, Dependency d,
73 ArtifactDescriptorResult descriptorResult,
74 DependencyNode cycleNode )
75 {
76 DefaultDependencyNode child =
77 addDependencyNode( parent, relocations, preManaged, rangeResult, version, d, descriptorResult.getAliases(),
78 cycleNode.getRepositories(), cycleNode.getRequestContext() );
79 child.setChildren( cycleNode.getChildren() );
80 return child;
81 }
82
83 static ArtifactDescriptorRequest createArtifactDescriptorRequest( Args args, List<RemoteRepository> repositories,
84 Dependency d )
85 {
86 ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
87 descriptorRequest.setArtifact( d.getArtifact() );
88 descriptorRequest.setRepositories( repositories );
89 descriptorRequest.setRequestContext( args.request.getRequestContext() );
90 descriptorRequest.setTrace( args.trace );
91 return descriptorRequest;
92 }
93
94 static VersionRangeRequest createVersionRangeRequest( Args args, List<RemoteRepository> repositories,
95 Dependency dependency )
96 {
97 VersionRangeRequest rangeRequest = new VersionRangeRequest();
98 rangeRequest.setArtifact( dependency.getArtifact() );
99 rangeRequest.setRepositories( repositories );
100 rangeRequest.setRequestContext( args.request.getRequestContext() );
101 rangeRequest.setTrace( args.trace );
102 return rangeRequest;
103 }
104
105 static boolean isLackingDescriptor( Artifact artifact )
106 {
107 return artifact.getProperty( ArtifactProperties.LOCAL_PATH, null ) != null;
108 }
109
110 static List<RemoteRepository> getRemoteRepositories( ArtifactRepository repository,
111 List<RemoteRepository> repositories )
112 {
113 if ( repository instanceof RemoteRepository )
114 {
115 return Collections.singletonList( (RemoteRepository) repository );
116 }
117 if ( repository != null )
118 {
119 return Collections.emptyList();
120 }
121 return repositories;
122 }
123
124 static List<? extends Version> filterVersions( Dependency dependency, VersionRangeResult rangeResult,
125 VersionFilter verFilter, DefaultVersionFilterContext verContext )
126 throws VersionRangeResolutionException
127 {
128 if ( rangeResult.getVersions().isEmpty() )
129 {
130 throw new VersionRangeResolutionException( rangeResult, "No versions available for "
131 + dependency.getArtifact() + " within specified range" );
132 }
133
134 List<? extends Version> versions;
135 if ( verFilter != null && rangeResult.getVersionConstraint().getRange() != null )
136 {
137 verContext.set( dependency, rangeResult );
138 try
139 {
140 verFilter.filterVersions( verContext );
141 }
142 catch ( RepositoryException e )
143 {
144 throw new VersionRangeResolutionException( rangeResult, "Failed to filter versions for "
145 + dependency.getArtifact() + ": " + e.getMessage(), e );
146 }
147 versions = verContext.get();
148 if ( versions.isEmpty() )
149 {
150 throw new VersionRangeResolutionException( rangeResult, "No acceptable versions for "
151 + dependency.getArtifact() + ": " + rangeResult.getVersions() );
152 }
153 }
154 else
155 {
156 versions = rangeResult.getVersions();
157 }
158 return versions;
159 }
160
161 static RepositorySystemSession optimizeSession( RepositorySystemSession session )
162 {
163 DefaultRepositorySystemSession optimized = new DefaultRepositorySystemSession( session );
164 optimized.setArtifactTypeRegistry( CachingArtifactTypeRegistry.newInstance( session ) );
165 return optimized;
166 }
167
168 static String getId( Dependency d )
169 {
170 Artifact a = d.getArtifact();
171 return a.getGroupId() + ':' + a.getArtifactId() + ':' + a.getClassifier() + ':' + a.getExtension();
172 }
173 }