1 package org.apache.maven.shared.transfer.repository.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23
24 import org.apache.maven.RepositoryUtils;
25 import org.apache.maven.artifact.metadata.ArtifactMetadata;
26 import org.apache.maven.project.DefaultProjectBuildingRequest;
27 import org.apache.maven.project.ProjectBuildingRequest;
28 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
29 import org.apache.maven.shared.transfer.repository.RepositoryManagerException;
30 import org.eclipse.aether.DefaultRepositoryCache;
31 import org.eclipse.aether.DefaultRepositorySystemSession;
32 import org.eclipse.aether.RepositorySystem;
33 import org.eclipse.aether.RepositorySystemSession;
34 import org.eclipse.aether.artifact.Artifact;
35 import org.eclipse.aether.artifact.DefaultArtifact;
36 import org.eclipse.aether.metadata.DefaultMetadata;
37 import org.eclipse.aether.metadata.Metadata;
38 import org.eclipse.aether.metadata.Metadata.Nature;
39 import org.eclipse.aether.repository.LocalRepository;
40 import org.eclipse.aether.repository.LocalRepositoryManager;
41
42
43
44
45 class Maven31RepositoryManager
46 implements MavenRepositoryManager
47 {
48 private final RepositorySystem repositorySystem;
49
50 private final RepositorySystemSession session;
51
52 Maven31RepositoryManager( RepositorySystem repositorySystem,
53 RepositorySystemSession session )
54 {
55 this.repositorySystem = repositorySystem;
56 this.session = session;
57 }
58
59 @Override
60 public String getPathForLocalArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
61 {
62 Artifact aetherArtifact;
63
64
65 try
66 {
67 aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
68 org.apache.maven.artifact.Artifact.class, mavenArtifact );
69 }
70 catch ( RepositoryManagerException e )
71 {
72 throw new RuntimeException( e.getMessage(), e );
73 }
74
75 return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
76 }
77
78 @Override
79 public String getPathForLocalArtifact( ArtifactCoordinate coordinate )
80 {
81 Artifact aetherArtifact = toArtifact( coordinate );
82
83 return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
84 }
85
86 @Override
87 public String getPathForLocalMetadata( ArtifactMetadata metadata )
88 {
89 Metadata aetherMetadata =
90 new DefaultMetadata( metadata.getGroupId(),
91 metadata.storedInGroupDirectory() ? null : metadata.getArtifactId(),
92 metadata.storedInArtifactVersionDirectory() ? metadata.getBaseVersion() : null,
93 "maven-metadata.xml", Nature.RELEASE_OR_SNAPSHOT );
94
95 return session.getLocalRepositoryManager().getPathForLocalMetadata( aetherMetadata );
96 }
97
98 @Override
99 public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest, File basedir )
100 {
101 ProjectBuildingRequest newRequest = new DefaultProjectBuildingRequest( buildingRequest );
102
103 RepositorySystemSession session;
104 try
105 {
106 session = Invoker.invoke( buildingRequest, "getRepositorySession" );
107 }
108 catch ( RepositoryManagerException e )
109 {
110 throw new RuntimeException( e.getMessage(), e );
111 }
112
113
114 DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession( session );
115
116
117 newSession.setCache( new DefaultRepositoryCache() );
118
119
120 String repositoryType = resolveRepositoryType( session.getLocalRepository() );
121
122 LocalRepositoryManager localRepositoryManager =
123 repositorySystem.newLocalRepositoryManager( newSession, new LocalRepository( basedir, repositoryType ) );
124
125 newSession.setLocalRepositoryManager( localRepositoryManager );
126
127 try
128 {
129 Invoker.invoke( newRequest, "setRepositorySession", RepositorySystemSession.class, newSession );
130 }
131 catch ( RepositoryManagerException e )
132 {
133 throw new RuntimeException( e.getMessage(), e );
134 }
135
136 return newRequest;
137 }
138
139 @Override
140 public File getLocalRepositoryBasedir()
141 {
142 return session.getLocalRepository().getBasedir();
143 }
144
145
146
147
148
149 protected String resolveRepositoryType( LocalRepository localRepository )
150 {
151 String repositoryType;
152 if ( "enhanced".equals( localRepository.getContentType() ) )
153 {
154 repositoryType = "default";
155 }
156 else
157 {
158
159 repositoryType = localRepository.getContentType();
160 }
161 return repositoryType;
162 }
163
164
165
166
167
168 protected Artifact toArtifact( ArtifactCoordinate coordinate )
169 {
170 if ( coordinate == null )
171 {
172 return null;
173 }
174
175 Artifact result =
176 new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(),
177 coordinate.getExtension(), coordinate.getVersion() );
178
179 return result;
180 }
181 }