1 19 20 package edu.umd.cs.findbugs.gui2; 21 22 import java.io.File ; 23 import java.io.IOException ; 24 import java.io.InputStream ; 25 import java.io.ObjectInputStream ; 26 import java.io.ObjectOutputStream ; 27 import java.io.OutputStream ; 28 import java.io.Serializable ; 29 import java.util.ArrayList ; 30 import java.util.LinkedList ; 31 import java.util.List ; 32 33 import edu.umd.cs.findbugs.BugInstance; 34 import edu.umd.cs.findbugs.Project; 35 import edu.umd.cs.findbugs.gui2.BugTreeModel.BranchOperationException; 36 37 41 public class ProjectSettings implements Serializable 42 { 43 private static final long serialVersionUID = 6505872267795979672L; 44 45 private ProjectSettings() 47 { 48 allMatchers = new CompoundMatcher(); 49 suppressionMatcher = new SuppressionMatcher(); 50 filters = new ArrayList <FilterMatcher>(); 51 allMatchers.add(suppressionMatcher); 52 } 53 private static ProjectSettings instance; 54 public static ProjectSettings newInstance() 55 { 56 instance = new ProjectSettings(); 57 PreferencesFrame.getInstance().updateFilterPanel(); 58 PreferencesFrame.getInstance().clearSuppressions(); 59 return instance; 60 } 61 public static ProjectSettings getInstance() 62 { 63 if (instance == null) 64 instance = new ProjectSettings(); 65 return instance; 66 } 67 68 71 private SuppressionMatcher suppressionMatcher; 72 73 76 private ArrayList <FilterMatcher> filters; 77 78 81 private CompoundMatcher allMatchers; 82 83 86 private int maxSizeOfPreviousComments; 87 88 public static void loadInstance(InputStream in) 89 { 90 try 91 { 92 instance = (ProjectSettings) new ObjectInputStream (in).readObject(); 93 PreferencesFrame.getInstance().updateFilterPanel(); 94 for (BugInstance bug: instance.getSuppressionMatcher()) 95 { 96 PreferencesFrame.getInstance().suppressionsChanged(new BugLeafNode(bug)); 97 } 98 } 99 catch (ClassNotFoundException e) 100 { 101 if (MainFrame.DEBUG) System.err.println("Error in deserializing Settings:"); 102 Debug.println(e); 103 } 104 catch (IOException e) 105 { 106 if (MainFrame.DEBUG) System.err.println("IO error in deserializing Settings:"); 107 Debug.println(e); 108 instance=newInstance(); 109 } 110 } 111 112 public void save(OutputStream out) 113 { 114 try 115 { 116 new ObjectOutputStream (out).writeObject(this); 117 } 118 catch (IOException e) 119 { 120 if (MainFrame.DEBUG) System.err.println("Error serializing Settings:"); 121 Debug.println(e); 122 } 123 } 124 125 SuppressionMatcher getSuppressionMatcher() 126 { 127 return suppressionMatcher; 128 } 129 130 void setSuppressionMatcher(SuppressionMatcher suppressionMatcher) 131 { 132 this.suppressionMatcher = suppressionMatcher; 133 } 134 135 CompoundMatcher getAllMatchers() 136 { 137 return allMatchers; 138 } 139 140 public void addFilter(FilterMatcher filter) 141 { 142 filters.add(filter); 143 allMatchers.add(filter); 144 if (!(filter instanceof StackedFilterMatcher)) 145 FilterMatcher.notifyListeners(FilterListener.FILTERING,null); 146 else 147 { 148 StackedFilterMatcher theSame= (StackedFilterMatcher) filter; 149 FilterMatcher[] filtersInStack=theSame.getFilters(); 150 ArrayList <Sortables> order=MainFrame.getInstance().getSorter().getOrder(); 151 int sizeToCheck=filtersInStack.length; 152 List <Sortables> sortablesToCheck=order.subList(0, sizeToCheck); 153 Debug.println("Size to check" + sizeToCheck + " checking list" + sortablesToCheck); 154 Debug.println("checking filters"); 155 ArrayList <String > almostPath=new ArrayList <String >(); 156 ArrayList <Sortables> almostPathSortables=new ArrayList <Sortables>(); 157 for (int x=0; x< sortablesToCheck.size();x++) 158 { 159 Sortables s=sortablesToCheck.get(x); 160 for (FilterMatcher fm:filtersInStack) 161 { 162 if (s.equals(fm.getFilterBy())) 163 { 164 almostPath.add(fm.getValue()); 165 almostPathSortables.add(fm.getFilterBy()); 166 } 167 } 168 } 169 if (almostPath.size()==filtersInStack.length) 170 { 171 ArrayList <String > finalPath=new ArrayList <String >(); 172 for (int x=0;x<almostPath.size();x++) 173 { 174 Sortables s=almostPathSortables.get(x); 175 if (MainFrame.getInstance().getSorter().getOrderBeforeDivider().contains(s)) 176 finalPath.add(almostPath.get(x)); 177 } 178 BugTreeModel model=((BugTreeModel)(MainFrame.getInstance().getTree().getModel())); 179 try { 180 model.sendEvent(model.removeBranch(finalPath), 0); } 182 catch (BranchOperationException e) 183 { 184 throw new IllegalStateException ("They added a stacked filter on a branch that doesn't exist... Whaa?"); 185 } 186 } 187 else 188 { 189 FilterMatcher.notifyListeners(FilterListener.FILTERING,null); 190 throw new IllegalStateException ("What huh? How'd they add a stacked filter matcher bigger than the number of branches in the tree?!"); 191 } 192 } 193 PreferencesFrame.getInstance().updateFilterPanel(); 194 MainFrame.getInstance().updateStatusBar(); 195 } 196 197 public void addFilters(FilterMatcher[] newFilters) 198 { 199 for (FilterMatcher i : newFilters) 200 if (!filters.contains(i)) 201 { 202 filters.add(i); 203 allMatchers.add(i); 204 } 205 else { 207 filters.get(filters.indexOf(i)).setActive(true); 208 } 210 FilterMatcher.notifyListeners(FilterListener.FILTERING, null); 211 PreferencesFrame.getInstance().updateFilterPanel(); 212 MainFrame.getInstance().updateStatusBar(); 213 } 214 215 public boolean removeFilter(FilterMatcher filter) 216 { 217 boolean result = filters.remove(filter) && allMatchers.remove(filter); 218 FilterMatcher.notifyListeners(FilterListener.UNFILTERING,null); 219 PreferencesFrame.getInstance().updateFilterPanel(); 220 MainFrame.getInstance().updateStatusBar(); 221 return result; 222 } 223 224 ArrayList <FilterMatcher> getAllFilters() 225 { 226 return filters; 227 } 228 229 232 public int getMaxSizeOfPreviousComments(){ 233 return maxSizeOfPreviousComments; 234 } 235 236 240 public void setMaxSizeOfPreviousComments(int num){ 241 maxSizeOfPreviousComments = num; 242 } 243 } | Popular Tags |