Author: ltheussl Date: Wed Sep 29 13:09:25 2010 New Revision: 1002602 URL: http://svn.apache.org/viewvc?rev=1002602&view=rev Log: [DOXIA-412] Linkcheck: Add support for wildcards in excludedPages
Modified: maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java Modified: maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java?rev=1002602&r1=1002601&r2=1002602&view=diff ============================================================================== --- maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java (original) +++ maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java Wed Sep 29 13:09:25 2010 @@ -20,7 +20,6 @@ package org.apache.maven.doxia.linkcheck */ import java.io.File; -import java.io.FilenameFilter; import java.io.IOException; import java.io.Writer; import java.nio.charset.Charset; @@ -28,11 +27,11 @@ import java.nio.charset.UnsupportedChars import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; -import java.util.Locale; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.apache.maven.doxia.linkcheck.model.LinkcheckFile; import org.apache.maven.doxia.linkcheck.model.LinkcheckFileResult; import org.apache.maven.doxia.linkcheck.model.LinkcheckModel; @@ -45,6 +44,8 @@ import org.apache.maven.doxia.linkcheck. import org.apache.maven.doxia.linkcheck.validation.MailtoLinkValidator; import org.apache.maven.doxia.linkcheck.validation.OfflineHTTPLinkValidator; import org.apache.maven.doxia.linkcheck.validation.OnlineHTTPLinkValidator; + +import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.ReaderFactory; import org.codehaus.plexus.util.StringUtils; @@ -67,9 +68,6 @@ public final class DefaultLinkCheck /** Log. */ private static final Log LOG = LogFactory.getLog( DefaultLinkCheck.class ); - /** FilenameFilter. */ - private static final FilenameFilter CUSTOM_FF = new DefaultLinkCheck.CustomFilenameFilter(); - /** One MegaByte. */ private static final long MEG = 1024 * 1024; @@ -229,7 +227,14 @@ public final class DefaultLinkCheck LOG.info( "Begin to check links in files..." ); - findAndCheckFiles( this.basedir, model ); + try + { + findAndCheckFiles( this.basedir, model ); + } + catch ( IOException e ) + { + throw new LinkCheckException( "Could not scan base directory: " + basedir.getAbsolutePath(), e ); + } LOG.info( "Links checked." ); @@ -292,16 +297,6 @@ public final class DefaultLinkCheck } /** - * Get the base directory for the files to be linkchecked. - * - * @return the base directory - */ - private File getBasedir() - { - return this.basedir; - } - - /** * Returns the excluded links. * Could contains a link, i.e. <code>http://maven.apache.org/</code>, * or pattern links i.e. <code>http://maven.apache.org/**/*.html</code> @@ -314,13 +309,30 @@ public final class DefaultLinkCheck } /** - * Returns the excluded pages. + * Gets the comma separated list of effective exclude patterns. * - * @return String[] + * @return The comma separated list of effective exclude patterns, never <code>null</code>. */ - private String[] getExcludedPages() + private String getExcludedPages() { - return this.excludedPages; + LinkedList patternList = new LinkedList( FileUtils.getDefaultExcludesAsList() ); + + if ( excludedPages != null ) + { + patternList.addAll( Arrays.asList( excludedPages ) ); + } + + return StringUtils.join( patternList.iterator(), "," ); + } + + /** + * Gets the comma separated list of effective include patterns. + * + * @return The comma separated list of effective include patterns, never <code>null</code>. + */ + private String getIncludedPages() + { + return "**/*.html,**/*.htm"; } /** @@ -346,16 +358,6 @@ public final class DefaultLinkCheck } /** - * Sets the LinkValidatorManager. - * - * @param validator the LinkValidatorManager to set - */ - private void setLinkValidatorManager( LinkValidatorManager validator ) - { - this.lvm = validator; - } - - /** * Returns the LinkValidatorManager. * If this hasn't been set before with {...@link #setLinkValidatorManager(LinkValidatorManager)} * a default LinkValidatorManager will be returned. @@ -412,77 +414,44 @@ public final class DefaultLinkCheck * @param base the base directory to traverse. */ private void findAndCheckFiles( File base, LinkcheckModel model ) + throws IOException { - File[] f = base.listFiles( CUSTOM_FF ); + Iterator files = FileUtils.getFiles( base, getIncludedPages(), getExcludedPages() ).iterator(); - if ( f != null ) + while( files.hasNext() ) { - File file; - for ( int i = 0; i < f.length; i++ ) - { - file = f[i]; - - if ( file.isDirectory() ) - { - findAndCheckFiles( file, model ); - } - else - { - if ( LOG.isDebugEnabled() ) - { - LOG.debug( " File - " + file ); - } - - if ( getExcludedPages() != null ) - { - String diff = - StringUtils.difference( getBasedir().getAbsolutePath(), file.getAbsolutePath() ); - if ( diff.startsWith( File.separator ) ) - { - diff = diff.substring( 1 ); - } + checkFile( (File) files.next(), model ); + } + } - if ( Arrays.binarySearch( getExcludedPages(), diff ) >= 0 ) - { - if ( LOG.isDebugEnabled() ) - { - LOG.debug( " Ignored analysis of " + file ); - } + private void checkFile( File file, LinkcheckModel model ) + { + if ( LOG.isDebugEnabled() ) + { + LOG.debug( " File - " + file ); + } - continue; - } - } + String fileRelativePath = file.getAbsolutePath(); - String fileRelativePath = file.getAbsolutePath(); - if ( fileRelativePath.startsWith( this.basedir.getAbsolutePath() ) ) - { - fileRelativePath = - fileRelativePath.substring( this.basedir.getAbsolutePath().length() + 1 ); - } - fileRelativePath = fileRelativePath.replace( '\\', '/' ); + if ( fileRelativePath.startsWith( this.basedir.getAbsolutePath() ) ) + { + fileRelativePath = fileRelativePath.substring( this.basedir.getAbsolutePath().length() + 1 ); + } - LinkcheckFile linkcheckFile = new LinkcheckFile(); - linkcheckFile.setAbsolutePath( file.getAbsolutePath() ); - linkcheckFile.setRelativePath( fileRelativePath ); + fileRelativePath = fileRelativePath.replace( '\\', '/' ); - check( linkcheckFile ); + LinkcheckFile linkcheckFile = new LinkcheckFile(); + linkcheckFile.setAbsolutePath( file.getAbsolutePath() ); + linkcheckFile.setRelativePath( fileRelativePath ); - model.addFile( linkcheckFile ); + check( linkcheckFile ); - if ( model.getFiles().size() % 100 == 0 ) - { - if ( LOG.isInfoEnabled() ) - { - LOG.info( "Found " + model.getFiles().size() + " files so far." ); - } - } - } - } + model.addFile( linkcheckFile ); - file = null; + if ( ( model.getFiles().size() % 100 == 0 ) && LOG.isInfoEnabled() ) + { + LOG.info( "Found " + model.getFiles().size() + " files so far." ); } - - f = null; } /** @@ -697,28 +666,4 @@ public final class DefaultLinkCheck } return result; } - - /** Custom FilenameFilter used to search html files */ - static class CustomFilenameFilter - implements FilenameFilter - { - /** {...@inheritdoc} */ - public boolean accept( File dir, String name ) - { - File n = new File( dir, name ); - - if ( n.isDirectory() ) - { - return true; - } - - if ( name.toLowerCase( Locale.ENGLISH ).endsWith( ".html" ) - || name.toLowerCase( Locale.ENGLISH ).endsWith( ".htm" ) ) - { - return true; - } - - return false; - } - } }