Author: aramirez
Date: Thu Mar 16 21:25:16 2006
New Revision: 386543
URL: http://svn.apache.org/viewcvs?rev=386543&view=rev
Log:
PR: MJAVADOC-28
Submitted By: Maria Odea Ching
Reviewed By: Allan Ramirez
-accepts "sourcepath" and "subpackages" as parameters.
If there are no "subpackages" defined, the plugin still uses the @files
Modified:
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
Modified:
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
URL:
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java?rev=386543&r1=386542&r2=386543&view=diff
==============================================================================
---
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
(original)
+++
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
Thu Mar 16 21:25:16 2006
@@ -221,7 +221,7 @@
/**
* Specifies the proxy port where the javadoc web access in -link would
pass through.
- * It defaults to the proxy port of the active proxy set in the
settings.xml, otherwise it gets the proxy
+ * It defaults to the proxy port of the active proxy set in the
settings.xml, otherwise it gets the proxy
* configuration set in the pom.
*
* @parameter expression="${proxyPort}"
default-value="${settings.activeProxy.port}"
@@ -277,6 +277,20 @@
private String source;
/**
+ * Specifies the source path where the subpackages are located.
+ *
+ * @parameter expression="${sourcepath}"
+ */
+ private String sourcepath;
+
+ /**
+ * Specifies the package directory where javadoc will be executed.
+ *
+ * @parameter expression="${subpackages}"
+ */
+ private String subpackages;
+
+ /**
* Provides more detailed messages while javadoc is running.
* See <a
href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#verbose">verbose</a>.
*
@@ -699,6 +713,8 @@
char FILE_SEPARATOR = System.getProperty( "file.separator" ).charAt( 0
);
String[] excludePackages = {};
+
+ // for the specified excludePackageNames
if ( excludePackageNames != null )
{
excludePackages = excludePackageNames.split( "[ ,:;]" );
@@ -708,59 +724,64 @@
excludePackages[i] = excludePackages[i].replace( '.',
FILE_SEPARATOR );
}
+ // if the sourcepath is not empty
StringBuffer sourcePath = new StringBuffer();
StringBuffer files = new StringBuffer();
- for ( Iterator i = getProject().getCompileSourceRoots().iterator();
i.hasNext(); )
+ List excludedNames = new ArrayList();
+ if ( sourcepath != null && !StringUtils.isEmpty( sourcepath ) )
{
- String sourceDirectory = (String) i.next();
- String[] fileList = FileUtils.getFilesFromExtension(
sourceDirectory, new String[]{"java"} );
- if ( fileList != null && fileList.length != 0 )
+ String[] sourcePaths = sourcepath.split( "[;]" );
+ if ( subpackages != null && !StringUtils.isEmpty( subpackages ) )
{
- for ( int j = 0; j < fileList.length; j++ )
+ for ( int i = 0; i < sourcePaths.length; i++ )
{
- boolean include = true;
- for ( int k = 0; k < excludePackages.length && include;
k++ )
+ String[] subpackagesList = subpackages.split( "[:]" );
+ for ( int j = 0; j < subpackagesList.length; j++ )
{
- // handle wildcards (*) in the excludePackageNames
- String[] excludeName = excludePackages[k].split( "[*]"
);
- if ( excludeName.length > 1 )
- {
- int u = 0;
- while ( include == true && u < excludeName.length )
- {
- if ( !excludeName[u].trim().equals( "" ) &&
- fileList[j].indexOf( excludeName[u] ) !=
-1 )
- {
- include = false;
- }
- u++;
- }
- }
- else
- {
- if ( fileList[j].startsWith( sourceDirectory +
FILE_SEPARATOR + excludeName[0] ) )
- {
- include = false;
- }
- }
+ excludePackageNames = "";
+ List excludes = getExcludedPackages( sourcePaths[i],
excludePackages, FILE_SEPARATOR );
+ excludedNames.addAll( excludes );
}
- if ( include )
+
+ sourcePath.append( sourcePaths[i] );
+ if ( ( i + 1 ) < sourcePaths.length )
{
- files.append( quotedPathArgument( fileList[j] ) );
- files.append( "\n" );
+ sourcePath.append( PATH_SEPARATOR );
}
}
}
+ else
+ {
+ for ( int i = 0; i < sourcePaths.length; i++ )
+ {
+ String sourceDirectory = sourcePaths[i];
+ files = getAllFilesFromSource( sourceDirectory, files,
excludePackages, FILE_SEPARATOR );
+ sourcePath.append( sourceDirectory );
- sourcePath.append( sourceDirectory );
+ if ( ( i + 1 ) < sourcePaths.length )
+ {
+ sourcePath.append( PATH_SEPARATOR );
+ }
+ }
- if ( i.hasNext() )
+ }
+ }
+ else
+ {
+ for ( Iterator i =
getProject().getCompileSourceRoots().iterator(); i.hasNext(); )
{
- sourcePath.append( PATH_SEPARATOR );
+ String sourceDirectory = (String) i.next();
+ files = getAllFilesFromSource( sourceDirectory, files,
excludePackages, FILE_SEPARATOR );
+ sourcePath.append( sourceDirectory );
+
+ if ( i.hasNext() )
+ {
+ sourcePath.append( PATH_SEPARATOR );
+ }
}
}
- if ( files.length() == 0 )
+ if ( files.length() == 0 && ( subpackages == null ||
StringUtils.isEmpty( subpackages ) ) )
{
return;
}
@@ -922,6 +943,28 @@
addArgIfNotEmpty( arguments, null, additionalparam );
addArgIfNotEmpty( arguments, "-sourcepath", quotedPathArgument(
sourcePath.toString() ) );
+ if ( sourcepath != null && !StringUtils.isEmpty( sourcepath ) )
+ {
+ addArgIfNotEmpty( arguments, "-subpackages", subpackages );
+ }
+
+ if ( subpackages != null && !StringUtils.isEmpty( subpackages ) )
+ {
+ String packageNames = "";
+ //add the excludedpackage names
+ for ( Iterator it = excludedNames.iterator(); it.hasNext(); )
+ {
+ String str = (String) it.next();
+ packageNames = packageNames + str;
+
+ if ( it.hasNext() )
+ {
+ packageNames = packageNames + ":";
+ }
+ }
+ addArgIfNotEmpty( arguments, "-exclude", packageNames );
+ }
+
// javadoc arguments for default doclet
if ( StringUtils.isEmpty( doclet ) )
{
@@ -1374,4 +1417,133 @@
ArtifactHandler artifactHandler =
project.getArtifact().getArtifactHandler();
return ( "java".equals( artifactHandler.getLanguage() ) );
}
+
+ /**
+ * Method that gets the files or classes that would be included in the
javadocs using the subpackages
+ * parameter.
+ *
+ * @param sourceDirectory the directory where the source files are located
+ * @param fileList the list of all files found in the
sourceDirectory
+ * @param excludePackages package names to be excluded in the javadoc
+ * @param FILE_SEPARATOR the standard file separator used
+ * @return a StringBuffer that contains the appended file names of the
files to be included in the javadoc
+ */
+ private StringBuffer getIncludedFiles( String sourceDirectory, String[]
fileList, String[] excludePackages,
+ char FILE_SEPARATOR )
+ {
+ StringBuffer files = new StringBuffer();
+
+ for ( int j = 0; j < fileList.length; j++ )
+ {
+ boolean include = true;
+ for ( int k = 0; k < excludePackages.length && include; k++ )
+ {
+ // handle wildcards (*) in the excludePackageNames
+ String[] excludeName = excludePackages[k].split( "[*]" );
+ if ( excludeName.length > 1 )
+ {
+ int u = 0;
+ while ( include == true && u < excludeName.length )
+ {
+ if ( !excludeName[u].trim().equals( "" ) &&
fileList[j].indexOf( excludeName[u] ) != -1 )
+ {
+ include = false;
+ }
+ u++;
+ }
+ }
+ else
+ {
+ if ( fileList[j].startsWith( sourceDirectory +
FILE_SEPARATOR + excludeName[0] ) )
+ {
+ include = false;
+ }
+ }
+ }
+
+ if ( include )
+ {
+ files.append( quotedPathArgument( fileList[j] ) );
+ files.append( "\n" );
+ }
+ }
+
+ return files;
+ }
+
+ /**
+ * Method that gets the complete package names (including subpackages) of
the packages that were defined
+ * in the excludePackageNames parameter.
+ *
+ * @param sourceDirectory the directory where the source files are
located
+ * @param excludePackagenames package names to be excluded in the javadoc
+ * @param FILE_SEPARATOR the standard file separator used
+ * @return a List of the packagenames to be excluded
+ */
+ private List getExcludedPackages( String sourceDirectory, String[]
excludePackagenames, char FILE_SEPARATOR )
+ {
+ List files = new ArrayList();
+ for ( int i = 0; i < excludePackagenames.length; i++ )
+ {
+ String[] fileList = FileUtils.getFilesFromExtension(
sourceDirectory, new String[]{"java"} );
+ for ( int j = 0; j < fileList.length; j++ )
+ {
+ String[] excludeName = excludePackagenames[i].split( "[*]" );
+ int u = 0;
+ while ( u < excludeName.length )
+ {
+ if ( !excludeName[u].trim().equals( "" ) &&
fileList[j].indexOf( excludeName[u] ) != -1 &&
+ sourceDirectory.indexOf( excludeName[u] ) == -1 )
+ {
+ files.add( fileList[j] );
+ }
+ u++;
+ }
+ }
+ }
+
+ List excluded = new ArrayList();
+ for ( Iterator it = files.iterator(); it.hasNext(); )
+ {
+ String file = (String) it.next();
+ int idx = file.lastIndexOf( FILE_SEPARATOR );
+ String tmpStr = file.substring( 0, idx );
+ tmpStr = tmpStr.replace( '\\', '/' );
+ sourceDirectory = sourceDirectory.replace( '\\', '/' );
+ String[] srcSplit = tmpStr.split( sourceDirectory + '/' );
+ String excludedPackage = srcSplit[1].replace( '/', '.' );
+
+ if ( !excluded.contains( excludedPackage ) )
+ {
+ excluded.add( excludedPackage );
+ }
+ }
+
+ return excluded;
+ }
+
+
+ /**
+ * Convenience method that gets the files to be included in the javadoc.
+ *
+ * @param sourceDirectory the directory where the source files are located
+ * @param files the variable that contains the appended
filenames of the files to be included in the javadoc
+ * @param excludePackages the packages to be excluded in the javadocs
+ * @param FILE_SEPARATOR the standard file separator used
+ * @return a StringBuffer that contains the appended file names of the
files to be included in the javadoc
+ */
+ private StringBuffer getAllFilesFromSource( String sourceDirectory,
StringBuffer files, String[] excludePackages,
+ char FILE_SEPARATOR )
+ {
+
+ String[] fileList = FileUtils.getFilesFromExtension( sourceDirectory,
new String[]{"java"} );
+ if ( fileList != null && fileList.length != 0 )
+ {
+ StringBuffer tmpFiles = getIncludedFiles( sourceDirectory,
fileList, excludePackages, FILE_SEPARATOR );
+ files.append( tmpFiles );
+ }
+
+ return files;
+ }
+
}