restore deleted files, and fix package on ProjectArtifactMetadata

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@164909 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Leslie Porter 2005-04-26 23:19:21 +00:00
parent 0af1c74587
commit 27f12f85c1
2 changed files with 277 additions and 0 deletions

View File

@ -0,0 +1,163 @@
package org.apache.maven.project.artifact;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.factory.DefaultArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.wagon.util.IoUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
* @version $Id$
*/
public class MavenMetadataSource
implements ArtifactMetadataSource
{
private MavenProjectBuilder mavenProjectBuilder;
private ArtifactResolver artifactResolver;
// TODO: configure?
protected ArtifactFactory artifactFactory = new DefaultArtifactFactory();
/**
* @todo remove.
*/
private MavenXpp3Reader reader = new MavenXpp3Reader();
public MavenMetadataSource( ArtifactResolver artifactResolver )
{
this.artifactResolver = artifactResolver;
this.mavenProjectBuilder = null;
}
public MavenMetadataSource( ArtifactResolver artifactResolver, MavenProjectBuilder projectBuilder )
{
this.artifactResolver = artifactResolver;
this.mavenProjectBuilder = projectBuilder;
}
public Set retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
throws ArtifactMetadataRetrievalException
{
// TODO: only metadata is really needed - resolve as metadata
artifact = artifactFactory.createArtifact( artifact.getGroupId(), artifact.getArtifactId(),
artifact.getVersion(), artifact.getScope(), "pom" );
List dependencies = null;
// Use the ProjectBuilder, to enable post-processing and inheritance calculation before retrieving the
// associated artifacts.
if ( mavenProjectBuilder != null )
{
try
{
MavenProject p = mavenProjectBuilder.buildFromRepository( artifact, remoteRepositories,
localRepository );
dependencies = p.getDependencies();
}
catch ( ProjectBuildingException e )
{
throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e );
}
}
else
{
// there is code in plexus that uses this (though it shouldn't) so we
// need to be able to not have a project builder
// TODO: remove - which then makes this a very thin wrapper around a project builder - is it needed?
try
{
artifactResolver.resolve( artifact, remoteRepositories, localRepository );
}
catch ( ArtifactResolutionException e )
{
throw new ArtifactMetadataRetrievalException( "Error while resolving metadata artifact", e );
}
FileReader reader = null;
try
{
// String path = localRepository.pathOfMetadata( new ProjectArtifactMetadata( artifact, null ) );
// File file = new File( localRepository.getBasedir(), path );
File file = artifact.getFile();
reader = new FileReader( file );
Model model = this.reader.read( reader );
dependencies = model.getDependencies();
}
catch ( FileNotFoundException e )
{
throw new ArtifactMetadataRetrievalException( "Unable to find the metadata file", e );
}
catch ( IOException e )
{
throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e );
}
catch ( XmlPullParserException e )
{
throw new ArtifactMetadataRetrievalException( "Unable to parse the metadata file", e );
}
finally
{
IoUtils.close( reader );
}
}
return createArtifacts( dependencies, artifact.getScope() );
}
protected Set createArtifacts( List dependencies, String inheritedScope )
{
Set projectArtifacts = new HashSet();
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
{
Dependency d = (Dependency) i.next();
Artifact artifact = artifactFactory.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(),
d.getScope(), d.getType(), inheritedScope );
if ( artifact != null )
{
projectArtifacts.add( artifact );
}
}
return projectArtifacts;
}
}

View File

@ -0,0 +1,114 @@
package org.apache.maven.project.artifact;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.layout.ArtifactPathFormatException;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* Attach a POM to an artifact.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id$
*/
public class ProjectArtifactMetadata
extends AbstractArtifactMetadata
{
private final File file;
public ProjectArtifactMetadata( Artifact artifact, File file )
{
super( artifact, null );
this.file = file;
}
public String getFilename()
{
return getArtifact().getArtifactId() + "-" + getArtifact().getVersion() + ".pom";
}
public void storeInLocalRepository( ArtifactRepository localRepository )
throws ArtifactMetadataRetrievalException
{
File destination;
try
{
destination = new File( localRepository.getBasedir(), localRepository.pathOfMetadata( this ) );
}
catch ( ArtifactPathFormatException e )
{
throw new ArtifactMetadataRetrievalException( "Unable to install POM", e );
}
destination.getParentFile().mkdirs();
FileReader reader = null;
FileWriter writer = null;
try
{
reader = new FileReader( file );
writer = new FileWriter( destination );
MavenXpp3Reader modelReader = new MavenXpp3Reader();
Model model = modelReader.read( reader );
model.setVersion( getArtifact().getVersion() );
MavenXpp3Writer modelWriter = new MavenXpp3Writer();
modelWriter.write( writer, model );
}
catch ( FileNotFoundException e )
{
throw new ArtifactMetadataRetrievalException( "Error rewriting POM", e );
}
catch ( IOException e )
{
throw new ArtifactMetadataRetrievalException( "Error rewriting POM", e );
}
catch ( XmlPullParserException e )
{
throw new ArtifactMetadataRetrievalException( "Error rewriting POM", e );
}
finally
{
IOUtil.close( reader );
IOUtil.close( writer );
}
}
public void retrieveFromRemoteRepository( ArtifactRepository remoteRepository, WagonManager wagonManager )
{
// not used - TODO: again indicates bad design?
}
public String toString()
{
return "project information for " + artifact.getArtifactId() + " " + artifact.getVersion();
}
}