MNG-411: Adding more reports: cim, issuetracking,license, scm and teamlist

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@219836 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Vincent Siveton 2005-07-20 03:01:56 +00:00
parent 33b34579e1
commit 3ced3f960f
38 changed files with 3548 additions and 259 deletions

View File

@ -30,6 +30,13 @@
<packaging>maven-plugin</packaging>
<name>Maven Project Info Reports Plugin</name>
<inceptionYear>2005</inceptionYear>
<dependencies>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.1.4</version>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>

View File

@ -0,0 +1,287 @@
package org.apache.maven.report.projectinfo;
/*
* Copyright 2004-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.model.CiManagement;
import org.apache.maven.model.Model;
import org.apache.maven.model.Notifier;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.doxia.sink.Sink;
import org.codehaus.doxia.site.renderer.SiteRenderer;
import org.codehaus.plexus.util.StringUtils;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
/**
* Generates the Project Continuous Integration System report.
*
* @goal cim
*
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton </a>
* @version $Id$
*/
public class CimReport
extends AbstractMavenReport
{
/**
* @parameter expression="${project.build.directory}/site"
* @required
*/
private String outputDirectory;
/**
* @parameter expression="${component.org.codehaus.doxia.site.renderer.SiteRenderer}"
* @required
* @readonly
*/
private SiteRenderer siteRenderer;
/**
* @parameter expression="${project}"
* @required
* @readonly
*/
private MavenProject project;
/**
* @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
*/
public String getName( Locale locale )
{
return getBundle( locale ).getString( "report.cim.name" );
}
/**
* @see org.apache.maven.reporting.MavenReport#getCategoryName()
*/
public String getCategoryName()
{
return CATEGORY_PROJECT_INFORMATION;
}
/**
* @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
*/
public String getDescription( Locale locale )
{
return getBundle( locale ).getString( "report.cim.description" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
*/
protected String getOutputDirectory()
{
return outputDirectory;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getProject()
*/
protected MavenProject getProject()
{
return project;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
*/
protected SiteRenderer getSiteRenderer()
{
return siteRenderer;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
*/
public void executeReport( Locale locale )
throws MavenReportException
{
try
{
CimRenderer r = new CimRenderer( getSink(), getProject().getModel(), locale );
r.render();
}
catch ( IOException e )
{
throw new MavenReportException( "Can't write the report " + getOutputName(), e );
}
}
/**
* @see org.apache.maven.reporting.MavenReport#getOutputName()
*/
public String getOutputName()
{
return "integration";
}
static class CimRenderer
extends AbstractMavenReportRenderer
{
private Model model;
private Locale locale;
public CimRenderer( Sink sink, Model model, Locale locale )
{
super( sink );
this.model = model;
this.locale = locale;
}
/**
* @see org.apache.maven.reporting.MavenReportRenderer#getTitle()
*/
public String getTitle()
{
return getBundle( locale ).getString( "report.cim.title" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReportRenderer#renderBody()
*/
public void renderBody()
{
CiManagement cim = model.getCiManagement();
if ( cim == null )
{
startSection( getTitle() );
paragraph( getBundle( locale ).getString( "report.cim.nocim" ) );
endSection();
return;
}
String system = cim.getSystem();
String url = cim.getUrl();
List notifiers = cim.getNotifiers();
// Overview
startSection( getBundle( locale ).getString( "report.cim.overview.title" ) );
if ( isCimSystem( system, "continuum" ) )
{
linkPatternedText( getBundle( locale ).getString( "report.cim.continuum.intro" ) );
}
else if ( isCimSystem( system, "bugzilla" ) )
{
linkPatternedText( getBundle( locale ).getString( "report.cim.bugzilla.intro" ) );
}
else
{
linkPatternedText( getBundle( locale ).getString( "report.cim.general.intro" ) );
}
endSection();
// Access
startSection( getBundle( locale ).getString( "report.cim.access" ) );
if ( !StringUtils.isEmpty( url ) )
{
paragraph( getBundle( locale ).getString( "report.cim.url" ) );
verbatimLink( url, url );
}
else
{
paragraph( getBundle( locale ).getString( "report.cim.nourl" ) );
}
endSection();
// Notifiers
startSection( getBundle( locale ).getString( "report.cim.notifiers.title" ) );
if ( ( notifiers == null ) || ( notifiers.isEmpty() ) )
{
paragraph( getBundle( locale ).getString( "report.cim.notifiers.nolist" ) );
}
else
{
startTable();
tableCaption( getBundle( locale ).getString( "report.cim.notifiers.intro" ) );
String type = getBundle( locale ).getString( "report.cim.notifiers.column.type" );
String address = getBundle( locale ).getString( "report.cim.notifiers.column.address" );
String configuration = getBundle( locale ).getString( "report.cim.notifiers.column.configuration" );
tableHeader( new String[] { type, address, configuration } );
for ( Iterator i = notifiers.iterator(); i.hasNext(); )
{
Notifier notifier = (Notifier) i.next();
tableRow( new String[] {
notifier.getType(),
createLinkPatternedText( notifier.getAddress(), notifier.getAddress() ),
propertiesToString( notifier.getConfiguration() ) } );
}
endTable();
}
endSection();
}
/**
* Checks if a CIM system is bugzilla, continium...
*
* @return true if the CIM system is bugzilla, continium..., false
* otherwise.
*/
private boolean isCimSystem( String connection, String cim )
{
if ( StringUtils.isEmpty( connection ) )
{
return false;
}
if ( StringUtils.isEmpty( cim ) )
{
return false;
}
if ( connection.toLowerCase().startsWith( cim.toLowerCase() ) )
{
return true;
}
return false;
}
}
private static ResourceBundle getBundle( Locale locale )
{
return ResourceBundle.getBundle( "project-info-report", locale, CimReport.class.getClassLoader() );
}
}

View File

@ -17,15 +17,19 @@
*/
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.model.Dependency;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.doxia.sink.Sink;
import org.codehaus.doxia.site.renderer.SiteRenderer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@ -34,12 +38,13 @@
import java.util.Set;
/**
* Generates the dependencies report.
*
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
* @version $Id$
* Generates the Project Dependencies report.
*
* @goal dependencies
*
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton </a>
* @version $Id$
* @plexus.component
*/
public class DependenciesReport
@ -65,6 +70,20 @@ public class DependenciesReport
*/
private MavenProject project;
/**
* @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
* @required
* @readonly
*/
private ArtifactFactory artifactFactory;
/**
* @parameter expression="${component.org.apache.maven.project.MavenProjectBuilder}"
* @required
* @readonly
*/
private MavenProjectBuilder mavenProjectBuilder;
/**
* @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
*/
@ -106,7 +125,7 @@ protected MavenProject getProject()
}
/**
* @see AbstractMavenReport#getSiteRenderer()
* @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
*/
protected SiteRenderer getSiteRenderer()
{
@ -121,7 +140,8 @@ public void executeReport( Locale locale )
{
try
{
DependenciesRenderer r = new DependenciesRenderer( getSink(), getProject(), locale );
DependenciesRenderer r = new DependenciesRenderer( getSink(), getProject(), locale, mavenProjectBuilder,
artifactFactory );
r.render();
}
@ -146,13 +166,22 @@ static class DependenciesRenderer
private Locale locale;
public DependenciesRenderer( Sink sink, MavenProject project, Locale locale )
private ArtifactFactory artifactFactory;
private MavenProjectBuilder mavenProjectBuilder;
public DependenciesRenderer( Sink sink, MavenProject project, Locale locale,
MavenProjectBuilder mavenProjectBuilder, ArtifactFactory artifactFactory )
{
super( sink );
this.project = project;
this.locale = locale;
this.mavenProjectBuilder = mavenProjectBuilder;
this.artifactFactory = artifactFactory;
}
public String getTitle()
@ -162,124 +191,175 @@ public String getTitle()
public void renderBody()
{
startSection( getTitle() );
// Dependencies report
List dependencies = project.getDependencies();
if ( dependencies.isEmpty() )
if ( ( dependencies == null ) || ( dependencies.isEmpty() ) )
{
startSection( getTitle() );
// TODO: should the report just be excluded?
paragraph( getBundle( locale ).getString( "report.dependencies.nolist" ) );
endSection();
return;
}
startSection( getTitle() );
startTable();
tableCaption( getBundle( locale ).getString( "report.dependencies.intro" ) );
String groupId = getBundle( locale ).getString( "report.dependencies.column.groupId" );
String artifactId = getBundle( locale ).getString( "report.dependencies.column.artifactId" );
String version = getBundle( locale ).getString( "report.dependencies.column.version" );
String description = getBundle( locale ).getString( "report.dependencies.column.description" );
String url = getBundle( locale ).getString( "report.dependencies.column.url" );
tableHeader( new String[] { groupId, artifactId, version, description, url } );
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
{
Dependency dependency = (Dependency) i.next();
Artifact artifact = artifactFactory.createArtifact( dependency.getGroupId(),
dependency.getArtifactId(),
dependency.getVersion(), dependency.getScope(),
dependency.getType() );
MavenProject artifactProject = null;
try
{
artifactProject = getMavenProjectFromRepository( artifact );
}
catch ( ProjectBuildingException e )
{
throw new IllegalArgumentException(
"Can't find a valid Maven project in the repository for the artifact ["
+ artifact + "]." );
}
tableRow( new String[] {
dependency.getGroupId(),
dependency.getArtifactId(),
dependency.getVersion(),
artifactProject.getDescription(),
createLinkPatternedText( artifactProject.getUrl(), artifactProject.getUrl() ) } );
}
endTable();
endSection();
// Transitive dependencies
Set artifacts = getTransitiveDependencies( project );
startSection( getBundle( locale ).getString( "report.transitivedependencies.title" ) );
if ( artifacts.isEmpty() )
{
paragraph( getBundle( locale ).getString( "report.transitivedependencies.nolist" ) );
}
else
{
startTable();
tableCaption( getBundle( locale ).getString( "report.dependencies.intro" ) );
tableCaption( getBundle( locale ).getString( "report.transitivedependencies.intro" ) );
String groupId = getBundle( locale ).getString( "report.dependencies.column.groupId" );
String artifactId = getBundle( locale ).getString( "report.dependencies.column.artifactId" );
String version = getBundle( locale ).getString( "report.dependencies.column.version" );
tableHeader( new String[] { groupId, artifactId, version, description, url } );
tableHeader( new String[]{groupId, artifactId, version} );
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
for ( Iterator i = artifacts.iterator(); i.hasNext(); )
{
Dependency d = (Dependency) i.next();
Artifact artifact = (Artifact) i.next();
tableRow( new String[]{d.getGroupId(), d.getArtifactId(), d.getVersion()} );
MavenProject artifactProject = null;
try
{
artifactProject = getMavenProjectFromRepository( artifact );
}
catch ( ProjectBuildingException e )
{
throw new IllegalArgumentException(
"Can't find a valid Maven project in the repository for the artifact ["
+ artifact + "]." );
}
System.out.println( "nklj-----------------------------" );
System.out.println( artifactProject.getUrl() );
tableRow( new String[] {
artifact.getGroupId(),
artifact.getArtifactId(),
artifact.getVersion(),
artifactProject.getDescription(),
createLinkPatternedText( artifactProject.getUrl(), artifactProject.getUrl() ) } );
}
endTable();
}
endSection();
// Transitive dependencies
if ( !dependencies.isEmpty() )
{
Set artifacts = getTransitiveDependencies( project );
startSection( getBundle( locale ).getString( "report.transitivedependencies.title" ) );
if ( artifacts.isEmpty() )
{
// TODO: should the report just be excluded?
paragraph( getBundle( locale ).getString( "report.transitivedependencies.nolist" ) );
}
else
{
startTable();
tableCaption( getBundle( locale ).getString( "report.transitivedependencies.intro" ) );
String groupId = getBundle( locale ).getString( "report.transitivedependencies.column.groupId" );
String artifactId = getBundle( locale ).getString(
"report.transitivedependencies.column.artifactId" );
String version = getBundle( locale ).getString( "report.transitivedependencies.column.version" );
tableHeader( new String[]{groupId, artifactId, version} );
for ( Iterator i = artifacts.iterator(); i.hasNext(); )
{
Artifact artifact = (Artifact) i.next();
tableRow(
new String[]{artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion()} );
}
endTable();
}
endSection();
}
}
/**
* Return a set of artifact which are not already present in the dependencies list.
*
* @param project a Maven project
* @return a set of transitive dependencies
* @todo check if this works with version ranges
* Return a set of <code>Artifacts</code> which are not already
* present in the dependencies list.
*
* @param project
* a Maven project
* @return a set of transitive dependencies as artifacts
*/
private Set getTransitiveDependencies( MavenProject project )
{
Set result = new HashSet();
if ( project.getDependencies() == null || project.getArtifacts() == null )
{
return result;
}
Set transitiveDependencies = new HashSet();
List dependencies = project.getDependencies();
Set artifacts = project.getArtifacts();
if ( ( dependencies == null ) || ( artifacts == null ) )
{
return transitiveDependencies;
}
List dependenciesAsArtifacts = new ArrayList( dependencies.size() );
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
{
Dependency dependency = (Dependency) i.next();
Artifact artifact = artifactFactory.createArtifact( dependency.getGroupId(),
dependency.getArtifactId(),
dependency.getVersion(), dependency.getScope(),
dependency.getType() );
dependenciesAsArtifacts.add( artifact );
}
for ( Iterator j = artifacts.iterator(); j.hasNext(); )
{
Artifact artifact = (Artifact) j.next();
boolean toadd = true;
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
if ( !dependenciesAsArtifacts.contains( artifact ) )
{
Dependency dependency = (Dependency) i.next();
if ( artifact.getArtifactId().equals( dependency.getArtifactId() ) &&
artifact.getGroupId().equals( dependency.getGroupId() ) &&
artifact.getVersion().equals( dependency.getVersion() ) )
{
toadd = false;
break;
}
}
if ( toadd )
{
result.add( artifact );
transitiveDependencies.add( artifact );
}
}
return result;
return transitiveDependencies;
}
/**
* 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
*/
private MavenProject getMavenProjectFromRepository( Artifact artifact )
throws ProjectBuildingException
{
return mavenProjectBuilder.buildFromRepository( artifact, project.getRepositories(), artifact
.getRepository() );
}
}
@ -287,4 +367,4 @@ private static ResourceBundle getBundle( Locale locale )
{
return ResourceBundle.getBundle( "project-info-report", locale, DependenciesReport.class.getClassLoader() );
}
}
}

View File

@ -0,0 +1,245 @@
package org.apache.maven.report.projectinfo;
/*
* Copyright 2004-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.model.IssueManagement;
import org.apache.maven.model.Model;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.doxia.sink.Sink;
import org.codehaus.doxia.site.renderer.SiteRenderer;
import org.codehaus.plexus.util.StringUtils;
import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* Generates the Project Issue Tracking report.
*
* @goal issue-tracking
*
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton </a>
* @version $Id$
*/
public class IssueTrackingReport
extends AbstractMavenReport
{
/**
* @parameter expression="${project.build.directory}/site"
* @required
*/
private String outputDirectory;
/**
* @parameter expression="${component.org.codehaus.doxia.site.renderer.SiteRenderer}"
* @required
* @readonly
*/
private SiteRenderer siteRenderer;
/**
* @parameter expression="${project}"
* @required
* @readonly
*/
private MavenProject project;
/**
* @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
*/
public String getName( Locale locale )
{
return getBundle( locale ).getString( "report.issuetracking.name" );
}
/**
* @see org.apache.maven.reporting.MavenReport#getCategoryName()
*/
public String getCategoryName()
{
return CATEGORY_PROJECT_INFORMATION;
}
/**
* @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
*/
public String getDescription( Locale locale )
{
return getBundle( locale ).getString( "report.issuetracking.description" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
*/
protected String getOutputDirectory()
{
return outputDirectory;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getProject()
*/
protected MavenProject getProject()
{
return project;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
*/
protected SiteRenderer getSiteRenderer()
{
return siteRenderer;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
*/
public void executeReport( Locale locale )
throws MavenReportException
{
try
{
IssueTrackingRenderer r = new IssueTrackingRenderer( getSink(), getProject().getModel(), locale );
r.render();
}
catch ( IOException e )
{
throw new MavenReportException( "Can't write the report " + getOutputName(), e );
}
}
/**
* @see org.apache.maven.reporting.MavenReport#getOutputName()
*/
public String getOutputName()
{
return "issue-tracking";
}
static class IssueTrackingRenderer
extends AbstractMavenReportRenderer
{
private Model model;
private Locale locale;
public IssueTrackingRenderer( Sink sink, Model model, Locale locale )
{
super( sink );
this.model = model;
this.locale = locale;
}
/**
* @see org.apache.maven.reporting.MavenReportRenderer#getTitle()
*/
public String getTitle()
{
return getBundle( locale ).getString( "report.issuetracking.title" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReportRenderer#renderBody()
*/
public void renderBody()
{
IssueManagement issueManagement = model.getIssueManagement();
if ( issueManagement == null )
{
startSection( getTitle() );
paragraph( getBundle( locale ).getString( "report.issuetracking.noissueManagement" ) );
endSection();
return;
}
String system = issueManagement.getSystem();
String url = issueManagement.getUrl();
// Overview
startSection( getBundle( locale ).getString( "report.issuetracking.overview.title" ) );
if ( isIssueManagementSystem( system, "jira" ) )
{
linkPatternedText( getBundle( locale ).getString( "report.issuetracking.jira.intro" ) );
}
else if ( isIssueManagementSystem( system, "bugzilla" ) )
{
linkPatternedText( getBundle( locale ).getString( "report.issuetracking.bugzilla.intro" ) );
}
else if ( isIssueManagementSystem( system, "scarab" ) )
{
linkPatternedText( getBundle( locale ).getString( "report.issuetracking.scarab.intro" ) );
}
else
{
paragraph( getBundle( locale ).getString( "report.issuetracking.general.intro" ) );
}
endSection();
// Connection
startSection( getTitle() );
paragraph( getBundle( locale ).getString( "report.issuetracking.intro" ) );
verbatimLink( url, url );
endSection();
}
/**
* Checks if a issue management system is Jira, bugzilla...
*
* @return true if the issue management system is Jira, bugzilla, false
* otherwise.
*/
private boolean isIssueManagementSystem( String system, String im )
{
if ( StringUtils.isEmpty( system ) )
{
return false;
}
if ( StringUtils.isEmpty( im ) )
{
return false;
}
if ( system.toLowerCase().startsWith( im.toLowerCase() ) )
{
return true;
}
return false;
}
}
private static ResourceBundle getBundle( Locale locale )
{
return ResourceBundle.getBundle( "project-info-report", locale, IssueTrackingReport.class.getClassLoader() );
}
}

View File

@ -0,0 +1,279 @@
package org.apache.maven.report.projectinfo;
/*
* Copyright 2004-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.commons.validator.UrlValidator;
import org.apache.maven.model.License;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.doxia.sink.Sink;
import org.codehaus.doxia.site.renderer.SiteRenderer;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.StringUtils;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
/**
* Generates the Project License report.
*
* @goal license
*
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton </a>
* @version $Id$
*/
public class LicenseReport
extends AbstractMavenReport
{
/**
* @parameter expression="${project.build.directory}/site"
* @required
*/
private String outputDirectory;
/**
* @parameter expression="${component.org.codehaus.doxia.site.renderer.SiteRenderer}"
* @required
* @readonly
*/
private SiteRenderer siteRenderer;
/**
* @parameter expression="${project}"
* @required
* @readonly
*/
private MavenProject project;
/**
* @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
*/
public String getName( Locale locale )
{
return getBundle( locale ).getString( "report.license.name" );
}
/**
* @see org.apache.maven.reporting.MavenReport#getCategoryName()
*/
public String getCategoryName()
{
return CATEGORY_PROJECT_INFORMATION;
}
/**
* @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
*/
public String getDescription( Locale locale )
{
return getBundle( locale ).getString( "report.license.description" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
*/
protected String getOutputDirectory()
{
return outputDirectory;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getProject()
*/
protected MavenProject getProject()
{
return project;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
*/
protected SiteRenderer getSiteRenderer()
{
return siteRenderer;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
*/
public void executeReport( Locale locale )
throws MavenReportException
{
try
{
LicenseRenderer r = new LicenseRenderer( getSink(), getProject(), locale );
r.render();
}
catch ( IOException e )
{
throw new MavenReportException( "Can't write the report " + getOutputName(), e );
}
}
/**
* @see org.apache.maven.reporting.MavenReport#getOutputName()
*/
public String getOutputName()
{
return "license";
}
static class LicenseRenderer
extends AbstractMavenReportRenderer
{
private MavenProject project;
private Locale locale;
public LicenseRenderer( Sink sink, MavenProject project, Locale locale )
{
super( sink );
this.project = project;
this.locale = locale;
}
/**
* @see org.apache.maven.reporting.MavenReportRenderer#getTitle()
*/
public String getTitle()
{
return getBundle( locale ).getString( "report.license.title" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReportRenderer#renderBody()
*/
public void renderBody()
{
List licenses = project.getModel().getLicenses();
if ( licenses.isEmpty() )
{
startSection( getTitle() );
paragraph( getBundle( locale ).getString( "report.license.nolicense" ) );
endSection();
return;
}
// Overview
startSection( getBundle( locale ).getString( "report.license.overview.title" ) );
paragraph( getBundle( locale ).getString( "report.license.overview.intro" ) );
endSection();
// License
startSection( getBundle( locale ).getString( "report.license.title" ) );
for ( Iterator i = licenses.iterator(); i.hasNext(); )
{
License license = (License) i.next();
String name = license.getName();
String url = license.getUrl();
String distribution = license.getDistribution();
String comments = license.getComments();
String licenseContent = null;
URL licenseUrl = null;
UrlValidator urlValidator = new UrlValidator( UrlValidator.ALLOW_ALL_SCHEMES );
if ( urlValidator.isValid( url ) )
{
try
{
licenseUrl = new URL( url );
}
catch ( MalformedURLException e )
{
throw new MissingResourceException( "The license url [" + url + "] seems to be invalid: "
+ e.getMessage(), null, null );
}
}
else
{
File licenseFile = new File( project.getBasedir(), url );
if ( !licenseFile.exists() )
{
throw new MissingResourceException( "Maven can't find the file " + licenseFile
+ " on the system.", null, null );
}
try
{
licenseUrl = licenseFile.toURL();
}
catch ( MalformedURLException e )
{
throw new MissingResourceException( "The license url [" + url + "] seems to be invalid: "
+ e.getMessage(), null, null );
}
}
InputStream in = null;
try
{
in = licenseUrl.openStream();
// All licenses are supposed in English...
licenseContent = IOUtil.toString( in, "ISO-8859-1" );
}
catch ( IOException e )
{
throw new MissingResourceException( "Can't read the url [" + url + "] : " + e.getMessage(), null,
null );
}
finally
{
IOUtil.close( in );
}
startSection( name );
if ( !StringUtils.isEmpty( comments ) )
{
paragraph( comments );
}
verbatimText( licenseContent );
endSection();
}
endSection();
}
}
private static ResourceBundle getBundle( Locale locale )
{
return ResourceBundle.getBundle( "project-info-report", locale, LicenseReport.class.getClassLoader() );
}
}

View File

@ -24,6 +24,7 @@
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.doxia.sink.Sink;
import org.codehaus.doxia.site.renderer.SiteRenderer;
import org.codehaus.plexus.util.StringUtils;
import java.io.IOException;
import java.util.ArrayList;
@ -33,8 +34,8 @@
import java.util.ResourceBundle;
/**
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
* @author <a href="mailto:brett@apache.org">Brett Porter </a>
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton </a>
* @version $Id$
* @goal mailing-list
*/
@ -154,7 +155,6 @@ public MailingListsRenderer( Sink sink, Model model, Locale locale )
/**
* @see org.apache.maven.reporting.MavenReportRenderer#getTitle()
*/
// How to i18n these ...
public String getTitle()
{
return getBundle( locale ).getString( "report.mailing-lists.title" );
@ -165,200 +165,145 @@ public String getTitle()
*/
public void renderBody()
{
startSection( getTitle() );
List mailingLists = model.getMailingLists();
if ( model.getMailingLists().isEmpty() )
if ( ( mailingLists == null ) || ( mailingLists.isEmpty() ) )
{
startSection( getTitle() );
// TODO: should the report just be excluded?
paragraph( getBundle( locale ).getString( "report.mailing-lists.nolist" ) );
endSection();
return;
}
startSection( getTitle() );
paragraph( getBundle( locale ).getString( "report.mailing-lists.intro" ) );
startTable();
// To beautify the display with other archives
boolean otherArchives = false;
for ( Iterator i = mailingLists.iterator(); i.hasNext(); )
{
MailingList m = (MailingList) i.next();
if ( ( ( m.getOtherArchives() != null ) ) && ( !m.getOtherArchives().isEmpty() ) )
{
otherArchives = true;
}
}
String name = getBundle( locale ).getString( "report.mailing-lists.column.name" );
String subscribe = getBundle( locale ).getString( "report.mailing-lists.column.subscribe" );
String unsubscribe = getBundle( locale ).getString( "report.mailing-lists.column.unsubscribe" );
String post = getBundle( locale ).getString( "report.mailing-lists.column.post" );
String archive = getBundle( locale ).getString( "report.mailing-lists.column.archive" );
String archivesOther = getBundle( locale ).getString( "report.mailing-lists.column.otherArchives" );
if ( otherArchives )
{
tableHeader( new String[] { name, subscribe, unsubscribe, post, archive, archivesOther } );
}
else
{
paragraph( getBundle( locale ).getString( "report.mailing-lists.intro" ) );
tableHeader( new String[] { name, subscribe, unsubscribe, post, archive } );
}
startTable();
for ( Iterator i = model.getMailingLists().iterator(); i.hasNext(); )
{
MailingList mailingList = (MailingList) i.next();
// To beautify the display
boolean otherArchives = false;
List textRow = new ArrayList();
for ( Iterator i = model.getMailingLists().iterator(); i.hasNext(); )
// Validate here subsribe/unsubsribe lists and archives?
textRow.add( mailingList.getName() );
textRow.add( createLinkPatternedText( subscribe, mailingList.getSubscribe() ) );
textRow.add( createLinkPatternedText( unsubscribe, mailingList.getUnsubscribe() ) );
textRow.add( createLinkPatternedText( post, mailingList.getPost() ) );
textRow.add( createLinkPatternedText( getArchiveServer( mailingList.getArchive() ), mailingList
.getArchive() ) );
if ( ( ( mailingList.getOtherArchives() != null ) ) && ( !mailingList.getOtherArchives().isEmpty() ) )
{
MailingList m = (MailingList) i.next();
if ( ( ( m.getOtherArchives() != null ) ) && ( m.getOtherArchives().size() > 0 ) )
// For the first line
Iterator it = mailingList.getOtherArchives().iterator();
String otherArchive = it.next().toString();
textRow.add( createLinkPatternedText( getArchiveServer( otherArchive ), otherArchive ) );
tableRow( (String[]) textRow.toArray( new String[0] ) );
// Other lines...
while ( it.hasNext() )
{
otherArchives = true;
otherArchive = (String) it.next();
// Reinit the list to beautify the display
textRow = new ArrayList();
// Name
textRow.add( " " );
// Subscribe
textRow.add( " " );
// UnSubscribe
textRow.add( " " );
// Post
textRow.add( " " );
// Archive
textRow.add( " " );
textRow.add( createLinkPatternedText( getArchiveServer( otherArchive ), otherArchive ) );
tableRow( (String[]) textRow.toArray( new String[0] ) );
}
}
String name = getBundle( locale ).getString( "report.mailing-lists.column.name" );
String subscribe = getBundle( locale ).getString( "report.mailing-lists.column.subscribe" );
String unsubscribe = getBundle( locale ).getString( "report.mailing-lists.column.unsubscribe" );
String post = getBundle( locale ).getString( "report.mailing-lists.column.post" );
String archive = getBundle( locale ).getString( "report.mailing-lists.column.archive" );
String archivesOther = getBundle( locale ).getString( "report.mailing-lists.column.otherArchives" );
if ( otherArchives )
{
tableHeader( new String[]{name, subscribe, unsubscribe, post, archive, archivesOther} );
}
else
{
tableHeader( new String[]{name, subscribe, unsubscribe, post, archive} );
if ( otherArchives )
{
textRow.add( null );
}
tableRow( (String[]) textRow.toArray( new String[0] ) );
}
for ( Iterator i = model.getMailingLists().iterator(); i.hasNext(); )
{
MailingList m = (MailingList) i.next();
List textRow = new ArrayList();
List hrefRow = new ArrayList();
// Validate here subsribe/unsubsribe lists and archives?
if ( m.getName() != null )
{
textRow.add( m.getName() );
hrefRow.add( null );
}
else
{
// By default, a name should be set
textRow.add( "???NOT_SET???" );
hrefRow.add( null );
}
if ( m.getSubscribe() != null )
{
textRow.add( subscribe );
hrefRow.add( m.getSubscribe() );
}
else
{
textRow.add( null );
hrefRow.add( null );
}
if ( m.getUnsubscribe() != null )
{
textRow.add( unsubscribe );
hrefRow.add( m.getUnsubscribe() );
}
else
{
textRow.add( null );
hrefRow.add( null );
}
if ( m.getPost() != null )
{
textRow.add( post );
hrefRow.add( m.getPost() );
}
else
{
textRow.add( null );
hrefRow.add( null );
}
if ( m.getArchive() != null )
{
textRow.add( getArchiveServer( m.getArchive() ) );
hrefRow.add( m.getArchive() );
}
else
{
textRow.add( null );
hrefRow.add( null );
}
if ( ( ( m.getOtherArchives() != null ) ) && ( m.getOtherArchives().size() > 0 ) )
{
// For the first line
Iterator it = m.getOtherArchives().iterator();
String otherArchive = it.next().toString();
textRow.add( getArchiveServer( otherArchive ) );
hrefRow.add( otherArchive );
tableRowWithLink( (String[]) textRow.toArray( new String[0] ),
(String[]) hrefRow.toArray( new String[0] ) );
// Other lines...
while ( it.hasNext() )
{
otherArchive = (String) it.next();
// Reinit the list to beautify the display
textRow = new ArrayList();
hrefRow = new ArrayList();
// Name
textRow.add( null );
hrefRow.add( null );
// Subscribe
textRow.add( null );
hrefRow.add( null );
// UnSubscribe
textRow.add( null );
hrefRow.add( null );
// Post
textRow.add( null );
hrefRow.add( null );
// Archive
textRow.add( null );
hrefRow.add( null );
textRow.add( getArchiveServer( otherArchive ) );
hrefRow.add( otherArchive );
tableRowWithLink( (String[]) textRow.toArray( new String[0] ),
(String[]) hrefRow.toArray( new String[0] ) );
}
}
else
{
if ( otherArchives )
{
textRow.add( null );
hrefRow.add( null );
}
tableRowWithLink( (String[]) textRow.toArray( new String[0] ),
(String[]) hrefRow.toArray( new String[0] ) );
}
}
endTable();
}
endTable();
endSection();
}
}
private static ResourceBundle getBundle( Locale locale )
{
return ResourceBundle.getBundle("project-info-report", locale, MailingListsReport.class.getClassLoader() );
return ResourceBundle.getBundle( "project-info-report", locale, MailingListsReport.class.getClassLoader() );
}
/**
* Convenience method to return the name of a web-based mailing list archive server.
* <br>
* For instance, if the archive uri is <code>http://www.mail-archive.com/dev@maven.apache.org</code>,
* this method return <code>www.mail-archive.com</code>
*
* Convenience method to return the name of a web-based mailing list archive
* server. <br>
* For instance, if the archive uri is
* <code>http://www.mail-archive.com/dev@maven.apache.org</code>, this
* method return <code>www.mail-archive.com</code>
*
* @param uri
* @return the server name of a web-based mailing list archive server
*/
private static String getArchiveServer( final String uri )
private static String getArchiveServer( String uri )
{
if ( uri == null )
if ( StringUtils.isEmpty( uri ) )
{
return "???UNKWOWN???";
}
@ -368,4 +313,4 @@ private static String getArchiveServer( final String uri )
return uri.substring( at + 2, from );
}
}
}

View File

@ -0,0 +1,557 @@
package org.apache.maven.report.projectinfo;
/*
* Copyright 2004-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.model.Model;
import org.apache.maven.model.Scm;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.doxia.sink.Sink;
import org.codehaus.doxia.site.renderer.SiteRenderer;
import org.codehaus.plexus.util.StringUtils;
import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* Generates the Project Source Configuration Management report.
*
* @goal scm
*
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton </a>
* @version $Id$
*/
public class ScmReport
extends AbstractMavenReport
{
/**
* @parameter expression="${project.build.directory}/site"
* @required
*/
private String outputDirectory;
/**
* @parameter expression="${component.org.codehaus.doxia.site.renderer.SiteRenderer}"
* @required
* @readonly
*/
private SiteRenderer siteRenderer;
/**
* @parameter expression="${project}"
* @required
* @readonly
*/
private MavenProject project;
/**
* @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
*/
public String getName( Locale locale )
{
return getBundle( locale ).getString( "report.scm.name" );
}
/**
* @see org.apache.maven.reporting.MavenReport#getCategoryName()
*/
public String getCategoryName()
{
return CATEGORY_PROJECT_INFORMATION;
}
/**
* @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
*/
public String getDescription( Locale locale )
{
return getBundle( locale ).getString( "report.scm.description" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
*/
protected String getOutputDirectory()
{
return outputDirectory;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getProject()
*/
protected MavenProject getProject()
{
return project;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
*/
protected SiteRenderer getSiteRenderer()
{
return siteRenderer;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
*/
public void executeReport( Locale locale )
throws MavenReportException
{
try
{
ScmRenderer r = new ScmRenderer( getSink(), getProject().getModel(), locale );
r.render();
}
catch ( IOException e )
{
throw new MavenReportException( "Can't write the report " + getOutputName(), e );
}
}
/**
* @see org.apache.maven.reporting.MavenReport#getOutputName()
*/
public String getOutputName()
{
return "source-repository";
}
static class ScmRenderer
extends AbstractMavenReportRenderer
{
private Model model;
private Locale locale;
public ScmRenderer( Sink sink, Model model, Locale locale )
{
super( sink );
this.model = model;
this.locale = locale;
}
/**
* @see org.apache.maven.reporting.MavenReportRenderer#getTitle()
*/
public String getTitle()
{
return getBundle( locale ).getString( "report.scm.title" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReportRenderer#renderBody()
*/
public void renderBody()
{
Scm scm = model.getScm();
if ( scm == null )
{
startSection( getTitle() );
paragraph( getBundle( locale ).getString( "report.scm.noscm" ) );
endSection();
return;
}
String connection = scm.getConnection();
String devConnection = scm.getDeveloperConnection();
boolean isSvnConnection = isScmSystem( connection, "svn" );
boolean isCvsConnection = isScmSystem( connection, "cvs" );
boolean isVssConnection = isScmSystem( connection, "vss" );
boolean isSvnDevConnection = isScmSystem( devConnection, "svn" );
boolean isCvsDevConnection = isScmSystem( devConnection, "cvs" );
boolean isVssDevConnection = isScmSystem( devConnection, "vss" );
// Overview
startSection( getBundle( locale ).getString( "report.scm.overview.title" ) );
if ( isSvnConnection )
{
linkPatternedText( getBundle( locale ).getString( "report.scm.svn.intro" ) );
}
else if ( isCvsConnection )
{
linkPatternedText( getBundle( locale ).getString( "report.scm.cvs.intro" ) );
}
else if ( isVssConnection )
{
linkPatternedText( getBundle( locale ).getString( "report.scm.vss.intro" ) );
}
else
{
paragraph( getBundle( locale ).getString( "report.scm.general.intro" ) );
}
endSection();
// Web access
startSection( getBundle( locale ).getString( "report.scm.webaccess.title" ) );
if ( scm.getUrl() == null )
{
paragraph( getBundle( locale ).getString( "report.scm.webaccess.nourl" ) );
}
else
{
paragraph( getBundle( locale ).getString( "report.scm.webaccess.url" ) );
verbatimLink( scm.getUrl(), scm.getUrl() );
}
endSection();
// Anonymous access
if ( !StringUtils.isEmpty( connection ) )
{
// Validation
validConnection( connection );
startSection( getBundle( locale ).getString( "report.scm.anonymousaccess.title" ) );
if ( isSvnConnection )
{
paragraph( getBundle( locale ).getString( "report.scm.anonymousaccess.svn.intro" ) );
// Example:
// $> svn checkout
// http://svn.apache.org/repos/asf/maven/components/trunk
// maven
StringBuffer sb = new StringBuffer();
sb.append( "$>svn checkout " ).append( getSvnRoot( connection ) ).append( " " )
.append( model.getArtifactId() );
verbatimText( sb.toString() );
}
else if ( isCvsConnection )
{
paragraph( getBundle( locale ).getString( "report.scm.anonymousaccess.cvs.intro" ) );
// Example:
// cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic
// login
// cvs -z3 -d
// :pserver:anoncvs@cvs.apache.org:/home/cvspublic co
// maven-plugins/dist
String[] connectionDef = StringUtils.split( connection, ":" );
StringBuffer command = new StringBuffer();
command.append( "$>cvs -d " ).append( getCvsRoot( connection, "" ) ).append( " login" );
command.append( "\n" );
command.append( "$>cvs -z3 -d " ).append( getCvsRoot( connection, "" ) ).append( " co " )
.append( getCvsModule( connection ) );
verbatimText( command.toString() );
}
else if ( isVssConnection )
{
paragraph( getBundle( locale ).getString( "report.scm.anonymousaccess.vss.intro" ) );
verbatimText( getVssRoot( connection, "" ) );
}
else
{
paragraph( getBundle( locale ).getString( "report.scm.anonymousaccess.general.intro" ) );
verbatimText( connection.substring( 4 ) );
}
endSection();
}
// Developer access
if ( !StringUtils.isEmpty( devConnection ) )
{
// Validation
validConnection( devConnection );
startSection( getBundle( locale ).getString( "report.scm.devaccess.title" ) );
if ( isSvnDevConnection )
{
paragraph( getBundle( locale ).getString( "report.scm.devaccess.svn.intro1" ) );
// Example:
// $> svn checkout
// https://svn.apache.org/repos/asf/maven/components/trunk
// maven
StringBuffer sb = new StringBuffer();
sb.append( "$>svn checkout " ).append( getSvnRoot( devConnection ) ).append( " " )
.append( model.getArtifactId() );
verbatimText( sb.toString() );
paragraph( getBundle( locale ).getString( "report.scm.devaccess.svn.intro2" ) );
sb = new StringBuffer();
sb.append( "$>svn commit --username your-username -m \"A message\"" );
verbatimText( sb.toString() );
}
else if ( isCvsDevConnection )
{
paragraph( getBundle( locale ).getString( "report.scm.devaccess.cvs.intro" ) );
// Example:
// cvs -d :pserver:username@cvs.apache.org:/home/cvs login
// cvs -z3 -d :ext:username@cvs.apache.org:/home/cvs co
// maven-plugins/dist
String[] connectionDef = StringUtils.split( devConnection, ":" );
StringBuffer command = new StringBuffer();
command.append( "$>cvs -d " ).append( getCvsRoot( devConnection, "username" ) ).append( " login" );
command.append( "\n" );
command.append( "$>cvs -z3 -d " ).append( getCvsRoot( devConnection, "username" ) ).append( " co " )
.append( getCvsModule( devConnection ) );
verbatimText( command.toString() );
}
else if ( isVssDevConnection )
{
paragraph( getBundle( locale ).getString( "report.scm.devaccess.vss.intro" ) );
verbatimText( getVssRoot( connection, "username" ) );
}
else
{
paragraph( getBundle( locale ).getString( "report.scm.devaccess.general.intro" ) );
verbatimText( connection.substring( 4 ) );
}
endSection();
}
// Access from behind a firewall
startSection( getBundle( locale ).getString( "report.scm.accessbehindfirewall.title" ) );
if ( isSvnDevConnection )
{
paragraph( getBundle( locale ).getString( "report.scm.accessbehindfirewall.svn.intro" ) );
StringBuffer sb = new StringBuffer();
sb.append( "$>svn checkout " ).append( getSvnRoot( devConnection ) ).append( " " )
.append( model.getArtifactId() );
verbatimText( sb.toString() );
}
else if ( isCvsDevConnection )
{
paragraph( getBundle( locale ).getString( "report.scm.accessbehindfirewall.cvs.intro" ) );
}
else
{
paragraph( getBundle( locale ).getString( "report.scm.accessbehindfirewall.general.intro" ) );
}
endSection();
// Access through a proxy
if ( isSvnConnection || isSvnDevConnection )
{
startSection( getBundle( locale ).getString( "report.scm.accessthroughtproxy.title" ) );
paragraph( getBundle( locale ).getString( "report.scm.accessthroughtproxy.svn.intro1" ) );
paragraph( getBundle( locale ).getString( "report.scm.accessthroughtproxy.svn.intro2" ) );
paragraph( getBundle( locale ).getString( "report.scm.accessthroughtproxy.svn.intro3" ) );
StringBuffer sb = new StringBuffer();
sb.append( "[global]" ).append( "\n" );
sb.append( "http-proxy-host = your.proxy.name" ).append( "\n" );
sb.append( "http-proxy-port = 3128" ).append( "\n" );
verbatimText( sb.toString() );
endSection();
}
}
/**
* Checks if a SCM connection is a SVN, CVS...
*
* @return true if the SCM is a SVN, CVS server, false otherwise.
*/
private static boolean isScmSystem( String connection, String scm )
{
if ( StringUtils.isEmpty( connection ) )
{
return false;
}
if ( StringUtils.isEmpty( scm ) )
{
return false;
}
if ( connection.toLowerCase().substring( 4 ).startsWith( scm ) )
{
return true;
}
return false;
}
/**
* Get the SVN root from a connection
*
* @param connection
* a valid SVN connection
* @return the svn connection
*/
private static String getSvnRoot( String connection )
{
if ( !isScmSystem( connection, "svn" ) )
{
throw new IllegalArgumentException( "Cannot get the SVN root from a none SVN SCM." );
}
String[] connectionDef = StringUtils.split( connection, ":" );
if ( connectionDef.length != 4 )
{
throw new IllegalArgumentException( "The SVN repository connection is not valid." );
}
return connectionDef[2] + ":" + connectionDef[3];
}
/**
* Get the CVS root from the connection
*
* @param connection
* a valid CVS connection
* @param username
* @return the CVS root
*/
private static String getCvsRoot( String connection, String username )
{
if ( !isScmSystem( connection, "cvs" ) )
{
throw new IllegalArgumentException( "Cannot get the CVS root from a none CVS SCM." );
}
String[] connectionDef = StringUtils.split( connection, ":" );
if ( connectionDef.length != 6 )
{
throw new IllegalArgumentException( "The CVS repository connection is not valid." );
}
if ( connectionDef[3].indexOf( '@' ) >= 0 )
{
if ( StringUtils.isEmpty( username ) )
{
username = connectionDef[3].substring( 0, connectionDef[3].indexOf( '@' ) );
}
connectionDef[3] = username + "@" + connectionDef[3].substring( connectionDef[3].indexOf( '@' ) + 1 );
}
return ":" + connectionDef[2] + ":" + connectionDef[3] + ":" + connectionDef[4];
}
/**
* Get the CVS module from a connection
*
* @param connection
* a valid CVS connection
* @return the CVS module
*/
private static String getCvsModule( String connection )
{
if ( !isScmSystem( connection, "cvs" ) )
{
throw new IllegalArgumentException( "Cannot get the CVS root from a none CVS SCM." );
}
String[] connectionDef = StringUtils.split( connection, ":" );
if ( connectionDef.length != 6 )
{
throw new IllegalArgumentException( "The CVS repository connection is not valid." );
}
return connectionDef[5];
}
/**
* Get a VSS root.
*
* @param connection
* a valid VSS connection
* @param username
* @return the VSS root
*/
private static String getVssRoot( String connection, String username )
{
if ( !isScmSystem( connection, "vss" ) )
{
throw new IllegalArgumentException( "Cannot get the VSS root from a none VSS SCM." );
}
String[] connectionDef = StringUtils.split( connection, ":" );
if ( connectionDef.length != 5 )
{
throw new IllegalArgumentException( "The VSS repository connection is not valid." );
}
if ( StringUtils.isEmpty( username ) )
{
username = connectionDef[3];
}
return connectionDef[1] + ":" + connectionDef[2] + ":" + username + ":" + connectionDef[4];
}
/**
* Convenience method that valid a given connection.
* <p>
* Throw an <code>IllegalArgumentException</code> if the connection is
* not a valid one.
* </p>
*
* @param connection
*/
private static void validConnection( String connection )
{
if ( StringUtils.isEmpty( connection ) )
{
throw new IllegalArgumentException( "The source repository connection could not be null." );
}
if ( connection.length() < 4 )
{
throw new IllegalArgumentException( "The source repository connection is too short." );
}
if ( !connection.startsWith( "scm" ) )
{
throw new IllegalArgumentException( "The source repository connection must start with scm." );
}
}
}
private static ResourceBundle getBundle( Locale locale )
{
return ResourceBundle.getBundle( "project-info-report", locale, ScmReport.class.getClassLoader() );
}
}

View File

@ -0,0 +1,403 @@
package org.apache.maven.report.projectinfo;
/*
* Copyright 2004-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.model.Contributor;
import org.apache.maven.model.Developer;
import org.apache.maven.model.Model;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.doxia.sink.Sink;
import org.codehaus.doxia.site.renderer.SiteRenderer;
import org.codehaus.plexus.util.StringUtils;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
/**
* Generates the Project Team report.
*
* @goal project-team
*
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton </a>
* @version $Id$
*/
public class TeamListReport
extends AbstractMavenReport
{
/**
* @parameter expression="${project.build.directory}/site"
* @required
*/
private String outputDirectory;
/**
* @parameter expression="${component.org.codehaus.doxia.site.renderer.SiteRenderer}"
* @required
* @readonly
*/
private SiteRenderer siteRenderer;
/**
* @parameter expression="${project}"
* @required
* @readonly
*/
private MavenProject project;
/**
* @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
*/
public String getName( Locale locale )
{
return getBundle( locale ).getString( "report.team-list.name" );
}
/**
* @see org.apache.maven.reporting.MavenReport#getCategoryName()
*/
public String getCategoryName()
{
return CATEGORY_PROJECT_INFORMATION;
}
/**
* @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
*/
public String getDescription( Locale locale )
{
return getBundle( locale ).getString( "report.team-list.description" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
*/
protected String getOutputDirectory()
{
return outputDirectory;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getProject()
*/
protected MavenProject getProject()
{
return project;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
*/
protected SiteRenderer getSiteRenderer()
{
return siteRenderer;
}
/**
* @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
*/
public void executeReport( Locale locale )
throws MavenReportException
{
try
{
TeamListRenderer r = new TeamListRenderer( getSink(), getProject().getModel(), locale );
r.render();
}
catch ( IOException e )
{
throw new MavenReportException( "Can't write the report " + getOutputName(), e );
}
}
/**
* @see org.apache.maven.reporting.MavenReport#getOutputName()
*/
public String getOutputName()
{
return "team-list";
}
static class TeamListRenderer
extends AbstractMavenReportRenderer
{
private Model model;
private Locale locale;
public TeamListRenderer( Sink sink, Model model, Locale locale )
{
super( sink );
this.model = model;
this.locale = locale;
}
/**
* @see org.apache.maven.reporting.MavenReportRenderer#getTitle()
*/
public String getTitle()
{
return getBundle( locale ).getString( "report.team-list.title" );
}
/**
* @see org.apache.maven.reporting.AbstractMavenReportRenderer#renderBody()
*/
public void renderBody()
{
startSection( getBundle( locale ).getString( "report.team-list.intro.title" ) );
// To handle JS
StringBuffer javascript = new StringBuffer( "function offsetDate(id, offset) {" )
.append( "var now = new Date() ;" ).append( "var nowTime = now.getTime() ;" )
.append( "var localOffset = now.getTimezoneOffset() ;" )
.append( "var developerTime = nowTime + ( offset * 60 * 60 * 1000 ) + ( localOffset * 60 * 1000 ) ;" )
.append( "var developerDate = new Date(developerTime) ;" ).append( "" )
.append( "document.getElementById(id).innerHTML = developerDate;" ).append( "}" ).append( "" )
.append( "function init(){" );
// Intoduction
paragraph( getBundle( locale ).getString( "report.team-list.intro.description1" ) );
paragraph( getBundle( locale ).getString( "report.team-list.intro.description2" ) );
// Developer section
List developers = model.getDevelopers();
startSection( getBundle( locale ).getString( "report.team-list.developers.title" ) );
if ( ( developers == null ) || ( developers.isEmpty() ) )
{
paragraph( getBundle( locale ).getString( "report.team-list.nodeveloper" ) );
}
else
{
paragraph( getBundle( locale ).getString( "report.team-list.developers.intro" ) );
startTable();
String id = getBundle( locale ).getString( "report.team-list.developers.id" );
String name = getBundle( locale ).getString( "report.team-list.developers.name" );
String email = getBundle( locale ).getString( "report.team-list.developers.email" );
String url = getBundle( locale ).getString( "report.team-list.developers.url" );
String organization = getBundle( locale ).getString( "report.team-list.developers.organization" );
String organizationUrl = getBundle( locale ).getString( "report.team-list.developers.organizationurl" );
String roles = getBundle( locale ).getString( "report.team-list.developers.roles" );
String timeZone = getBundle( locale ).getString( "report.team-list.developers.timezone" );
String actualTime = getBundle( locale ).getString( "report.team-list.developers.actualtime" );
String properties = getBundle( locale ).getString( "report.team-list.developers.properties" );
tableHeader( new String[] {
id,
name,
email,
url,
organization,
organizationUrl,
roles,
timeZone,
actualTime,
properties } );
// To handle JS
int developersRows = 0;
for ( Iterator i = developers.iterator(); i.hasNext(); )
{
Developer developer = (Developer) i.next();
// To handle JS
sink.tableRow();
tableCell( developer.getId() );
tableCell( developer.getName() );
tableCell( createLinkPatternedText( developer.getEmail(), developer.getEmail() ) );
tableCell( createLinkPatternedText( developer.getUrl(), developer.getUrl() ) );
tableCell( developer.getOrganization() );
tableCell( developer.getOrganizationUrl() );
if ( developer.getRoles() != null )
{
// Comma separated roles
tableCell( StringUtils.join( developer.getRoles().toArray( new String[0] ), ", " ) );
}
else
{
tableCell( null );
}
tableCell( developer.getTimezone() );
// To handle JS
sink.tableCell();
sink.rawText( "<span id=\"developer-" + developersRows + "\">" );
text( developer.getTimezone() );
if ( !StringUtils.isEmpty( developer.getTimezone() ) )
{
javascript.append( "offsetDate('developer-" + developersRows + "', '" );
javascript.append( developer.getTimezone() );
javascript.append( "');\n" );
}
sink.rawText( "</span>" );
sink.tableCell_();
Properties props = developer.getProperties();
if ( props != null )
{
tableCell( propertiesToString( props ) );
}
else
{
tableCell( null );
}
sink.tableRow_();
developersRows++;
}
endTable();
}
endSection();
// contributors section
List contributors = model.getContributors();
startSection( getBundle( locale ).getString( "report.team-list.contributors.title" ) );
if ( ( contributors == null ) || ( contributors.isEmpty() ) )
{
paragraph( getBundle( locale ).getString( "report.team-list.nocontributor" ) );
}
else
{
paragraph( getBundle( locale ).getString( "report.team-list.contributors.intro" ) );
startTable();
String name = getBundle( locale ).getString( "report.team-list.contributors.name" );
String email = getBundle( locale ).getString( "report.team-list.contributors.email" );
String url = getBundle( locale ).getString( "report.team-list.contributors.url" );
String organization = getBundle( locale ).getString( "report.team-list.contributors.organization" );
String organizationUrl = getBundle( locale )
.getString( "report.team-list.contributors.organizationurl" );
String roles = getBundle( locale ).getString( "report.team-list.contributors.roles" );
String timeZone = getBundle( locale ).getString( "report.team-list.contributors.timezone" );
String actualTime = getBundle( locale ).getString( "report.team-list.contributors.actualtime" );
String properties = getBundle( locale ).getString( "report.team-list.contributors.properties" );
tableHeader( new String[] {
name,
email,
url,
organization,
organizationUrl,
roles,
timeZone,
actualTime,
properties } );
// To handle JS
int contributorsRows = 0;
for ( Iterator i = contributors.iterator(); i.hasNext(); )
{
Contributor contributor = (Contributor) i.next();
sink.tableRow();
tableCell( contributor.getName() );
tableCell( createLinkPatternedText( contributor.getEmail(), contributor.getEmail() ) );
tableCell( createLinkPatternedText( contributor.getUrl(), contributor.getUrl() ) );
tableCell( contributor.getOrganization() );
tableCell( createLinkPatternedText( contributor.getOrganizationUrl(), contributor
.getOrganizationUrl() ) );
if ( contributor.getRoles() != null )
{
// Comma separated roles
tableCell( StringUtils.join( contributor.getRoles().toArray( new String[0] ), ", " ) );
}
else
{
tableCell( null );
}
tableCell( contributor.getTimezone() );
// To handle JS
sink.tableCell();
sink.rawText( "<span id=\"contributor-" + contributorsRows + "\">" );
text( contributor.getTimezone() );
if ( !StringUtils.isEmpty( contributor.getTimezone() ) )
{
javascript.append( "offsetDate('contributor-" + contributorsRows + "', '" );
javascript.append( contributor.getTimezone() );
javascript.append( "');\n" );
}
sink.rawText( "</span>" );
sink.tableCell_();
Properties props = contributor.getProperties();
if ( props != null )
{
tableCell( propertiesToString( props ) );
}
else
{
tableCell( null );
}
sink.tableRow_();
contributorsRows++;
}
endTable();
}
endSection();
endSection();
// To handle JS
javascript.append( "}" ).append( "window.onload = init();" );
javaScript( javascript.toString() );
}
}
private static ResourceBundle getBundle( Locale locale )
{
return ResourceBundle.getBundle( "project-info-report", locale, TeamListReport.class.getClassLoader() );
}
}

View File

@ -22,12 +22,18 @@ report.dependencies.intro=The following is a list of dependencies for this proje
report.dependencies.column.groupId=GroupId
report.dependencies.column.artifactId=ArtifactId
report.dependencies.column.version=Version
report.dependencies.column.description=Description
report.dependencies.column.url=URL
report.transitivedependencies.title=Project Transitive Dependencies
report.transitivedependencies.nolist=There are no transitive dependencies for this project.
report.transitivedependencies.intro=The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies :
report.transitivedependencies.nolist=No transitive dependencies are required for this project.
report.transitivedependencies.intro=The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies:
report.transitivedependencies.column.groupId=GroupId
report.transitivedependencies.column.artifactId=ArtifactId
report.transitivedependencies.column.version=Version
report.transitivedependencies.column.description=Description
report.transitivedependencies.column.url=URL
report.mailing-lists.name=Mailing Lists
report.mailing-lists.nolist=There are no mailing lists currently associated with this project.
report.mailing-lists.title=Project Mailing Lists
@ -39,3 +45,103 @@ report.mailing-lists.column.unsubscribe=Unsubscribe
report.mailing-lists.column.post=Post
report.mailing-lists.column.archive=Archive
report.mailing-lists.column.otherArchives=Other Archives
report.team-list.name=Project Team
report.team-list.description=This document provides information on the members of this project. These are the individuals who have contributed to the project in one form or another.
report.team-list.title=Team list
report.team-list.intro.title=The Team
report.team-list.intro.description1=A successful project requires many people to play many roles. Some members write code or documentation, while others are valuable as testers, submitting patches and suggestions.
report.team-list.intro.description2=The team is comprised of Members and Contributors. Members have direct access to the source of a project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. Get involved today. All contributions to the project are greatly appreciated.
report.team-list.developers.title=Members
report.team-list.nodeveloper=There are no developers working on this project. Please check back at a later date.
report.team-list.developers.intro=The following is a list of developers with commit privileges that have directly contributed to the project in one way or another.
report.team-list.developers.id=Id
report.team-list.developers.name=Name
report.team-list.developers.email=Email
report.team-list.developers.url=URL
report.team-list.developers.organization=Organization
report.team-list.developers.organizationurl=Organization URL
report.team-list.developers.roles=Roles
report.team-list.developers.timezone=Time Zone
report.team-list.developers.actualtime=Actual Time (GMT)
report.team-list.developers.properties=Properties
report.team-list.contributors.title=Contributors
report.team-list.nocontributor=There are no contributors listed for this project. Please check back again later.
report.team-list.contributors.intro=The following additional people have contributed to this project through the way of suggestions, patches or documentation.
report.team-list.contributors.name=Name
report.team-list.contributors.email=Email
report.team-list.contributors.url=URL
report.team-list.contributors.organization=Organization
report.team-list.contributors.organizationurl=Organization URL
report.team-list.contributors.roles=Roles
report.team-list.contributors.timezone=Time Zone
report.team-list.contributors.actualtime=Actual Time (GMT)
report.team-list.contributors.properties=Properties
report.scm.name=Source Repository
report.scm.description=This is a link to the online source repository that can be viewed via a web browser.
report.scm.noscm=No source configuration management system is defined. Please check back at a later date.
report.scm.title=Source Repository
report.scm.overview.title=Overview
report.scm.svn.intro=This project uses {Subversion, http://subversion.tigris.org/} to manage its source code. Instructions on Subversion use can be found at {http://svnbook.red-bean.com/, http://svnbook.red-bean.com/}.
report.scm.cvs.intro=This project uses {Concurrent Versions System, http://www.cvshome.org/} to manage its source code. Instructions on CVS use can be found at {http://cvsbook.red-bean.com/, http://cvsbook.red-bean.com/}.
report.scm.vss.intro=This project uses {Visual SourceSafe, http://msdn.microsoft.com/ssafe/} to manage its source code.
report.scm.general.intro=This project uses a Source Content Management System to manage its source code.
report.scm.webaccess.title=Web Access
report.scm.webaccess.url=The following is a link to the online source repository.
report.scm.webaccess.nourl=There are no online source repository listed for this project. Please check back again later.
report.scm.anonymousaccess.title=Anonymous access
report.scm.anonymousaccess.svn.intro=The source can be checked out anonymously from SVN with this command:
report.scm.anonymousaccess.cvs.intro=This project's CVS repository can be checked out through anonymous CVS with the following instruction set. When prompted for a password for anonymous, simply press the Enter key.
report.scm.anonymousaccess.vss.intro=This project's VSS repository can be checked out through anonymous with the following URL. Refer to VSS documentation for more information about anonymously check out.
report.scm.anonymousaccess.general.intro=Refer to the documentation of the SCM used for more information about anonymously check out. The connection url is:
report.scm.devaccess.title=Developer access
report.scm.devaccess.svn.intro1=Everyone can access the Subversion repository via HTTPS, but Committers must checkout the Subversion repository via HTTPS.
report.scm.devaccess.svn.intro2=To commit changes to the repository, execute the following command to commit your changes (svn will prompt you for your password)
report.scm.devaccess.cvs.intro=Only project developers can access the CVS tree via this method. Substitute username with the proper value.
report.scm.devaccess.vss.intro=Only project developers can access the VSS tree. Substitute username with the proper value.
report.scm.devaccess.general.intro=Refer to the documentation of the SCM used for more information about developer checked out. The connection url is:
report.scm.accessbehindfirewall.title=Access from behind a firewall
report.scm.accessbehindfirewall.svn.intro=For those users who are stuck behind a corporate firewall which is blocking http access to the Subversion repository, you can try to access it via the developer connection:
report.scm.accessbehindfirewall.cvs.intro=For those developers who are stuck behind a corporate firewall, {CVSGrab, http://cvsgrab.sourceforge.net/) can use the viewcvs web interface to checkout the source code}.
report.scm.accessbehindfirewall.general.intro=Refer to the documentation of the SCM used for more information about an access behind a firewall.
report.scm.accessthroughtproxy.title=Access through a proxy
report.scm.accessthroughtproxy.svn.intro1=The Subversion client can go through a proxy, if you configure it to do so. First, edit your "servers" configuration file to indicate which proxy to use. The files location depends on your operating system. On Linux or Unix it is located in the directory "~/.subversion". On Windows it is in "%APPDATA%\Subversion". (Try "echo %APPDATA%", note this is a hidden directory.)
report.scm.accessthroughtproxy.svn.intro2=There are comments in the file explaining what to do. If you don't have that file, get the latest Subversion client and run any command; this will cause the configuration directory and template files to be created.
report.scm.accessthroughtproxy.svn.intro3=Example : Edit the 'servers' file and add something like :
report.issuetracking.name=Issue Tracking
report.issuetracking.description=This is a link to the issue management system for this project. Issues (bugs, features, change requests) can be created and queried using this link.
report.issuetracking.noissueManagement=No issue management system is defined. Please check back at a later date.
report.issuetracking.overview.title=Overview
report.issuetracking.jira.intro=This project uses {Jira, http://www.atlassian.com/software/jira} a J2EE-based, issue tracking and project management application.
report.issuetracking.bugzilla.intro=This project uses {Bugzilla, http://www.bugzilla.org/}.
report.issuetracking.scarab.intro=This project uses {Scarab, http://scarab.tigris.org/}.
report.issuetracking.general.intro=This project uses a Issue Management System to manage its issues.
report.issuetracking.title=Issue Tracking
report.issuetracking.intro=Issues, bugs, and feature requests should be submitted to the following issue tracking system for this project.
report.cim.name=Continuous Integration
report.cim.description=This is a link to the definitions of all continuous integration processes that builds and tests code on a frequent, regular basis.
report.cim.nocim=No continuous integration management system is defined. Please check back at a later date.
report.cim.title=Continuous Integration
report.cim.overview.title=Overview
report.cim.continuum.intro=This project uses {Continuum, http://maven.apache.org/continuum/}.
report.cim.bugzilla.intro=This project uses {Bugzilla, http://www.bugzilla.org/}.
report.cim.general.intro=This project uses Continuous Integration System.
report.cim.access=Access
report.cim.url=The following is a link to the continuous integration system used by the project.
report.cim.nourl=No url to the continuous integration system is defined.
report.cim.notifiers.title=Notifiers
report.cim.notifiers.nolist=No notifiers is defined. Please check back at a later date.
report.cim.notifiers.intro=Configuration for notifying developers/users when a build is unsuccessful, including user information and notification mode.
report.cim.notifiers.column.type=Type
report.cim.notifiers.column.address=Address
report.cim.notifiers.column.configuration=Configuration
report.license.name=Project License
report.license.description=This is a link to the definitions of project licenses.
report.license.nolicense=No project license is defined for this project.
report.license.title=Project License
report.license.overview.title=Overview
report.license.overview.intro=Typically the licenses listed for the project are that of the project itself, and not of dependencies.

View File

@ -22,12 +22,18 @@ report.dependencies.intro=Ce qui suit est la liste de d
report.dependencies.column.groupId=GroupId
report.dependencies.column.artifactId=ArtifactId
report.dependencies.column.version=Version
report.dependencies.column.description=Description
report.dependencies.column.url=URL
report.transitivedependencies.title=Dépendances transitives du projet
report.transitivedependencies.nolist=Il n'y a aucune dépendance transitive pour ce projet.
report.transitivedependencies.intro=Ce qui suit est la liste de dépendances transitives pour ce projet. Les dépendances transitives sont les dépendances des dépendances du projet :
report.transitivedependencies.column.groupId=GroupId
report.transitivedependencies.column.artifactId=ArtifactId
report.transitivedependencies.column.version=Version
report.transitivedependencies.column.description=Description
report.transitivedependencies.column.url=URL
report.mailing-lists.name=Listes de diffusion
report.mailing-lists.nolist= Il n'y a aucune liste de diffusion actuellement liée à ce projet.
report.mailing-lists.title=Listes de diffusion du projet
@ -39,3 +45,103 @@ report.mailing-lists.column.unsubscribe=Se d
report.mailing-lists.column.post=Poster
report.mailing-lists.column.archive=Archive
report.mailing-lists.column.otherArchives=Autres Archives
report.team-list.name=Membres de ce projet
report.team-list.description=Ce document fournit des informations sur les membres de ce projet. Ce sont les individus qui ont contribué au projet d'une façon ou d'une autre.
report.team-list.title=Liste des membres
report.team-list.intro.title=L'équipe
report.team-list.intro.description1=Un projet réussi exige que beaucoup de personnes jouent plusieurs rôles. Quelques personnes écrivent le code ou la documentation, alors que d'autres testent, soumettent des patches ou des suggestions.
report.team-list.intro.description2=L'équipe est composée des membres et de contributeurs. Les membres ont un accès direct aux sources du projet et font évoluer activement le code de base. Les contributeurs améliorent le projet par la soumission de patches et des suggestions aux membres. Le nombre de contributeurs au projet est illimité. Toutes les contributions au projet sont considérablement appréciées.
report.team-list.developers.title=Membres
report.team-list.nodeveloper=Il n'y a aucun développeur travaillant sur ce projet. Vérifiez plus tard si des développeurs ont été ajouté.
report.team-list.developers.intro=Ce qui suit est la liste des développeurs avec leurs rôles qui ont contribué d'une manière ou d'une autre au projet.
report.team-list.developers.id=Id
report.team-list.developers.name=Nom
report.team-list.developers.email=Email
report.team-list.developers.url=URL
report.team-list.developers.organization=Organisation
report.team-list.developers.organizationurl=URL de l'organisation
report.team-list.developers.roles=Roles
report.team-list.developers.timezone=Fuseau horaire
report.team-list.developers.actualtime=Heure actuelle (GMT)
report.team-list.developers.properties=Propriétés
report.team-list.contributors.title=Contributeurs
report.team-list.nocontributor=Il n'y a aucun contributeur travaillant sur ce projet. Vérifiez plus tard si des contributeurs ont été ajouté.
report.team-list.contributors.intro=Les personnes additionnelles suivantes ont contribué à ce projet pour leurs suggestions, ou leurs apports à la documentation ou aux patches.
report.team-list.contributors.name=Nom
report.team-list.contributors.email=Email
report.team-list.contributors.url=URL
report.team-list.contributors.organization=Organisation
report.team-list.contributors.organizationurl=URL de l'organisation
report.team-list.contributors.roles=Roles
report.team-list.contributors.timezone=Fuseau horaire
report.team-list.contributors.actualtime=Heure actuelle (GMT)
report.team-list.contributors.properties=Propriétés
report.scm.name=Dépôt de sources
report.scm.description=C'est un lien au dépôt de sources en ligne qui peut être regardé par l'intermédiaire d'un browser Web.
report.scm.noscm=Aucun système de dépôt SCM n'est défini. Vérifiez plus tard si un SCM a été ajouté.
report.scm.title=Dépôt de sources
report.scm.overview.title=Vue d'ensemble
report.scm.svn.intro=Ce projet utilise {Subversion, http://subversion.tigris.org/} pour gérer son code source. Des instructions sur l'utilisation de Subversion peuvent être trouvées à {http://svnbook.red-bean.com/, http://svnbook.red-bean.com/}.
report.scm.cvs.intro=Ce projet utilise {Concurrent Versions System, http://www.cvshome.org/} pour gérer son code source. Des instructions sur l'utilisation de CVS peuvent être trouvées à {http://cvsbook.red-bean.com/, http://cvsbook.red-bean.com/}.
report.scm.vss.intro=Ce projet utilise {Visual SourceSafe, http://msdn.microsoft.com/ssafe/} pour gérer son code source.
report.scm.general.intro=Ce projet utilise un dépôt de sources pour gérer son code source.
report.scm.webaccess.title=Accès Web
report.scm.webaccess.url=Ce qui suit est le lien online du dépôt de sources.
report.scm.webaccess.nourl=Aucun lien au système de dépôt SCM n'est défini. Vérifiez plus tard si ce lien a été ajouté.
report.scm.anonymousaccess.title=Accès de façon anonyme
report.scm.anonymousaccess.svn.intro=Le dépôt d'archive SVN de ce projet peut être vérifié de façon anonyme avec les instructions suivantes.:
report.scm.anonymousaccess.cvs.intro=Le dépôt d'archive CVS de ce projet peut être vérifié de façon anonyme avec les instructions suivantes. Lorsqu'un mot de passe pour anonyme est demandé, appuyez simplement sur la touche Enter.
report.scm.anonymousaccess.vss.intro=Le dépôt d'archive VSS de ce projet peut être vérifié de façon anonyme avec l'URL suivante. Référez-vous à la documentation de VSS pour plus d'informations sur cette instruction.
report.scm.anonymousaccess.general.intro=Référez-vous à la documentation du dépôt d'archive utilisé pour plus d'informations sur l'accès anonyme. L'URL de connection est:
report.scm.devaccess.title=Accès pour les dévelopeurs
report.scm.devaccess.svn.intro1=Chacun peut accéder au dépôt d'archive de Subversion via HTTPS, mais seuls les committers doivent accéder au dépôt d'archive via HTTPS.
report.scm.devaccess.svn.intro2=Pour commiter les changements dans le dépôt, éxecuter la ligne de commande suivante (SVN pourra vous demander votre mot de passe)
report.scm.devaccess.cvs.intro=Seulement les dévelopeurs du projet peuvent accéder à l'arbre de CVS par l'intermédiaire de cette méthode. Remplacez username avec la valeur appropriée.
report.scm.devaccess.vss.intro=Seulement les dévelopeurs du projet peuvent accéder à l'arbre de VSS. Remplacez username avec la valeur appropriée.
report.scm.devaccess.general.intro=Référez-vous à la documentation du dépôt d'archive utilisé pour plus d'informations sur l'accès en tant que développeur. L'URL de connection est:
report.scm.accessbehindfirewall.title=Accès derrière un firewall
report.scm.accessbehindfirewall.svn.intro=Pour ces utilisateurs qui sont coincés derrière un firewall qui bloque l'accès de HTTP au dépôt de Subversion, vous pouvez essayer d'y accéder avec la connection développeur:
report.scm.accessbehindfirewall.cvs.intro=Pour les dévelopeurs qui sont coincés derrière un firewall, {CVSGrab, http://cvsgrab.sourceforge.net/) peut utiliser l'interface Web pour effectuer un checkout du code source.
report.scm.accessbehindfirewall.general.intro=Référez-vous à la documentation du dépôt d'archive utilisé pour plus d'informations sur l'accès derrière un firewall.
report.scm.accessthroughtproxy.title=Accès avec un proxy
report.scm.accessthroughtproxy.svn.intro1=Le client de subversion peut accéder par proxy, si vous le configurez comme suit. D'abord, éditez votre dossier de configuration de "servers" pour indiquer quel proxy utilisé. Ce fichier est situé différemment dépendamment de votre système d'exploitation. Sur Linux ou Unix, il est situé dans le répertoire "~/.subversion". Sur Windows, il se situe dans "%APPDATA%\Subversion". (essayer de taper "echo %APPDATA%", notons que ce répertoire est caché.)
report.scm.accessthroughtproxy.svn.intro2=Il y a des commentaires dans le fichier qui explique comment faire. Si vous n'avez pas ce fichier, télécharger la version la plus récente de Subversion et tapez n'importe quelle commande ; ceci créera les fichiers de configuration.
report.scm.accessthroughtproxy.svn.intro3=Exemple : Editer le fichier 'servers' et ajouter quelque chose du genre:
report.issuetracking.name=Contrôle des livraisons
report.issuetracking.description=C'est un lien au système de contrôle des livraisons pour ce projet. Des issues (bogues, dispositifs, demandes de changement) peuvent être créées et questionnées en utilisant ce lien.
report.issuetracking.noissueManagement=Aucun système de contrôle des livraisons n'est défini. Vérifiez plus tard si un système de contrôle des livraisons a été ajouté.
report.issuetracking.overview.title=Vue d'ensemble
report.issuetracking.jira.intro=Ce projet utilise {Jira, http://www.atlassian.com/software/jira} une application J2EE de contrôle des livraisons et de gestion de projet.
report.issuetracking.bugzilla.intro=Ce projet utilise {Bugzilla, http://www.bugzilla.org/}.
report.issuetracking.scarab.intro=Ce projet utilise {Scarab, http://scarab.tigris.org/}.
report.issuetracking.general.intro=Ce projet utilise système de contrôle des livraisons pour gérer ces issues.
report.issuetracking.title=Contrôle des livraisons
report.issuetracking.intro=Des issues (bogues, dispositifs, demandes de changement) peuvent être créées et questionnées en utilisant ce lien.
report.cim.name=Contrôle des intégrations continues
report.cim.description=C'est un lien au système de contrôle des intégrations continues pour ce projet qui constuit et test le code de manière fréquente.
report.cim.nocim=Aucun système de contrôle des intégrations continues n'est défini. Vérifiez plus tard si un système de contrôle des livraisons a été ajouté.
report.cim.title=Contrôle des intégrations continues
report.cim.overview.title=Vue d'ensemble
report.cim.continuum.intro=Ce projet utilise {Continuum, http://maven.apache.org/continuum/}.
report.cim.bugzilla.intro=Ce projet utilise {Bugzilla, http://www.bugzilla.org/}.
report.cim.general.intro=Ce projet utilise un système de contrôle des intégrations continues.
report.cim.access=Accès
report.cim.url=Le lien suivant est celui du système de contrôle des intégrations continues pour ce projet.
report.cim.nourl=Aucun lien au système de contrôle des intégrations n'est défini.
report.cim.notifiers.title=Notification
report.cim.notifiers.nolist=Aucune notification n'est défini. Vérifiez plus tard si une notification a été ajouté.
report.cim.notifiers.intro=Configuration pour notifier les developpeurs ou les utilisateurs qu'un build a échoué.
report.cim.notifiers.column.type=Type
report.cim.notifiers.column.address=Adresse
report.cim.notifiers.column.configuration=Configuration
report.license.name=License du projet
report.license.description=C'est un lien à la license du projet.
report.license.nolicense=Aucune license n'est définie pour ce projet.
report.license.title=License du projet
report.license.overview.title=Vue d'ensemble
report.license.overview.intro=Typiquement les licenses énumérés pour ce projet sont celle du projet lui-même, et non celles des dépendances.

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test10</groupId>
<artifactId>project-info-reports-plugin-test10</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test10</name>
<description>Test the project team report</description>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer, Creator</role>
</roles>
<timezone>-5</timezone>
</developer>
<developer>
<id>toto</id>
<name>Toto</name>
<email>toto@toto.com</email>
<organization>Toto Software Foundation</organization>
<roles>
<role>Dummy</role>
</roles>
</developer>
</developers>
<contributors>
<contributor>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Contributor</role>
</roles>
<timezone>-5</timezone>
</contributor>
</contributors>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test10;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test10;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test2</groupId>
<artifactId>project-info-reports-plugin-test2</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test2</name>
<description>Test the SCM report with SVN</description>
<url>http://maven.apache.org</url>
<scm>
<connection>scm:svn:http://svn.apache.org/repos/asf/maven/components/trunk/maven-reports/maven-project-info-reports-plugin/src/test/projects/project-info-reports-plugin-test1</connection>
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/components/trunk/maven-reports/maven-project-info-reports-plugin/src/test/projects/project-info-reports-plugin-test1</developerConnection>
<url>http://svn.apache.org/repos/asf/maven/components/trunk/maven-reports/maven-project-info-reports-plugin/src/test/projects/project-info-reports-plugin-test1</url>
</scm>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test2;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test2;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test3</groupId>
<artifactId>project-info-reports-plugin-test3</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test3</name>
<description>Test the SCM report with CVS</description>
<url>http://maven.apache.org</url>
<scm>
<connection>scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:maven-plugins/dist</connection>
<developerConnection>scm:cvs:ext:vsiveton@cvs.apache.org:/home/cvs:maven-plugins/dist/</developerConnection>
<url>http://cvs.apache.org/viewcvs/maven-plugins/dist</url>
</scm>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test3;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test3;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test4</groupId>
<artifactId>project-info-reports-plugin-test4</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test4</name>
<description>Test the SCM report with VSS</description>
<url>http://maven.apache.org</url>
<scm>
<connection>scm:vss:\\server1\dolto:guest:/java/myProject</connection>
<developerConnection>scm:vss:\\server1\dolto:vsiveton:/java/myProject</developerConnection>
<url>http://vss.server.org/</url>
</scm>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test4;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test4;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test5</groupId>
<artifactId>project-info-reports-plugin-test5</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test5</name>
<description>Test the issue management report with jira</description>
<url>http://maven.apache.org</url>
<issueManagement>
<system>jira</system>
<url>http://jira.codehaus.org/browse/MNG</url>
</issueManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test5;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test5;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test6</groupId>
<artifactId>project-info-reports-plugin-test6</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test6</name>
<description>Test the continuous management system</description>
<url>http://maven.apache.org</url>
<ciManagement>
<system>continuum</system>
<notifiers>
<notifier>
<type>mail</type>
<address>dev@maven.apache.org</address>
</notifier>
</notifiers>
</ciManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test6;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test6;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test7</groupId>
<artifactId>project-info-reports-plugin-test7</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test7</name>
<description>Test the license report from an URL</description>
<url>http://maven.apache.org</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
<comments>It is the main license.</comments>
</license>
</licenses>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test7;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test7;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test8</groupId>
<artifactId>project-info-reports-plugin-test8</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test8</name>
<description>Test the license report from a file</description>
<url>http://maven.apache.org</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>/LICENSE.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test8;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test8;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
* 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.
*/
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.report.projectinfo.test9</groupId>
<artifactId>project-info-reports-plugin-test9</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2005</inceptionYear>
<name>Maven ProjectInfo Report Test9</name>
<description>Test the mailing lists report</description>
<url>http://maven.apache.org</url>
<mailingLists>
<mailingList>
<name>Maven User List</name>
<subscribe>users-subscribe@maven.apache.org</subscribe>
<unsubscribe>users-unsubscribe@maven.apache.org</unsubscribe>
<post>users@maven.apache.org</post>
<archive>http://mail-archives.apache.org/mod_mbox/maven-users</archive>
</mailingList>
<mailingList>
<name>Maven Developer List</name>
<subscribe>dev-subscribe@maven.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@maven.apache.org</unsubscribe>
<post>dev@maven.apache.org</post>
<archive>http://mail-archives.apache.org/mod_mbox/maven-dev</archive>
<otherArchives>
<otherArchive>http://nagoya.apache.org/eyebrowse/SummarizeList?listName=myapp-dev@test.org</otherArchive>
<otherArchive>http://blabla.org/eyebrowse/SummarizeList?listName=myapp-dev@test.org</otherArchive>
</otherArchives>
</mailingList>
</mailingLists>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<developers>
<developer>
<id>vsiveton</id>
<name>Vincent Siveton</name>
<email>vsiveton@apache.org</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Java Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,13 @@
package org.apache.maven.report.projectinfo.test9;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

View File

@ -0,0 +1,38 @@
org.apache.maven.report.projectinfo.test9;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}