KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > maven > project > TestArtifactResolver


1 package org.apache.maven.project;
2
3 /*
4  * Copyright 2001-2005 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * 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, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18
19 import org.apache.maven.artifact.Artifact;
20 import org.apache.maven.artifact.InvalidRepositoryException;
21 import org.apache.maven.artifact.factory.ArtifactFactory;
22 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
23 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
24 import org.apache.maven.artifact.metadata.ResolutionGroup;
25 import org.apache.maven.artifact.repository.ArtifactRepository;
26 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
27 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
28 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
29 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
30 import org.apache.maven.artifact.resolver.DefaultArtifactResolver;
31 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
32 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
33 import org.apache.maven.artifact.versioning.VersionRange;
34 import org.apache.maven.model.Dependency;
35 import org.apache.maven.model.Model;
36 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
37 import org.codehaus.plexus.PlexusConstants;
38 import org.codehaus.plexus.PlexusContainer;
39 import org.codehaus.plexus.context.Context;
40 import org.codehaus.plexus.context.ContextException;
41 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
42 import org.codehaus.plexus.util.IOUtil;
43 import org.codehaus.plexus.util.StringUtils;
44 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
45
46 import java.io.File JavaDoc;
47 import java.io.IOException JavaDoc;
48 import java.io.InputStreamReader JavaDoc;
49 import java.util.HashSet JavaDoc;
50 import java.util.Iterator JavaDoc;
51 import java.util.List JavaDoc;
52 import java.util.Set JavaDoc;
53
54 public class TestArtifactResolver
55     extends DefaultArtifactResolver
56     implements Contextualizable
57 {
58     public static final String JavaDoc ROLE = TestArtifactResolver.class.getName();
59
60     private ArtifactRepositoryFactory repositoryFactory;
61
62     private PlexusContainer container;
63
64     static class Source
65         implements ArtifactMetadataSource
66     {
67         private ArtifactFactory artifactFactory;
68
69         private final ArtifactRepositoryFactory repositoryFactory;
70
71         private final PlexusContainer container;
72
73         public Source( ArtifactFactory artifactFactory, ArtifactRepositoryFactory repositoryFactory,
74                        PlexusContainer container )
75         {
76             this.artifactFactory = artifactFactory;
77             this.repositoryFactory = repositoryFactory;
78             this.container = container;
79         }
80
81         public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
82                                          List JavaDoc remoteRepositories )
83             throws ArtifactMetadataRetrievalException
84         {
85             Model model = null;
86             InputStreamReader JavaDoc r = null;
87             try
88             {
89                 String JavaDoc scope = artifact.getArtifactId().substring( "scope-".length() );
90                 if ( "maven-test".equals( artifact.getGroupId() ) )
91                 {
92                     String JavaDoc name = "/projects/scope/transitive-" + scope + "-dep.xml";
93                     r = new InputStreamReader JavaDoc( getClass().getResourceAsStream( name ) );
94                     MavenXpp3Reader reader = new MavenXpp3Reader();
95                     model = reader.read( r );
96                 }
97                 else
98                 {
99                     model = new Model();
100                 }
101                 model.setGroupId( artifact.getGroupId() );
102                 model.setArtifactId( artifact.getArtifactId() );
103             }
104             catch ( IOException JavaDoc e )
105             {
106                 throw new ArtifactMetadataRetrievalException( e );
107             }
108             catch ( XmlPullParserException e )
109             {
110                 throw new ArtifactMetadataRetrievalException( e );
111             }
112             finally
113             {
114                 IOUtil.close( r );
115             }
116
117             Set JavaDoc artifacts;
118             try
119             {
120                 artifacts = createArtifacts( model.getDependencies(), artifact.getScope() );
121             }
122             catch ( InvalidVersionSpecificationException e )
123             {
124                 throw new ArtifactMetadataRetrievalException( e );
125             }
126
127             List JavaDoc artifactRepositories;
128             try
129             {
130                 artifactRepositories =
131                     ProjectUtils.buildArtifactRepositories( model.getRepositories(), repositoryFactory, container );
132             }
133             catch ( InvalidRepositoryException e )
134             {
135                 throw new ArtifactMetadataRetrievalException( e );
136             }
137
138             return new ResolutionGroup( artifact, artifacts, artifactRepositories );
139         }
140
141         public List JavaDoc retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
142                                                List JavaDoc remoteRepositories )
143         {
144             throw new UnsupportedOperationException JavaDoc( "Cannot get available versions in this test case" );
145         }
146
147         protected Set JavaDoc createArtifacts( List JavaDoc dependencies, String JavaDoc inheritedScope )
148             throws InvalidVersionSpecificationException
149         {
150             Set JavaDoc projectArtifacts = new HashSet JavaDoc();
151
152             for ( Iterator JavaDoc i = dependencies.iterator(); i.hasNext(); )
153             {
154                 Dependency d = (Dependency) i.next();
155
156                 String JavaDoc scope = d.getScope();
157
158                 if ( StringUtils.isEmpty( scope ) )
159                 {
160                     scope = Artifact.SCOPE_COMPILE;
161
162                     d.setScope( scope );
163                 }
164
165                 VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() );
166                 Artifact artifact = artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(),
167                                                                               versionRange, d.getType(),
168                                                                               d.getClassifier(), scope,
169                                                                               inheritedScope );
170                 if ( artifact != null )
171                 {
172                     projectArtifacts.add( artifact );
173                 }
174             }
175
176             return projectArtifacts;
177         }
178     }
179
180     public Source source()
181     {
182         return new Source( artifactFactory, repositoryFactory, container );
183     }
184
185     /**
186      * @noinspection RefusedBequest
187      */

188     public void resolve( Artifact artifact, List JavaDoc remoteRepositories, ArtifactRepository localRepository )
189         throws ArtifactResolutionException
190     {
191         artifact.setFile( new File JavaDoc( "dummy" ) );
192     }
193
194     public ArtifactResolutionResult resolveTransitively( Set JavaDoc artifacts, Artifact originatingArtifact,
195                                                          ArtifactRepository localRepository, List JavaDoc remoteRepositories,
196                                                          ArtifactMetadataSource source, ArtifactFilter filter )
197         throws ArtifactResolutionException, ArtifactNotFoundException
198     {
199         return super.resolveTransitively( artifacts, originatingArtifact, localRepository, remoteRepositories,
200                                           new Source( artifactFactory, repositoryFactory, container ), filter );
201     }
202
203     public ArtifactResolutionResult resolveTransitively( Set JavaDoc artifacts, Artifact originatingArtifact,
204                                                          List JavaDoc remoteRepositories, ArtifactRepository localRepository,
205                                                          ArtifactMetadataSource source )
206         throws ArtifactResolutionException, ArtifactNotFoundException
207     {
208         return super.resolveTransitively( artifacts, originatingArtifact, remoteRepositories, localRepository,
209                                           new Source( artifactFactory, repositoryFactory, container ) );
210     }
211
212     public void contextualize( Context context )
213         throws ContextException
214     {
215         this.container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
216     }
217
218 }
Popular Tags