1 29 package net.sourceforge.groboutils.pmti.v1.autodoc.v1.xml; 30 31 32 import java.io.File ; 33 import java.io.Writer ; 34 import java.io.StringWriter ; 35 import java.io.PrintWriter ; 36 import java.io.IOException ; 37 import java.io.FilenameFilter ; 38 39 import java.util.Vector ; 40 import java.util.Enumeration ; 41 42 import net.sourceforge.groboutils.pmti.v1.itf.parser.IParserGenerator; 43 import net.sourceforge.groboutils.pmti.v1.itf.parser.IParser; 44 import net.sourceforge.groboutils.pmti.v1.itf.IIssueRecord; 45 import net.sourceforge.groboutils.pmti.v1.itf.ITestIssueRecord; 46 47 import org.xml.sax.Parser ; 48 49 50 58 public class XMLFileParserGenerator implements IParserGenerator 59 { 60 public static final String DEFAULT_PREFIX = "ISSUES-"; 61 public static final String DEFAULT_POSTFIX = ".xml"; 62 63 private Vector sourceDirs = new Vector (); 64 private String filePrefix; 65 private String filePostfix; 66 private Parser parser; 67 68 69 72 private static class PrefixPostfixFilter implements FilenameFilter 73 { 74 private String pre; 75 private String post; 76 77 public PrefixPostfixFilter( String pre, String post ) 78 { 79 this.pre = pre.toLowerCase(); 80 this.post = post.toLowerCase(); 81 } 82 83 public boolean accept( File dir, String name ) 84 { 85 String n = name.toLowerCase(); 86 return ( n.startsWith( this.pre ) 87 && n.endsWith( this.post ) ); 88 } 89 } 90 91 92 public XMLFileParserGenerator() 93 { 94 this( (File [])null, null, null ); 95 } 96 97 98 public XMLFileParserGenerator( File dir ) 99 { 100 this( new File [] { dir }, null, null ); 101 } 102 103 104 public XMLFileParserGenerator( File dir, String prefix, String postfix ) 105 { 106 this( new File [] { dir }, prefix, postfix ); 107 } 108 109 110 public XMLFileParserGenerator( File dirs[] ) 111 { 112 this( dirs, null, null ); 113 } 114 115 116 public XMLFileParserGenerator( File dirs[], String prefix, String postfix ) 117 { 118 addSourceDirs( dirs ); 119 setFilePrefix( prefix ); 120 setFilePostfix( postfix ); 121 } 122 123 124 127 public void setSAXParser( Parser p ) 128 { 129 if (p != null) 130 { 131 this.parser = p; 132 } 133 } 134 135 136 145 public void setFilePrefix( String prefix ) 146 { 147 if (prefix == null) 148 { 149 prefix = DEFAULT_PREFIX; 150 } 151 this.filePrefix = prefix; 152 } 153 154 155 163 public void setFilePostfix( String postfix ) 164 { 165 if (postfix == null) 166 { 167 postfix = DEFAULT_POSTFIX; 168 } 169 this.filePostfix = postfix; 170 } 171 172 173 183 public void addSourceDir( File dir ) 184 { 185 addSourceDirs( new File [] { dir } ); 186 } 187 188 189 199 public void addSourceDirs( File dirs[] ) 200 { 201 if (dirs == null) 202 { 203 return; 204 } 205 206 for ( int i = 0; i < dirs.length; ++i ) 208 { 209 if ( dirs[i] != null 210 && dirs[i].exists() 211 && dirs[i].isDirectory() ) 212 { 213 this.sourceDirs.addElement( dirs[i] ); 214 } 215 } 216 } 217 218 219 222 public IParser[] createParsers() 223 { 224 Vector parsers = new Vector (); 225 226 Enumeration dirs = this.sourceDirs.elements(); 227 while ( dirs.hasMoreElements() ) 228 { 229 File f[] = findIssueFiles( (File )dirs.nextElement() ); 230 for ( int i = 0; i < f.length; ++i ) 231 { 232 IParser p = createParser( f[i] ); 233 if ( p != null ) 234 { 235 parsers.addElement( p ); 236 } 237 } 238 } 239 240 IParser p[] = new IParser[ parsers.size() ]; 241 parsers.copyInto( p ); 242 243 return p; 244 } 245 246 247 protected File [] findIssueFiles( File dir ) 248 { 249 FilenameFilter filter = createFilter(); 250 String found[] = dir.list( filter ); 251 252 File ret[] = new File [ found.length ]; 253 for ( int i = 0; i < found.length; ++i ) 254 { 255 ret[i] = new File ( dir, found[i] ); 256 } 257 return ret; 258 } 259 260 261 protected IParser createParser( File issueFile ) 262 { 263 return new XMLFileParser( issueFile, this.parser ); 264 } 265 266 267 protected FilenameFilter createFilter() 268 { 269 return new PrefixPostfixFilter( this.filePrefix, this.filePostfix ); 270 } 271 } 272 273 | Popular Tags |