1 19 package org.apache.avalon.fortress.tools; 20 21 import java.io.File ; 22 import java.util.ArrayList ; 23 import java.util.HashMap ; 24 import java.util.Iterator ; 25 import java.util.List ; 26 27 import org.apache.maven.model.FileSet; 28 import org.apache.maven.plugin.AbstractMojo; 29 import org.apache.maven.plugin.MojoExecutionException; 30 import org.apache.maven.plugin.MojoFailureException; 31 import org.codehaus.plexus.util.DirectoryScanner; 32 33 import com.thoughtworks.qdox.JavaDocBuilder; 34 import com.thoughtworks.qdox.model.DefaultDocletTagFactory; 35 import com.thoughtworks.qdox.model.DocletTagFactory; 36 import com.thoughtworks.qdox.model.JavaClass; 37 import com.thoughtworks.qdox.model.JavaSource; 38 39 50 public class AbstractQDoxMojo extends AbstractMojo 51 { 52 53 57 private File destDir; 58 59 64 private FileSet[] filesets; 65 66 70 private String baseDir; 71 72 76 private String defaultIncludes; 77 78 protected HashMap fileMap = new HashMap (); 79 80 protected ArrayList allSources = new ArrayList (); 81 82 protected ArrayList allClasses = new ArrayList (); 83 84 public void execute() throws MojoExecutionException, MojoFailureException 85 { 86 validateAttributes(); 87 buildFileMap(); 88 JavaDocBuilder builder = new JavaDocBuilder( createDocletTagFactory() ); 89 90 builder.getClassLibrary().addClassLoader( getClass().getClassLoader() ); 92 mergeBuilderSources( builder ); 93 JavaSource[] sources = builder.getSources(); 94 processSources( sources ); 95 } 96 97 protected void buildFileMap() 98 { 99 for ( int i = 0; i < filesets.length; i++ ) 100 { 101 FileSet fs = filesets[ i ]; 102 DirectoryScanner ds = new DirectoryScanner(); 103 ds.setBasedir( fs.getDirectory() ); 104 if ( fs.getIncludes().size() > 0 ) 105 { 106 ds.setIncludes( (String []) fs.getIncludes().toArray( new String [0] ) ); 107 } 108 if ( fs.getExcludes().size() > 0 ) 109 { 110 ds.setExcludes( (String []) fs.getExcludes().toArray( new String [0] ) ); 111 } 112 ds.scan(); 113 String [] srcFiles = ds.getIncludedFiles(); 114 buildFileMap( new File ( fs.getDirectory() ), srcFiles ); 115 } 116 } 117 118 protected void buildFileMap( File directory, String [] sourceFiles ) 119 { 120 for ( int i = 0; i < sourceFiles.length; i++ ) 121 { 122 File src = new File ( directory, sourceFiles[ i ] ); 123 fileMap.put( src.getAbsolutePath(), src ); 124 } 125 } 126 127 protected DocletTagFactory createDocletTagFactory() 128 { 129 return new DefaultDocletTagFactory(); 130 } 131 132 private void mergeBuilderSources( JavaDocBuilder builder ) 133 { 134 for ( Iterator iterator = fileMap.keySet().iterator(); iterator.hasNext(); ) 135 { 136 String sourceFile = (String ) iterator.next(); 137 builder.addSourceTree( (File ) fileMap.get( sourceFile ) ); 138 139 } 140 } 141 142 protected void processSources( JavaSource[] sources ) 143 { 144 for ( int i = 0; i < sources.length; i++ ) 145 { 146 JavaSource source = sources[ i ]; 147 allSources.add( source ); 148 JavaClass[] classes = source.getClasses(); 149 processClasses( classes ); 150 } 151 } 152 153 protected void processClasses( JavaClass[] classes ) 154 { 155 for ( int j = 0; j < classes.length; j++ ) 156 { 157 JavaClass clazz = classes[ j ]; 158 allClasses.add( clazz ); 159 } 160 } 161 162 protected void validateAttributes() throws MojoExecutionException 163 { 164 if ( filesets == null || filesets.length == 0 ) 165 { 166 filesets = createDefaultFileset(); 167 } 168 } 169 170 protected FileSet[] createDefaultFileset() 171 { 172 FileSet[] defaultFileSet = new FileSet[] {new FileSet()}; 173 List defaultPatternList = new ArrayList (); 174 175 defaultPatternList.add(defaultIncludes); 176 defaultFileSet[0].setIncludes(defaultPatternList); 177 defaultFileSet[0].setDirectory(baseDir); 178 179 return defaultFileSet; 180 } 181 182 public File getDestDir() 183 { 184 return destDir; 185 } 186 } 187 | Popular Tags |