Author: sisbell
Date: Wed Oct 1 09:10:39 2008
New Revision: 700820
URL: http://svn.apache.org/viewvc?rev=700820&view=rev
Log:
Missed these classes when I merged out changes related to repository helper.
Added:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java
Added:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java?rev=700820&view=auto
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java
(added)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java
Wed Oct 1 09:10:39 2008
@@ -0,0 +1,291 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.MavenTools;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactStatus;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.profiles.activation.ProfileActivationContext;
+import org.apache.maven.profiles.build.ProfileAdvisor;
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.*;
+
+/**
+ * This is a temporary class. These methods are originally from the
DefaultMavenProjectHelper. This class will be
+ * eliminated when Mercury is integrated.
+ */
+public class DefaultRepositoryHelper
+ implements RepositoryHelper, Initializable, LogEnabled
+{
+
+ private Logger logger;
+
+ public static final String MAVEN_MODEL_VERSION = "4.0.0";
+
+ private ArtifactFactory artifactFactory;
+
+ private ArtifactResolver artifactResolver;
+
+ private MavenTools mavenTools;
+
+ private ProfileAdvisor profileAdvisor;
+
+ private MavenXpp3Reader modelReader;
+
+ private static HashMap<String, Artifact> cache = new HashMap<String,
Artifact>();
+
+ private Logger getLogger()
+ {
+ return logger;
+ }
+
+ public void findModelFromRepository( Artifact artifact, List
remoteArtifactRepositories,
+ ArtifactRepository localRepository )
+ throws ProjectBuildingException
+ {
+
+ if(cache.containsKey(artifact.getId()))
+ {
+ artifact.setFile(cache.get(artifact.getId()).getFile());
+ }
+
+ String projectId = safeVersionlessKey( artifact.getGroupId(),
artifact.getArtifactId() );
+ remoteArtifactRepositories = normalizeToArtifactRepositories(
remoteArtifactRepositories, projectId );
+
+ Artifact projectArtifact;
+
+ // if the artifact is not a POM, we need to construct a POM artifact
based on the artifact parameter given.
+ if ( "pom".equals( artifact.getType() ) )
+ {
+ projectArtifact = artifact;
+ }
+ else
+ {
+ getLogger().warn( "Attempting to build MavenProject instance for
Artifact (" + artifact.getGroupId() + ":" +
+ artifact.getArtifactId() + ":" + artifact.getVersion() + ") of
type: " + artifact.getType() +
+ "; constructing POM artifact instead." );
+
+ projectArtifact = artifactFactory.createProjectArtifact(
artifact.getGroupId(), artifact.getArtifactId(),
+
artifact.getVersion(), artifact.getScope() );
+ }
+
+ try
+ {
+ artifactResolver.resolve( projectArtifact,
remoteArtifactRepositories, localRepository );
+
+ File file = projectArtifact.getFile();
+ artifact.setFile( file );
+ cache.put(artifact.getId(), artifact);
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new ProjectBuildingException( projectId, "Error getting POM
for '" + projectId +
+ "' from the repository: " + e.getMessage(), e );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new ProjectBuildingException( projectId,
+ "POM '" + projectId + "' not
found in repository: " + e.getMessage(),
+ e );
+ }
+ }
+
+ public List buildArtifactRepositories( Model model )
+ throws ProjectBuildingException
+ {
+ try
+ {
+ return mavenTools.buildArtifactRepositories(
model.getRepositories() );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ String projectId = safeVersionlessKey( model.getGroupId(),
model.getArtifactId() );
+
+ throw new ProjectBuildingException( projectId, e.getMessage(), e );
+ }
+ }
+
+ /*
+ * Order is:
+ *
+ * 1. model profile repositories
+ * 2. model repositories
+ * 3. superModel profile repositories
+ * 4. superModel repositories
+ * 5. parentSearchRepositories
+ */
+ public LinkedHashSet collectInitialRepositories( Model model, Model
superModel, List parentSearchRepositories,
+ File pomFile, boolean
validProfilesXmlLocation,
+ ProfileActivationContext
profileActivationContext )
+ throws ProjectBuildingException
+ {
+ LinkedHashSet collected = new LinkedHashSet();
+
+ collectInitialRepositoriesFromModel( collected, model, pomFile,
validProfilesXmlLocation,
+ profileActivationContext );
+
+ collectInitialRepositoriesFromModel( collected, superModel, null,
validProfilesXmlLocation,
+ profileActivationContext );
+
+ if ( ( parentSearchRepositories != null ) &&
!parentSearchRepositories.isEmpty() )
+ {
+ collected.addAll( parentSearchRepositories );
+ }
+
+ return collected;
+ }
+
+ private List normalizeToArtifactRepositories( List
remoteArtifactRepositories, String projectId )
+ throws ProjectBuildingException
+ {
+ List normalized = new ArrayList( remoteArtifactRepositories.size() );
+
+ boolean normalizationNeeded = false;
+ for ( Iterator it = remoteArtifactRepositories.iterator();
it.hasNext(); )
+ {
+ Object item = it.next();
+
+ if ( item instanceof ArtifactRepository )
+ {
+ normalized.add( item );
+ }
+ else if ( item instanceof Repository )
+ {
+ Repository repo = (Repository) item;
+ try
+ {
+ item = mavenTools.buildArtifactRepository( repo );
+
+ normalized.add( item );
+ normalizationNeeded = true;
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ throw new ProjectBuildingException( projectId,
+ "Error building
artifact repository for id: " + repo.getId(),
+ e );
+ }
+ }
+ else
+ {
+ throw new ProjectBuildingException( projectId,
+ "Error building artifact
repository from non-repository information item: " +
+ item );
+ }
+ }
+
+ if ( normalizationNeeded )
+ {
+ return normalized;
+ }
+ else
+ {
+ return remoteArtifactRepositories;
+ }
+ }
+
+ private String safeVersionlessKey( String groupId, String artifactId )
+ {
+ String gid = groupId;
+
+ if ( StringUtils.isEmpty( gid ) )
+ {
+ gid = "unknown";
+ }
+
+ String aid = artifactId;
+
+ if ( StringUtils.isEmpty( aid ) )
+ {
+ aid = "unknown";
+ }
+
+ return ArtifactUtils.versionlessKey( gid, aid );
+ }
+
+ private void collectInitialRepositoriesFromModel( LinkedHashSet collected,
Model model, File pomFile,
+ boolean
validProfilesXmlLocation,
+ ProfileActivationContext
profileActivationContext )
+ throws ProjectBuildingException
+ {
+
+ Set reposFromProfiles =
profileAdvisor.getArtifactRepositoriesFromActiveProfiles( model, pomFile,
+
validProfilesXmlLocation,
+
profileActivationContext );
+
+ if ( ( reposFromProfiles != null ) && !reposFromProfiles.isEmpty() )
+ {
+ collected.addAll( reposFromProfiles );
+ }
+
+ List modelRepos = model.getRepositories();
+
+ if ( ( modelRepos != null ) && !modelRepos.isEmpty() )
+ {
+ try
+ {
+ collected.addAll( mavenTools.buildArtifactRepositories(
modelRepos ) );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ throw new ProjectBuildingException( safeVersionlessKey(
model.getGroupId(), model.getArtifactId() ),
+ "Failed to construct
ArtifactRepository instances for repositories declared in: " +
+ model.getId(), e );
+ }
+ }
+ }
+
+
+ public void initialize()
+ throws InitializationException
+ {
+ modelReader = new MavenXpp3Reader();
+ }
+
+ public void enableLogging( Logger logger )
+ {
+ this.logger = logger;
+ }
+}
\ No newline at end of file
Added:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java?rev=700820&view=auto
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java
(added)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java
Wed Oct 1 09:10:39 2008
@@ -0,0 +1,32 @@
+package org.apache.maven.project;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Model;
+import org.apache.maven.profiles.activation.ProfileActivationContext;
+
+import java.io.File;
+import java.util.LinkedHashSet;
+import java.util.List;
+
+/**
+ * This is a temporary class. These methods are originally from the
DefaultMavenProjectHelper. This class will be
+ * eliminated when Mercury is integrated.
+ */
+public interface RepositoryHelper
+{
+
+ String ROLE = RepositoryHelper.class.getName();
+
+ void findModelFromRepository( Artifact artifact, List
remoteArtifactRepositories,
+ ArtifactRepository localRepository )
+ throws ProjectBuildingException;
+
+ List buildArtifactRepositories( Model model )
+ throws ProjectBuildingException;
+
+ LinkedHashSet collectInitialRepositories( Model model, Model superModel,
List parentSearchRepositories,
+ File pomFile, boolean
validProfilesXmlLocation,
+ ProfileActivationContext
profileActivationContext )
+ throws ProjectBuildingException;
+}