1 19 20 package edu.umd.cs.findbugs.config; 21 22 import java.util.HashMap ; 23 import java.util.HashSet ; 24 import java.util.Iterator ; 25 import java.util.Map ; 26 import java.util.Set ; 27 import java.util.StringTokenizer ; 28 29 import edu.umd.cs.findbugs.BugInstance; 30 import edu.umd.cs.findbugs.BugPattern; 31 import edu.umd.cs.findbugs.BugProperty; 32 import edu.umd.cs.findbugs.Detector; 33 import edu.umd.cs.findbugs.DetectorFactoryCollection; 34 import edu.umd.cs.findbugs.I18N; 35 36 47 public class ProjectFilterSettings implements Cloneable { 48 49 public static final String HIGH_PRIORITY = "High"; 50 51 52 public static final String MEDIUM_PRIORITY = "Medium"; 53 54 55 public static final String LOW_PRIORITY = "Low"; 56 57 58 public static final String EXPERIMENTAL_PRIORITY = "Experimental"; 59 60 61 public static final String DEFAULT_PRIORITY = MEDIUM_PRIORITY; 62 63 64 private static Map <String , Integer > priorityNameToValueMap = new HashMap <String , Integer >(); 65 static { 66 priorityNameToValueMap.put(HIGH_PRIORITY, (Integer )(Detector.HIGH_PRIORITY)); 67 priorityNameToValueMap.put(MEDIUM_PRIORITY, (Integer )(Detector.NORMAL_PRIORITY)); 68 priorityNameToValueMap.put(LOW_PRIORITY, (Integer )(Detector.LOW_PRIORITY)); 69 priorityNameToValueMap.put(EXPERIMENTAL_PRIORITY, (Integer )(Detector.EXP_PRIORITY)); 70 } 71 72 75 private static String FIELD_DELIMITER="|"; 76 79 private static String LISTITEM_DELIMITER=","; 80 81 private Set <String > activeBugCategorySet; private Set <String > hiddenBugCategorySet; 84 private String minPriority; 85 private int minPriorityAsInt; 86 private boolean displayFalseWarnings; 87 88 92 private ProjectFilterSettings() { 93 DetectorFactoryCollection.instance(); 95 this.activeBugCategorySet = new HashSet <String >( I18N.instance().getBugCategories() ); 97 this.hiddenBugCategorySet = new HashSet <String >(); 98 setMinPriority(DEFAULT_PRIORITY); 99 this.displayFalseWarnings = false; 100 } 101 102 109 public static ProjectFilterSettings createDefault() { 110 ProjectFilterSettings result = new ProjectFilterSettings(); 111 112 result.setMinPriority(DEFAULT_PRIORITY); 114 115 return result; 116 } 117 118 124 public static ProjectFilterSettings fromEncodedString(String s) { 125 ProjectFilterSettings result = new ProjectFilterSettings(); 126 127 if (s.length() > 0) { 128 int bar = s.indexOf(FIELD_DELIMITER); 129 String minPriority; 130 if (bar >= 0) { 131 minPriority = s.substring(0, bar); 132 s = s.substring(bar+1); 133 } else { 134 minPriority = s; 135 s = ""; 136 } 137 if (priorityNameToValueMap.get(minPriority) == null) 138 minPriority = DEFAULT_PRIORITY; 139 result.setMinPriority(minPriority); 140 } 141 142 if (s.length() > 0) { 143 int bar = s.indexOf(FIELD_DELIMITER); 144 String categories; 145 if (bar >= 0) { 146 categories = s.substring(0, bar); 147 s = s.substring(bar+1); 148 } else { 149 categories = s; 150 s = ""; 151 } 152 StringTokenizer t = new StringTokenizer (categories, LISTITEM_DELIMITER); 153 while (t.hasMoreTokens()) { 154 String category = t.nextToken(); 155 result.addCategory(category); 159 } 160 } 161 162 if (s.length() > 0) { 163 int bar = s.indexOf(FIELD_DELIMITER); 164 String displayFalseWarnings; 165 if (bar >= 0) { 166 displayFalseWarnings = s.substring(0, bar); 167 s = s.substring(bar+1); 168 } else { 169 displayFalseWarnings = s; 170 s = ""; 171 } 172 result.setDisplayFalseWarnings(Boolean.valueOf(displayFalseWarnings).booleanValue()); 173 } 174 175 if (s.length() > 0) { 176 assert true; 178 } 179 180 181 182 return result; 183 184 } 185 186 187 195 public static void hiddenFromEncodedString(ProjectFilterSettings result, String s) { 196 197 if (s.length() > 0) { 198 int bar = s.indexOf(FIELD_DELIMITER); 199 String categories; 200 if (bar >= 0) { 201 categories = s.substring(0, bar); 202 } else { 203 categories = s; 204 } 205 StringTokenizer t = new StringTokenizer (categories, LISTITEM_DELIMITER); 206 while (t.hasMoreTokens()) { 207 String category = t.nextToken(); 208 result.removeCategory(category); 209 } 210 } 211 212 } 213 214 215 222 public boolean displayWarning(BugInstance bugInstance) { 223 224 int priority = bugInstance.getPriority(); 225 if (priority > getMinPriorityAsInt()) 226 return false; 227 228 BugPattern bugPattern = bugInstance.getBugPattern(); 229 230 if (bugPattern != null && !containsCategory(bugPattern.getCategory())) 234 return false; 235 236 if (!displayFalseWarnings) { 237 boolean isFalseWarning = 238 !Boolean.valueOf(bugInstance.getProperty(BugProperty.IS_BUG, "true")).booleanValue(); 239 if (isFalseWarning) 240 return false; 241 } 242 243 return true; 244 } 245 246 251 public void setMinPriority(String minPriority) { 252 this.minPriority = minPriority; 253 254 Integer value = priorityNameToValueMap.get(minPriority); 255 if (value == null) { 256 value = priorityNameToValueMap.get(DEFAULT_PRIORITY); 257 if (value == null) 258 throw new IllegalStateException (); 259 } 260 261 this.minPriorityAsInt = value.intValue(); 262 263 } 264 265 270 public String getMinPriority() { 271 return this.minPriority; 272 } 273 274 279 public int getMinPriorityAsInt() { 280 return minPriorityAsInt; 281 } 282 283 288 public void addCategory(String category) { 289 this.hiddenBugCategorySet.remove(category); 290 this.activeBugCategorySet.add(category); 291 } 292 293 298 public void removeCategory(String category) { 299 this.hiddenBugCategorySet.add(category); 300 this.activeBugCategorySet.remove(category); 301 } 302 303 307 public void clearAllCategories() { 308 this.activeBugCategorySet.addAll(hiddenBugCategorySet); 309 this.hiddenBugCategorySet.clear(); 310 } 311 312 319 public boolean containsCategory(String category) { 320 return !hiddenBugCategorySet.contains(category); 322 } 323 324 333 public Set <String > getActiveCategorySet() { 334 Set <String > result = new HashSet <String >(); 335 result.addAll(this.activeBugCategorySet); 336 return result; 337 } 338 339 345 public void setDisplayFalseWarnings(boolean displayFalseWarnings) { 346 this.displayFalseWarnings = displayFalseWarnings; 347 } 348 349 354 public boolean displayFalseWarnings() { 355 return displayFalseWarnings; 356 } 357 358 363 public String hiddenToEncodedString() { 364 StringBuffer buf = new StringBuffer (); 365 for (Iterator <String > i = hiddenBugCategorySet.iterator(); i.hasNext(); ) { 367 buf.append(i.next()); 368 if (i.hasNext()) 369 buf.append(LISTITEM_DELIMITER); 370 } 371 buf.append(FIELD_DELIMITER); 372 373 return buf.toString(); 374 } 375 376 381 public String toEncodedString() { 382 StringBuffer buf = new StringBuffer (); 384 buf.append(getMinPriority()); 385 386 buf.append(FIELD_DELIMITER); 389 for (Iterator <String > i = activeBugCategorySet.iterator(); i.hasNext(); ) { 390 buf.append(i.next()); 391 if (i.hasNext()) 392 buf.append(LISTITEM_DELIMITER); 393 394 } 395 396 buf.append(FIELD_DELIMITER); 398 buf.append(displayFalseWarnings ? "true" : "false"); 399 400 return buf.toString(); 401 } 402 403 @Override 404 public String toString() { 405 return toEncodedString(); 406 } 407 408 411 @Override 412 public boolean equals(Object obj) { 413 if (obj == null || obj.getClass() != this.getClass()) 414 return false; 415 ProjectFilterSettings other = (ProjectFilterSettings) obj; 416 417 if (!this.getMinPriority().equals(other.getMinPriority())) 418 return false; 419 420 if (!this.hiddenBugCategorySet.equals(other.hiddenBugCategorySet)) 422 return false; 423 424 if (this.displayFalseWarnings != other.displayFalseWarnings) 425 return false; 426 427 return true; 428 } 429 430 431 434 @Override 435 public Object clone() { 436 try { 437 ProjectFilterSettings clone = (ProjectFilterSettings) super.clone(); 439 440 clone.hiddenBugCategorySet = new HashSet <String >(); 442 clone.hiddenBugCategorySet.addAll(this.hiddenBugCategorySet); 443 clone.activeBugCategorySet = new HashSet <String >(); 444 clone.activeBugCategorySet.addAll(this.activeBugCategorySet); 445 clone.setMinPriority(this.getMinPriority()); 446 clone.displayFalseWarnings = this.displayFalseWarnings; 447 448 return clone; 449 } catch (CloneNotSupportedException e) { 450 throw new AssertionError (e); 452 } 453 454 } 455 456 459 @Override 460 public int hashCode() { 461 return minPriority.hashCode() 462 + 1009 * hiddenBugCategorySet.hashCode() 463 + (displayFalseWarnings ? 7919 : 0); 464 } 465 466 470 public static String getIntPriorityAsString(int prio) { 471 String minPriority; 472 switch (prio) { 473 case Detector.EXP_PRIORITY: 474 minPriority = ProjectFilterSettings.EXPERIMENTAL_PRIORITY; 475 break; 476 case Detector.LOW_PRIORITY: 477 minPriority = ProjectFilterSettings.LOW_PRIORITY; 478 break; 479 case Detector.NORMAL_PRIORITY: 480 minPriority = ProjectFilterSettings.MEDIUM_PRIORITY; 481 break; 482 case Detector.HIGH_PRIORITY: 483 minPriority = ProjectFilterSettings.HIGH_PRIORITY; 484 break; 485 default: 486 minPriority = ProjectFilterSettings.DEFAULT_PRIORITY; 487 break; 488 } 489 return minPriority; 490 } 491 } 492 493 | Popular Tags |