You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by lt...@apache.org on 2008/08/03 15:18:17 UTC
svn commit: r682163 [2/8] - in
/maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1: ./
src/main/java/org/apache/maven/report/projectinfo/
src/main/java/org/apache/maven/report/projectinfo/dependencies/
src/main/java/org/apache/maven/...
Modified: maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/ScmReport.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/ScmReport.java?rev=682163&r1=682162&r2=682163&view=diff
==============================================================================
--- maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/ScmReport.java (original)
+++ maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/ScmReport.java Sun Aug 3 06:18:15 2008
@@ -22,6 +22,7 @@
import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.model.Model;
import org.apache.maven.model.Scm;
+import org.apache.maven.plugin.logging.Log;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
import org.apache.maven.scm.manager.NoSuchScmProviderException;
import org.apache.maven.scm.manager.ScmManager;
@@ -34,10 +35,13 @@
import org.codehaus.plexus.i18n.I18N;
import org.codehaus.plexus.util.StringUtils;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
/**
- * Generates the Project Source Code Management report.
+ * Generates the Project Source Code Management (SCM) report.
*
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton </a>
* @version $Id$
@@ -47,6 +51,10 @@
public class ScmReport
extends AbstractProjectInfoReport
{
+ // ----------------------------------------------------------------------
+ // Mojo parameters
+ // ----------------------------------------------------------------------
+
/**
* Maven SCM Manager.
*
@@ -57,7 +65,7 @@
protected ScmManager scmManager;
/**
- * The directory name to checkout right after the scm url
+ * The directory name to checkout right after the SCM url.
*
* @parameter expression="${project.artifactId}"
* @required
@@ -65,23 +73,25 @@
private String checkoutDirectoryName;
/**
- * The scm anonymous connection url.
+ * The SCM anonymous connection url respecting the SCM URL Format.
*
* @parameter default-value="${project.scm.connection}"
* @since 2.1
+ * @see <a href="http://maven.apache.org/scm/scm-url-format.html">SCM URL Format< /a>
*/
private String anonymousConnection;
/**
- * The scm developer connection url.
+ * The SCM developer connection url respecting the SCM URL Format.
*
* @parameter default-value="${project.scm.developerConnection}"
* @since 2.1
+ * @see <a href="http://maven.apache.org/scm/scm-url-format.html">SCM URL Format< /a>
*/
private String developerConnection;
/**
- * The scm web access url.
+ * The SCM web access url.
*
* @parameter default-value="${project.scm.url}"
* @since 2.1
@@ -107,9 +117,9 @@
/** {@inheritDoc} */
public void executeReport( Locale locale )
{
- ScmRenderer r =
- new ScmRenderer( scmManager, getSink(), getProject().getModel(), i18n, locale, checkoutDirectoryName,
- webAccessUrl, anonymousConnection, developerConnection );
+ ScmRenderer r = new ScmRenderer( getLog(), scmManager, getSink(), getProject().getModel(), i18n, locale,
+ checkoutDirectoryName, webAccessUrl, anonymousConnection,
+ developerConnection );
r.render();
}
@@ -124,9 +134,14 @@
// Private
// ----------------------------------------------------------------------
+ /**
+ * Internal renderer class
+ */
private static class ScmRenderer
extends AbstractMavenReportRenderer
{
+ private Log log;
+
private Model model;
private I18N i18n;
@@ -146,11 +161,13 @@
private String webAccessUrl;
- ScmRenderer( ScmManager scmManager, Sink sink, Model model, I18N i18n, Locale locale, String checkoutDirName,
- String webAccessUrl, String anonymousConnection, String devConnection )
+ ScmRenderer( Log log, ScmManager scmManager, Sink sink, Model model, I18N i18n, Locale locale,
+ String checkoutDirName, String webAccessUrl, String anonymousConnection, String devConnection )
{
super( sink );
+ this.log = log;
+
this.scmManager = scmManager;
this.model = model;
@@ -286,7 +303,7 @@
/**
* Render the anonymous access section depending the repository.
- * <p>Note: ClearCase, Starteam et Perforce seems to have no anonymous access.</>
+ * <p>Note: ClearCase, Starteam et Perforce seems to have no anonymous access.</p>
*
* @param anonymousRepository the anonymous repository
*/
@@ -302,27 +319,22 @@
if ( anonymousRepository != null && isScmSystem( anonymousRepository, "cvs" ) )
{
- CvsScmProviderRepository cvsRepo =
- (CvsScmProviderRepository) anonymousRepository.getProviderRepository();
+ CvsScmProviderRepository cvsRepo = (CvsScmProviderRepository) anonymousRepository
+ .getProviderRepository();
anonymousAccessCVS( cvsRepo );
}
else if ( anonymousRepository != null && isScmSystem( anonymousRepository, "svn" ) )
{
- SvnScmProviderRepository svnRepo =
- (SvnScmProviderRepository) anonymousRepository.getProviderRepository();
+ SvnScmProviderRepository svnRepo = (SvnScmProviderRepository) anonymousRepository
+ .getProviderRepository();
anonymousAccessSVN( svnRepo );
}
else
{
- paragraph(
- i18n.getString( "project-info-report", locale, "report.scm.anonymousaccess.general.intro" ) );
-
- if ( anonymousConnection.length() < 4 )
- {
- throw new IllegalArgumentException( "The source repository connection is too short." );
- }
+ paragraph( i18n.getString( "project-info-report", locale,
+ "report.scm.anonymousaccess.general.intro" ) );
verbatimText( anonymousConnection.substring( 4 ) );
}
@@ -356,15 +368,15 @@
}
else if ( devRepository != null && isScmSystem( devRepository, "perforce" ) )
{
- PerforceScmProviderRepository perforceRepo =
- (PerforceScmProviderRepository) devRepository.getProviderRepository();
+ PerforceScmProviderRepository perforceRepo = (PerforceScmProviderRepository) devRepository
+ .getProviderRepository();
developerAccessPerforce( perforceRepo );
}
else if ( devRepository != null && isScmSystem( devRepository, "starteam" ) )
{
- StarteamScmProviderRepository starteamRepo =
- (StarteamScmProviderRepository) devRepository.getProviderRepository();
+ StarteamScmProviderRepository starteamRepo = (StarteamScmProviderRepository) devRepository
+ .getProviderRepository();
developerAccessStarteam( starteamRepo );
}
@@ -378,11 +390,6 @@
{
paragraph( i18n.getString( "project-info-report", locale, "report.scm.devaccess.general.intro" ) );
- if ( devConnection.length() < 4 )
- {
- throw new IllegalArgumentException( "The source repository connection is too short." );
- }
-
verbatimText( devConnection.substring( 4 ) );
}
@@ -402,22 +409,23 @@
{
SvnScmProviderRepository svnRepo = (SvnScmProviderRepository) devRepository.getProviderRepository();
- paragraph(
- i18n.getString( "project-info-report", locale, "report.scm.accessbehindfirewall.svn.intro" ) );
+ paragraph( i18n.getString( "project-info-report", locale,
+ "report.scm.accessbehindfirewall.svn.intro" ) );
StringBuffer sb = new StringBuffer();
- sb.append( "$ svn checkout " ).append( svnRepo.getUrl() ).append( " " ).append( checkoutDirectoryName );
+ sb.append( "$ svn checkout " ).append( svnRepo.getUrl() );
+ sb.append( " " ).append( checkoutDirectoryName );
verbatimText( sb.toString() );
}
else if ( devRepository != null && isScmSystem( devRepository, "cvs" ) )
{
- linkPatternedText(
- i18n.getString( "project-info-report", locale, "report.scm.accessbehindfirewall.cvs.intro" ) );
+ linkPatternedText( i18n.getString( "project-info-report", locale,
+ "report.scm.accessbehindfirewall.cvs.intro" ) );
}
else
{
- paragraph(
- i18n.getString( "project-info-report", locale, "report.scm.accessbehindfirewall.general.intro" ) );
+ paragraph( i18n.getString( "project-info-report", locale,
+ "report.scm.accessbehindfirewall.general.intro" ) );
}
endSection();
@@ -427,20 +435,21 @@
* Render the access from behind a firewall section
*
* @param anonymousRepository the anonymous repository
- * @param devRepository the dev repository
+ * @param devRepository the dev repository
*/
private void renderAccessThroughProxySection( ScmRepository anonymousRepository, ScmRepository devRepository )
{
if ( isScmSystem( anonymousRepository, "svn" ) || isScmSystem( devRepository, "svn" ) )
{
- startSection( i18n.getString( "project-info-report", locale, "report.scm.accessthroughtproxy.title" ) );
+ startSection( i18n.getString( "project-info-report", locale,
+ "report.scm.accessthroughtproxy.title" ) );
- paragraph(
- i18n.getString( "project-info-report", locale, "report.scm.accessthroughtproxy.svn.intro1" ) );
- paragraph(
- i18n.getString( "project-info-report", locale, "report.scm.accessthroughtproxy.svn.intro2" ) );
- paragraph(
- i18n.getString( "project-info-report", locale, "report.scm.accessthroughtproxy.svn.intro3" ) );
+ paragraph( i18n.getString( "project-info-report", locale,
+ "report.scm.accessthroughtproxy.svn.intro1" ) );
+ paragraph( i18n.getString( "project-info-report", locale,
+ "report.scm.accessthroughtproxy.svn.intro2" ) );
+ paragraph( i18n.getString( "project-info-report", locale,
+ "report.scm.accessthroughtproxy.svn.intro3" ) );
StringBuffer sb = new StringBuffer();
sb.append( "[global]" );
@@ -624,7 +633,8 @@
}
else if ( svnRepo.getUrl().startsWith( "svn://" ) )
{
- paragraph( i18n.getString( "project-info-report", locale, "report.scm.devaccess.svn.intro1.svn" ) );
+ paragraph( i18n.getString( "project-info-report", locale,
+ "report.scm.devaccess.svn.intro1.svn" ) );
}
else if ( svnRepo.getUrl().startsWith( "svn+ssh://" ) )
{
@@ -660,22 +670,84 @@
*/
public ScmRepository getScmRepository( String scmUrl )
{
+ if ( StringUtils.isEmpty( scmUrl ) )
+ {
+ return null;
+ }
+
ScmRepository repo = null;
- if ( !StringUtils.isEmpty( scmUrl ) )
+ List messages = new ArrayList();
+ try
+ {
+ messages.addAll( scmManager.validateScmRepository( scmUrl ) );
+ }
+ catch ( Exception e )
{
- try
+ messages.add( e.getMessage() );
+ }
+
+ if ( messages.size() > 0 )
+ {
+ StringBuffer sb = new StringBuffer();
+ boolean isIntroAdded = false;
+ for ( Iterator it = messages.iterator(); it.hasNext(); )
{
- repo = scmManager.makeScmRepository( scmUrl );
+ String msg = it.next().toString();
+
+ // Ignore NoSuchScmProviderException msg
+ // See impl of AbstractScmManager#validateScmRepository()
+ if ( msg.startsWith( "No such provider" ) )
+ {
+ continue;
+ }
+
+ if ( !isIntroAdded )
+ {
+ sb.append( "This SCM url '" + scmUrl + "' is invalid due to the following errors:" );
+ sb.append( "\n" );
+ isIntroAdded = true;
+ }
+ sb.append( " * " );
+ sb.append( msg );
+ sb.append( "\n" );
}
- catch ( NoSuchScmProviderException e )
+
+ if ( StringUtils.isNotEmpty( sb.toString() ) )
{
- // ignore
+ sb.append( "For more information about SCM URL Format, please refer to: "
+ + "http://maven.apache.org/scm/scm-url-format.html" );
+
+ throw new IllegalArgumentException( sb.toString() );
}
- catch ( ScmRepositoryException e )
+ }
+
+ try
+ {
+ repo = scmManager.makeScmRepository( scmUrl );
+ }
+ catch ( NoSuchScmProviderException e )
+ {
+ if ( log.isDebugEnabled() )
+ {
+ log.debug( e.getMessage(), e );
+ }
+ }
+ catch ( ScmRepositoryException e )
+ {
+ if ( log.isDebugEnabled() )
{
- // ignore
+ log.debug( e.getMessage(), e );
}
}
+ catch ( Exception e )
+ {
+ // Should be already catched
+ if ( log.isDebugEnabled() )
+ {
+ log.debug( e.getMessage(), e );
+ }
+ }
+
return repo;
}
@@ -686,7 +758,7 @@
* </p>
*
* @param scmRepository a SCM repository
- * @param scmProvider a SCM provider name
+ * @param scmProvider a SCM provider name
* @return true if the provider of the given SCM repository is equal to the given scm provider.
* @see <a href="http://svn.apache.org/repos/asf/maven/scm/trunk/maven-scm-providers/">maven-scm-providers</a>
*/
Modified: maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/TeamListReport.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/TeamListReport.java?rev=682163&r1=682162&r2=682163&view=diff
==============================================================================
--- maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/TeamListReport.java (original)
+++ maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/TeamListReport.java Sun Aug 3 06:18:15 2008
@@ -80,6 +80,9 @@
// Private
// ----------------------------------------------------------------------
+ /**
+ * Internal renderer class
+ */
private static class TeamListRenderer
extends AbstractMavenReportRenderer
{
Modified: maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java?rev=682163&r1=682162&r2=682163&view=diff
==============================================================================
--- maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java (original)
+++ maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java Sun Aug 3 06:18:15 2008
@@ -23,7 +23,6 @@
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.dependency.tree.DependencyNode;
-import org.apache.maven.shared.dependency.tree.DependencyTree;
import org.apache.maven.shared.jar.JarAnalyzer;
import org.apache.maven.shared.jar.JarData;
import org.apache.maven.shared.jar.classes.JarClassesAnalysis;
@@ -43,17 +42,51 @@
{
private final MavenProject project;
- private final List projectDependencies;
-
- private final DependencyTree dependencyTree;
+ private final DependencyNode dependencyTreeNode;
private final JarClassesAnalysis classesAnalyzer;
- public Dependencies( MavenProject project, DependencyTree dependencyTree, JarClassesAnalysis classesAnalyzer )
+ /**
+ * @since 2.1
+ */
+ private List projectDependencies;
+
+ /**
+ * @since 2.1
+ */
+ private List projectTransitiveDependencies;
+
+ /**
+ * @since 2.1
+ */
+ private List allDependencies;
+
+ /**
+ * @since 2.1
+ */
+ private Map dependenciesByScope;
+
+ /**
+ * @since 2.1
+ */
+ private Map transitiveDependenciesByScope;
+
+ /**
+ * @since 2.1
+ */
+ private Map dependencyDetails;
+
+ /**
+ * Default constructor
+ *
+ * @param project
+ * @param dependencyTreeNode
+ * @param classesAnalyzer
+ */
+ public Dependencies( MavenProject project, DependencyNode dependencyTreeNode, JarClassesAnalysis classesAnalyzer )
{
this.project = project;
- this.dependencyTree = dependencyTree;
- this.projectDependencies = dependencyTree.getRootNode().getChildren();
+ this.dependencyTreeNode = dependencyTreeNode;
this.classesAnalyzer = classesAnalyzer;
/*
@@ -67,7 +100,7 @@
projectMap.put( ArtifactUtils.versionlessKey( artifact ), artifact );
}
- mapArtifactFiles( dependencyTree.getRootNode(), projectMap );
+ mapArtifactFiles( dependencyTreeNode, projectMap );
}
/**
@@ -80,32 +113,134 @@
return project;
}
+ /**
+ * @return <code>true</code> if getProjectDependencies() is not empty, <code>false</code> otherwise.
+ */
public boolean hasDependencies()
{
- return ( projectDependencies != null ) && ( !this.projectDependencies.isEmpty() );
+ return ( getProjectDependencies() != null ) && ( !getProjectDependencies().isEmpty() );
}
+ /**
+ * @return a list of <code>Artifact</code> from the project.
+ */
public List getProjectDependencies()
{
- return new ArrayList( projectDependencies );
+ if ( projectDependencies != null )
+ {
+ return projectDependencies;
+ }
+
+ projectDependencies = new ArrayList();
+ for ( Iterator i = dependencyTreeNode.getChildren().iterator(); i.hasNext(); )
+ {
+ DependencyNode dependencyNode = (DependencyNode) i.next();
+
+ projectDependencies.add( dependencyNode.getArtifact() );
+ }
+
+ return projectDependencies;
}
+ /**
+ * @return a list of transitive <code>Artifact</code> from the project.
+ */
public List getTransitiveDependencies()
{
- List deps = new ArrayList( dependencyTree.getArtifacts() );
- deps.removeAll( projectDependencies );
- return deps;
+ if ( projectTransitiveDependencies != null )
+ {
+ return projectTransitiveDependencies;
+ }
+
+ projectTransitiveDependencies = new ArrayList( getAllDependencies() );
+ projectTransitiveDependencies.removeAll( getProjectDependencies() );
+
+ return projectTransitiveDependencies;
}
+ /**
+ * @return a list of included <code>Artifact</code> returned by the dependency tree.
+ */
public List getAllDependencies()
{
- return dependencyTree.getArtifacts();
+ if ( allDependencies != null )
+ {
+ return allDependencies;
+ }
+
+ allDependencies = new ArrayList();
+ for ( Iterator i = dependencyTreeNode.getChildren().iterator(); i.hasNext(); )
+ {
+ DependencyNode dependencyNode = (DependencyNode) i.next();
+
+ if ( dependencyNode.getState() != DependencyNode.INCLUDED )
+ {
+ continue;
+ }
+
+ if ( dependencyNode.getArtifact().getGroupId().equals( project.getGroupId() )
+ && dependencyNode.getArtifact().getArtifactId().equals( project.getArtifactId() )
+ && dependencyNode.getArtifact().getVersion().equals( project.getVersion() ) )
+ {
+ continue;
+ }
+
+ if ( !allDependencies.contains( dependencyNode.getArtifact() ) )
+ {
+ allDependencies.add( dependencyNode.getArtifact() );
+ }
+ getAllDependencies( dependencyNode );
+ }
+
+ return allDependencies;
}
- public Map getDependenciesByScope()
+ /**
+ * @param isTransitively <code>true</code> to return transitive dependencies, <code>false</code> otherwise.
+ * @return a map with supported scopes as key and a list of <code>Artifact</code> as values.
+ * @see Artifact#SCOPE_COMPILE
+ * @see Artifact#SCOPE_PROVIDED
+ * @see Artifact#SCOPE_RUNTIME
+ * @see Artifact#SCOPE_SYSTEM
+ * @see Artifact#SCOPE_TEST
+ */
+ public Map getDependenciesByScope( boolean isTransitively )
{
- Map dependenciesByScope = new HashMap();
- for ( Iterator i = getAllDependencies().iterator(); i.hasNext(); )
+ if ( isTransitively )
+ {
+ if ( transitiveDependenciesByScope != null )
+ {
+ return transitiveDependenciesByScope;
+ }
+
+ transitiveDependenciesByScope = new HashMap();
+ for ( Iterator i = getTransitiveDependencies().iterator(); i.hasNext(); )
+ {
+ Artifact artifact = (Artifact) i.next();
+
+ List multiValue = (List) transitiveDependenciesByScope.get( artifact.getScope() );
+ if ( multiValue == null )
+ {
+ multiValue = new ArrayList();
+ }
+
+ if ( !multiValue.contains( artifact ) )
+ {
+ multiValue.add( artifact );
+ }
+ transitiveDependenciesByScope.put( artifact.getScope(), multiValue );
+ }
+
+ return transitiveDependenciesByScope;
+ }
+
+ if ( dependenciesByScope != null )
+ {
+ return dependenciesByScope;
+ }
+
+ dependenciesByScope = new HashMap();
+ for ( Iterator i = getProjectDependencies().iterator(); i.hasNext(); )
{
Artifact artifact = (Artifact) i.next();
@@ -114,17 +249,37 @@
{
multiValue = new ArrayList();
}
- multiValue.add( artifact );
+
+ if ( !multiValue.contains( artifact ) )
+ {
+ multiValue.add( artifact );
+ }
dependenciesByScope.put( artifact.getScope(), multiValue );
}
+
return dependenciesByScope;
}
+ /**
+ * @param artifact
+ * @return the jardata object from the artifact
+ * @throws IOException if any
+ */
public JarData getJarDependencyDetails( Artifact artifact )
throws IOException
{
- JarAnalyzer jarAnalyzer = new JarAnalyzer( artifact.getFile() );
+ if ( dependencyDetails == null )
+ {
+ dependencyDetails = new HashMap();
+ }
+
+ JarData old = (JarData) dependencyDetails.get( artifact.getId() );
+ if ( dependencyDetails.get( artifact.getId() ) != null )
+ {
+ return old;
+ }
+ JarAnalyzer jarAnalyzer = new JarAnalyzer( artifact.getFile() );
try
{
classesAnalyzer.analyze( jarAnalyzer );
@@ -134,6 +289,8 @@
jarAnalyzer.closeQuietly();
}
+ dependencyDetails.put( artifact.getId(), jarAnalyzer.getJarData() );
+
return jarAnalyzer.getJarData();
}
@@ -163,4 +320,44 @@
mapArtifactFiles( anode, projectMap );
}
}
+
+ /**
+ * Recursive method to get all dependencies from a given <code>dependencyNode</code>
+ *
+ * @param dependencyNode not null
+ */
+ private void getAllDependencies( DependencyNode dependencyNode )
+ {
+ if ( dependencyNode == null || dependencyNode.getChildren() == null )
+ {
+ if ( !allDependencies.contains( dependencyNode.getArtifact() ) )
+ {
+ allDependencies.add( dependencyNode.getArtifact() );
+ }
+ return;
+ }
+
+ for ( Iterator i = dependencyNode.getChildren().iterator(); i.hasNext(); )
+ {
+ DependencyNode subdependencyNode = (DependencyNode) i.next();
+
+ if ( subdependencyNode.getState() != DependencyNode.INCLUDED )
+ {
+ continue;
+ }
+
+ if ( subdependencyNode.getArtifact().getGroupId().equals( project.getGroupId() )
+ && subdependencyNode.getArtifact().getArtifactId().equals( project.getArtifactId() )
+ && subdependencyNode.getArtifact().getVersion().equals( project.getVersion() ) )
+ {
+ continue;
+ }
+
+ if ( !allDependencies.contains( subdependencyNode.getArtifact() ) )
+ {
+ allDependencies.add( subdependencyNode.getArtifact() );
+ }
+ getAllDependencies( subdependencyNode );
+ }
+ }
}
Modified: maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/DependenciesReportConfiguration.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/DependenciesReportConfiguration.java?rev=682163&r1=682162&r2=682163&view=diff
==============================================================================
--- maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/DependenciesReportConfiguration.java (original)
+++ maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/DependenciesReportConfiguration.java Sun Aug 3 06:18:15 2008
@@ -20,6 +20,8 @@
*/
/**
+ * Wrap DependenciesReport Mojo parameters.
+ *
* @version $Id$
* @since 2.1
*/
@@ -29,21 +31,29 @@
private boolean dependencyLocationsEnabled;
+ /**
+ * @param detailsEnabled
+ * @param locationEnabled
+ */
public DependenciesReportConfiguration( boolean detailsEnabled, boolean locationEnabled )
{
this.dependencyDetailsEnabled = detailsEnabled;
this.dependencyLocationsEnabled = locationEnabled;
}
+ /**
+ * @return value of Mojo dependencyDetailsEnabled parameter.
+ */
public boolean getDependencyDetailsEnabled()
{
return dependencyDetailsEnabled;
}
+ /**
+ * @return value of Mojo dependencyLocationsEnabled parameter.
+ */
public boolean getDependencyLocationsEnabled()
{
- //TODO:
- // ( !settings.isOffline() && dependencyLocationsEnabled )
return dependencyLocationsEnabled;
}
}
Modified: maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/ManagementDependencies.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/ManagementDependencies.java?rev=682163&r1=682162&r2=682163&view=diff
==============================================================================
--- maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/ManagementDependencies.java (original)
+++ maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/ManagementDependencies.java Sun Aug 3 06:18:15 2008
@@ -30,32 +30,49 @@
/**
* @author Nick Stolwijk
- * @version $Id:$
+ * @version $Id$
* @since 2.1
*/
public class ManagementDependencies
{
- private final List projectDependencies;
+ private final List managementDependencies;
+ /**
+ * @param projectDependencies
+ */
public ManagementDependencies( List projectDependencies )
{
- this.projectDependencies = projectDependencies;
+ this.managementDependencies = projectDependencies;
}
+ /**
+ * @return <code>true</code> if managementDependencies is not null and not empty.
+ */
public boolean hasDependencies()
{
- return ( projectDependencies != null ) && ( !this.projectDependencies.isEmpty() );
+ return ( managementDependencies != null ) && ( !this.managementDependencies.isEmpty() );
}
- public List getProjectDependencies()
+ /**
+ * @return managementDependencies
+ */
+ public List getManagementDependencies()
{
- return new ArrayList( projectDependencies );
+ return new ArrayList( managementDependencies );
}
- public Map getDependenciesByScope()
+ /**
+ * @return the managementDependencies by scope
+ * @see Artifact#SCOPE_COMPILE
+ * @see Artifact#SCOPE_PROVIDED
+ * @see Artifact#SCOPE_RUNTIME
+ * @see Artifact#SCOPE_SYSTEM
+ * @see Artifact#SCOPE_TEST
+ */
+ public Map getManagementDependenciesByScope()
{
Map dependenciesByScope = new HashMap();
- for ( Iterator i = getProjectDependencies().iterator(); i.hasNext(); )
+ for ( Iterator i = getManagementDependencies().iterator(); i.hasNext(); )
{
Dependency dependency = (Dependency) i.next();
String scope = dependency.getScope() != null ? dependency.getScope() : Artifact.SCOPE_COMPILE;
Modified: maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java?rev=682163&r1=682162&r2=682163&view=diff
==============================================================================
--- maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java (original)
+++ maven/plugins/branches/maven-project-info-reports-plugin-doxia-beta-1/src/main/java/org/apache/maven/report/projectinfo/dependencies/RepositoryUtils.java Sun Aug 3 06:18:15 2008
@@ -20,9 +20,16 @@
*/
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.manager.WagonConfigurationException;
import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -42,38 +49,64 @@
import org.apache.maven.wagon.observers.Debug;
import org.apache.maven.wagon.proxy.ProxyInfo;
import org.apache.maven.wagon.repository.Repository;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.LoggerManager;
+import org.codehaus.plexus.util.StringUtils;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
/**
+ * Utilities methods to play with repository
+ *
* @version $Id$
* @since 2.1
*/
public class RepositoryUtils
{
- private Log log;
+ private final Log log;
- private WagonManager wagonManager;
+ private final LoggerManager loggerManager;
- private Settings settings;
+ private final WagonManager wagonManager;
- private MavenProjectBuilder mavenProjectBuilder;
+ private final Settings settings;
- private ArtifactFactory factory;
+ private final MavenProjectBuilder mavenProjectBuilder;
- private List remoteRepositories;
+ private final ArtifactFactory factory;
- private List pluginRepositories;
+ private final List remoteRepositories;
- private ArtifactResolver resolver;
+ private final List pluginRepositories;
- private ArtifactRepository localRepository;
+ private final ArtifactResolver resolver;
- public RepositoryUtils( WagonManager wagonManager, Settings settings, MavenProjectBuilder mavenProjectBuilder,
- ArtifactFactory factory, ArtifactResolver resolver, List remoteRepositories,
- List pluginRepositories, ArtifactRepository localRepository )
+ private final ArtifactRepository localRepository;
+
+ private final RepositoryMetadataManager repositoryMetadataManager;
+
+ /**
+ * @param log
+ * @param loggerManager
+ * @param wagonManager
+ * @param settings
+ * @param mavenProjectBuilder
+ * @param factory
+ * @param resolver
+ * @param remoteRepositories
+ * @param pluginRepositories
+ * @param localRepository
+ * @param repositoryMetadataManager
+ */
+ public RepositoryUtils( Log log, LoggerManager loggerManager, WagonManager wagonManager, Settings settings,
+ MavenProjectBuilder mavenProjectBuilder, ArtifactFactory factory,
+ ArtifactResolver resolver, List remoteRepositories, List pluginRepositories,
+ ArtifactRepository localRepository, RepositoryMetadataManager repositoryMetadataManager )
{
+ this.log = log;
+ this.loggerManager = loggerManager;
this.wagonManager = wagonManager;
this.settings = settings;
this.mavenProjectBuilder = mavenProjectBuilder;
@@ -82,64 +115,98 @@
this.remoteRepositories = remoteRepositories;
this.pluginRepositories = pluginRepositories;
this.localRepository = localRepository;
+ this.repositoryMetadataManager = repositoryMetadataManager;
}
- public void setLog( Log log )
- {
- this.log = log;
- }
-
+ /**
+ * @return localrepo
+ */
public ArtifactRepository getLocalRepository()
{
return localRepository;
}
+ /**
+ * @return remote artifact repo
+ */
public List getRemoteArtifactRepositories()
{
return remoteRepositories;
}
+ /**
+ * @return plugin artifact repo
+ */
public List getPluginArtifactRepositories()
{
return pluginRepositories;
}
+ /**
+ * @param artifact not null
+ * @throws ArtifactResolutionException if any
+ * @throws ArtifactNotFoundException if any
+ * @see ArtifactResolver#resolve(Artifact, List, ArtifactRepository)
+ */
public void resolve( Artifact artifact )
throws ArtifactResolutionException, ArtifactNotFoundException
{
- List remoteRepositories = new ArrayList();
- remoteRepositories.addAll( pluginRepositories );
- remoteRepositories.addAll( remoteRepositories );
+ List repos = new ArrayList();
+ repos.addAll( pluginRepositories );
+ repos.addAll( remoteRepositories );
- resolver.resolve( artifact, remoteRepositories, localRepository );
+ resolver.resolveAlways( artifact, repos, localRepository );
}
+ /**
+ * @param repo not null
+ * @param artifact not null
+ * @return <code>true</code> if the artifact exists in the given repo, <code>false</code> otherwise or if
+ * the repo is blacklisted.
+ */
public boolean dependencyExistsInRepo( ArtifactRepository repo, Artifact artifact )
{
- Wagon wagon;
+ if ( repo.isBlacklisted() )
+ {
+ if ( log.isDebugEnabled() )
+ {
+ log.debug( "The repo '" + repo.getId() + "' is black listed - Ignored it" );
+ }
+ return false;
+ }
+
+ String id = repo.getId();
+ Repository repository = new Repository( id, repo.getUrl() );
+ Wagon wagon;
try
{
- wagon = wagonManager.getWagon( repo.getProtocol() );
+ wagon = wagonManager.getWagon( repository );
}
catch ( UnsupportedProtocolException e )
{
log.error( "Unsupported protocol: '" + repo.getProtocol() + "'", e );
return false;
}
+ catch ( WagonConfigurationException e )
+ {
+ log.error( "Unsupported protocol: '" + repo.getProtocol() + "'", e );
+ return false;
+ }
- try
+ if ( log.isDebugEnabled() )
{
Debug debug = new Debug();
wagon.addSessionListener( debug );
wagon.addTransferListener( debug );
+ }
- String id = repo.getId();
- Repository repository = new Repository( id, repo.getUrl() );
+ try
+ {
AuthenticationInfo auth = wagonManager.getAuthenticationInfo( repo.getId() );
- ProxyInfo proxyInfo = getProxyInfo( settings );
+ ProxyInfo proxyInfo = getProxyInfo();
if ( proxyInfo != null )
{
wagon.connect( repository, auth, proxyInfo );
@@ -148,26 +215,56 @@
{
wagon.connect( repository, auth );
}
- return ( wagon.resourceExists( repo.pathOf( artifact ) ) );
+
+ return wagon.resourceExists( StringUtils.replace( getDependencyUrlFromRepository( artifact, repo ),
+ repo.getUrl(), "" ) );
}
catch ( ConnectionException e )
{
- log.error( "Unable to connect to: " + repo.getUrl(), e );
+ if ( log.isDebugEnabled() )
+ {
+ log.error( "Unable to connect to: " + repo.getUrl(), e );
+ }
+ else
+ {
+ log.error( "Unable to connect to: " + repo.getUrl() );
+ }
return false;
}
catch ( AuthenticationException e )
{
- log.error( "Unable to connect to: " + repo.getUrl(), e );
+ if ( log.isDebugEnabled() )
+ {
+ log.error( "Unable to connect to: " + repo.getUrl(), e );
+ }
+ else
+ {
+ log.error( "Unable to connect to: " + repo.getUrl() );
+ }
return false;
}
catch ( TransferFailedException e )
{
- log.error( "Unable to determine if resource " + artifact + " exists in " + repo.getUrl(), e );
+ if ( log.isDebugEnabled() )
+ {
+ log.error( "Unable to determine if resource " + artifact + " exists in " + repo.getUrl(), e );
+ }
+ else
+ {
+ log.error( "Unable to determine if resource " + artifact + " exists in " + repo.getUrl() );
+ }
return false;
}
catch ( AuthorizationException e )
{
- log.error( "Unable to connect to: " + repo.getUrl(), e );
+ if ( log.isDebugEnabled() )
+ {
+ log.error( "Unable to connect to: " + repo.getUrl(), e );
+ }
+ else
+ {
+ log.error( "Unable to connect to: " + repo.getUrl() );
+ }
return false;
}
catch ( AbstractMethodError e )
@@ -183,19 +280,145 @@
}
catch ( ConnectionException e )
{
- log.error( "Error disconnecting wagon - ignored", e );
+ if ( log.isDebugEnabled() )
+ {
+ log.error( "Error disconnecting wagon - ignored", e );
+ }
+ else
+ {
+ log.error( "Error disconnecting wagon - ignored" );
+ }
+ }
+ }
+ }
+
+ /**
+ * Get the <code>Maven project</code> from the repository depending the <code>Artifact</code> given.
+ *
+ * @param artifact an artifact
+ * @return the Maven project for the given artifact
+ * @throws ProjectBuildingException if any
+ */
+ public MavenProject getMavenProjectFromRepository( Artifact artifact )
+ throws ProjectBuildingException
+ {
+ Artifact projectArtifact = artifact;
+
+ boolean allowStubModel = false;
+ if ( !"pom".equals( artifact.getType() ) )
+ {
+ projectArtifact = factory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(),
+ artifact.getVersion(), artifact.getScope() );
+ allowStubModel = true;
+ }
+
+ // TODO: we should use the MavenMetadataSource instead
+ return mavenProjectBuilder.buildFromRepository( projectArtifact, remoteRepositories, localRepository,
+ allowStubModel );
+ }
+
+ /**
+ * @param artifact not null
+ * @param repo not null
+ * @return the artifact url in the given repo for the given artifact. If it is a snapshot artifact, the version
+ * will be the timestamp and the build number from the metadata. Could return null if the repo is blacklisted.
+ */
+ public String getDependencyUrlFromRepository( Artifact artifact, ArtifactRepository repo )
+ {
+ if ( repo.isBlacklisted() )
+ {
+ return null;
+ }
+
+ Artifact copyArtifact = ArtifactUtils.copyArtifact( artifact );
+ // Try to get the last artifact repo name depending the snapshot version
+ if ( ( artifact.isSnapshot() && repo.getSnapshots().isEnabled() ) )
+ {
+ if ( artifact.getBaseVersion().equals( artifact.getVersion() ))
+ {
+ // Try to resolve it if not already done
+ if ( artifact.getMetadataList() == null || artifact.getMetadataList().isEmpty() )
+ {
+ try
+ {
+ resolve( artifact );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ log.error( "Artifact: " + artifact.getId() + " could not be resolved." );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ log.error( "Artifact: " + artifact.getId() + " was not found." );
+ }
+ }
+
+ for ( Iterator it = artifact.getMetadataList().iterator(); it.hasNext(); )
+ {
+ ArtifactMetadata m = (ArtifactMetadata) it.next();
+
+ if ( m instanceof SnapshotArtifactRepositoryMetadata )
+ {
+ SnapshotArtifactRepositoryMetadata snapshotMetadata = (SnapshotArtifactRepositoryMetadata) m;
+
+ // Removed not found log
+ int oldThreshold = loggerManager.getThreshold();
+ loggerManager.setThreshold( RepositoryMetadataManager.class.getName(), Logger.LEVEL_DISABLED );
+ try
+ {
+ repositoryMetadataManager.resolveAlways( snapshotMetadata, localRepository, repo );
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ loggerManager.setThreshold( RepositoryMetadataManager.class.getName(), oldThreshold );
+ if ( log.isDebugEnabled() )
+ {
+ log.error( "Unable to connect to: " + repo.getUrl(), e );
+ }
+ else
+ {
+ log.error( "Unable to connect to: " + repo.getUrl() );
+ }
+ return repo.getUrl() + "/" + repo.pathOf( copyArtifact );
+ }
+ finally
+ {
+ loggerManager.setThreshold( RepositoryMetadataManager.class.getName(), oldThreshold );
+ }
+
+ Metadata metadata = snapshotMetadata.getMetadata();
+ if ( metadata.getVersioning() == null || metadata.getVersioning().getSnapshot() == null
+ || metadata.getVersioning().getSnapshot().isLocalCopy()
+ || metadata.getVersioning().getSnapshot().getTimestamp() == null )
+ {
+ continue;
+ }
+
+ // create the version according SnapshotTransformation
+ String version =
+ StringUtils.replace( copyArtifact.getVersion(), Artifact.SNAPSHOT_VERSION,
+ metadata.getVersioning().getSnapshot().getTimestamp() )
+ + "-" + metadata.getVersioning().getSnapshot().getBuildNumber();
+ copyArtifact.setVersion( version );
+ }
+ }
}
}
+
+ return repo.getUrl() + "/" + repo.pathOf( copyArtifact );
}
+ // ----------------------------------------------------------------------
+ // Private methods
+ // ----------------------------------------------------------------------
+
/**
* Convenience method to map a <code>Proxy</code> object from the user system settings to a <code>ProxyInfo</code>
* object.
*
- * @param settings the system settings
- * @return a proxyInfo object instancied or null if no active proxy is define in the settings.xml
+ * @return a proxyInfo object instanced or null if no active proxy is define in the settings.xml
*/
- public ProxyInfo getProxyInfo( Settings settings )
+ private ProxyInfo getProxyInfo()
{
ProxyInfo proxyInfo = null;
if ( settings != null && settings.getActiveProxy() != null )
@@ -213,31 +436,4 @@
return proxyInfo;
}
-
- /**
- * Get the <code>Maven project</code> from the repository depending the <code>Artifact</code> given.
- *
- * @param artifact an artifact
- * @param localRepository the local repository
- * @return the Maven project for the given artifact
- * @throws org.apache.maven.project.ProjectBuildingException
- * if any
- */
- public MavenProject getMavenProjectFromRepository( Artifact artifact, ArtifactRepository localRepository )
- throws ProjectBuildingException
- {
- Artifact projectArtifact = artifact;
-
- boolean allowStubModel = false;
- if ( !"pom".equals( artifact.getType() ) )
- {
- projectArtifact = factory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(),
- artifact.getVersion(), artifact.getScope() );
- allowStubModel = true;
- }
-
- // TODO: we should use the MavenMetadataSource instead
- return mavenProjectBuilder.buildFromRepository( projectArtifact, remoteRepositories, localRepository,
- allowStubModel );
- }
}