1 19 20 package org.netbeans.modules.junit.output.antutils; 21 22 import java.io.BufferedReader ; 23 import java.io.File ; 24 import java.io.FileReader ; 25 import java.io.IOException ; 26 import java.util.Collection ; 27 import java.util.Collections ; 28 import java.util.ArrayList ; 29 import java.util.StringTokenizer ; 30 import java.util.logging.Level ; 31 import java.util.logging.Logger ; 32 import org.apache.tools.ant.module.spi.TaskStructure; 33 34 38 final class PatternSet { 39 40 41 private final AntProject project; 42 43 44 private Collection <String > includePatterns; 45 46 private Collection <String > excludePatterns; 47 48 50 PatternSet(AntProject project) { 51 this.project = project; 52 } 53 54 57 void handleChildrenAndAttrs(TaskStructure struct) { 58 setAttrs(struct); 59 for (TaskStructure child : struct.getChildren()) { 60 String childName = child.getName(); 61 if (childName.equals("include")) { Entry entry = new Entry(); 63 entry.handleChildrenAndAttrs(child); 64 if (entry.isApplicable()) { 65 addIncludePatterns(entry.getPattern()); 66 } 67 continue; 68 } 69 if (childName.equals("exclude")) { Entry entry = new Entry(); 71 entry.handleChildrenAndAttrs(child); 72 if (entry.isApplicable()) { 73 addExcludePatterns(entry.getPattern()); 74 } 75 continue; 76 } 77 if (childName.equals("includesfile")) { Entry entry = new Entry(); 79 entry.handleChildrenAndAttrs(child); 80 if (entry.isApplicable()) { 81 addIncludePatterns(project.resolveFile(entry.getPattern())); 82 } 83 continue; 84 } 85 if (childName.equals("excludesfile")) { Entry entry = new Entry(); 87 entry.handleChildrenAndAttrs(child); 88 if (entry.isApplicable()) { 89 addExcludePatterns(project.resolveFile(entry.getPattern())); 90 } 91 continue; 92 } 93 if (childName.equals("patternset")) { PatternSet patternSet = new PatternSet(project); 95 patternSet.handleChildrenAndAttrs(child); 96 addPatternSet(patternSet); 97 continue; 98 } 99 } 100 } 101 102 104 Collection <String > getIncludePatterns() { 105 if (includePatterns != null) { 106 return includePatterns; 107 } else { 108 return Collections.emptyList(); 109 } 110 } 111 112 114 Collection <String > getExcludePatterns() { 115 if (excludePatterns != null) { 116 return excludePatterns; 117 } else { 118 return Collections.emptyList(); 119 } 120 } 121 122 127 private void setAttrs(TaskStructure struct) { 128 String includes = struct.getAttribute("includes"); String includesFile = struct.getAttribute("includesFile"); String excludes = struct.getAttribute("excludes"); String excludesFile = struct.getAttribute("excludesFile"); 133 if (includes != null) { 134 addIncludePatterns(project.replaceProperties(includes)); 135 } 136 if (excludes != null) { 137 addExcludePatterns(project.replaceProperties(excludes)); 138 } 139 if (includesFile != null) { 140 addIncludePatterns(project.resolveFile( 141 project.replaceProperties(includesFile))); 142 } 143 if (excludesFile != null) { 144 addExcludePatterns(project.resolveFile( 145 project.replaceProperties(excludesFile))); 146 } 147 } 148 149 151 private void addIncludePatterns(String patternsString) { 152 if (includePatterns == null) { 153 includePatterns = new ArrayList <String >(); 154 } 155 addPatterns(patternsString, includePatterns); 156 } 157 158 160 private void addExcludePatterns(String patternsString) { 161 if (excludePatterns == null) { 162 excludePatterns = new ArrayList <String >(); 163 } 164 addPatterns(patternsString, excludePatterns); 165 } 166 167 169 private void addIncludePatterns(File includesFile) { 170 if (includePatterns == null) { 171 includePatterns = new ArrayList <String >(); 172 } 173 readPatterns(includesFile, includePatterns); 174 } 175 176 178 private void addExcludePatterns(File excludesFile) { 179 if (excludePatterns == null) { 180 excludePatterns = new ArrayList <String >(); 181 } 182 readPatterns(excludesFile, excludePatterns); 183 } 184 185 187 private void addPatterns(String patternsString, 188 Collection <String > patterns) { 189 StringTokenizer tokenizer = new StringTokenizer (patternsString, 190 ", "); while (tokenizer.hasMoreTokens()) { 192 patterns.add(tokenizer.nextToken()); 193 } 194 } 195 196 198 private void readPatterns(File patternsFile, 199 Collection <String > patterns) { 200 BufferedReader fileReader = null; 201 try { 202 fileReader = new BufferedReader (new FileReader (patternsFile)); 203 for (String line = fileReader.readLine(); line != null; ) { 204 if (line.length() != 0) { 205 addPatterns(project.replaceProperties(line), patterns); 206 } 207 } 208 } catch (IOException ex) { 209 Logger.getLogger(getClass().getName()) 210 .log(Level.INFO, 211 "failed to read Ant patterns file " + patternsFile.getAbsolutePath(), 213 ex); 214 } finally { 215 if (fileReader != null) { 216 try { 217 fileReader.close(); 218 } catch (IOException ex2) { 219 } 221 } 222 } 223 } 224 225 227 private void addPatternSet(PatternSet p) { 228 if (p.includePatterns != null) { 229 if (includePatterns != null) { 230 includePatterns.addAll(p.includePatterns); 231 } else { 232 includePatterns = p.includePatterns; 233 } 234 } 235 236 if (p.excludePatterns != null) { 237 if (excludePatterns != null) { 238 excludePatterns.addAll(p.excludePatterns); 239 } else { 240 excludePatterns = p.excludePatterns; 241 } 242 } 243 } 244 245 246 249 class Entry { 250 251 252 private String pattern; 253 254 private String ifCondition; 255 256 private String unlessCondition; 257 258 260 void handleChildrenAndAttrs(TaskStructure struct) { 261 setAttrs(struct); 262 } 263 264 269 private void setAttrs(TaskStructure struct) { 270 pattern = struct.getAttribute("name"); ifCondition = struct.getAttribute("if"); unlessCondition = struct.getAttribute("unless"); } 274 275 283 boolean isApplicable() { 284 return ((ifCondition == null) 285 || project.toBoolean( 286 project.replaceProperties(ifCondition))) 287 && 288 ((unlessCondition == null) 289 || !project.toBoolean( 290 project.replaceProperties(unlessCondition))); 291 } 292 293 295 String getPattern() { 296 return project.replaceProperties(pattern); 297 } 298 299 } 300 301 } 302 | Popular Tags |