1 19 20 package gui.windowsystem; 21 22 import javax.swing.JMenuBar ; 23 import javax.swing.JPopupMenu ; 24 import javax.swing.JMenu ; 25 import javax.swing.JMenuItem ; 26 import javax.swing.MenuElement ; 27 28 import java.util.Collection ; 29 import java.util.ArrayList ; 30 import java.util.TreeSet ; 31 import java.util.Iterator ; 32 import java.util.HashMap ; 33 import java.util.HashSet ; 34 import java.util.StringTokenizer ; 35 36 import java.io.PrintStream ; 37 38 import org.netbeans.jemmy.operators.JMenuBarOperator; 39 40 import org.netbeans.jellytools.MainWindowOperator; 41 42 43 46 public class MenuChecker { 47 48 49 public MenuChecker() { 50 } 51 52 56 public boolean containsMenuItem(javax.swing.JPopupMenu popup, String item) { 57 MenuElement [] elements = popup.getSubElements(); 58 for(int k=0; k < elements.length; k++) { 59 60 if(elements[k] instanceof JMenuItem ) { 61 if(item.equals(((JMenuItem )elements[k]).getText())) return true; 62 } 63 } 64 return false; 65 } 66 67 69 public static void visitMenuBar(JMenuBar menu) { 70 MenuElement [] elements = menu.getSubElements(); 71 72 JMenuBarOperator op = new JMenuBarOperator(menu); 73 74 for(int k=0; k < elements.length; k++) { 75 if(elements[k] instanceof JMenuItem ) { 76 op.pushMenu(((JMenuItem )elements[k]).getText(), "/", true, true); 77 try { 78 op.wait(200); 79 }catch(Exception e) {} 80 } 81 } 82 } 83 84 87 public static ArrayList getMenuBarArrayList(JMenuBar menu) { 88 visitMenuBar(menu); 89 90 MenuElement [] elements = menu.getSubElements(); 91 92 ArrayList list = new ArrayList (); 93 for(int k=0; k < elements.length; k++) { 94 if(elements[k] instanceof JMenuItem ) { 95 list.add(NbMenu.getNbMenu((JMenuItem )elements[k])); 96 JMenuBarOperator menuOp = new JMenuBarOperator(menu); 97 list.add(getMenuArrayList(menuOp.getMenu(k))); 98 } 99 104 } 105 return list; 106 } 107 108 111 public static ArrayList getMenuArrayList(JMenu menu) { 112 MenuElement [] elements = menu.getSubElements(); 113 ArrayList list = new ArrayList (); 114 115 for(int k=0; k < elements.length; k++) { 116 117 if(elements[k] instanceof JPopupMenu ) 118 list.add(getPopupMenuArrayList((JPopupMenu )elements[k])); 119 120 if(elements[k] instanceof JMenuItem ) 121 list.add(NbMenu.getNbMenu((JMenuItem )elements[k])); 122 123 } 124 return list; 125 } 126 127 130 public static ArrayList getPopupMenuArrayList(JPopupMenu popup) { 131 MenuElement [] elements = popup.getSubElements(); 132 ArrayList list = new ArrayList (); 133 134 for(int k=0; k < elements.length; k++) { 135 if(elements[k] instanceof JMenu ) 136 list.add(getMenuArrayList((JMenu )elements[k])); 137 138 if(elements[k] instanceof JMenuItem ) 139 list.add(NbMenu.getNbMenu((JMenuItem )elements[k])); 140 } 141 return list; 142 } 143 144 148 public static void printArray(ArrayList a, PrintStream stream, int x) { 149 Iterator it = a.iterator(); 150 while(it.hasNext()) { 151 Object o = it.next(); 152 153 if(o instanceof NbMenu) { 154 155 for(int i=0;i<x;i++) 156 stream.print("-"); 157 158 stream.println(((NbMenu)o).name); 159 } 160 161 if(o instanceof ArrayList ) { 162 printArray((ArrayList )o, stream, x + 1); 163 } 164 } 165 } 166 167 170 public static TreeSet getSortedMenuBar(JMenuBar menu, String menuToTest) { 171 172 StringTokenizer menuT = new StringTokenizer (menuToTest, ", "); 173 HashSet menuTT = new HashSet (); 174 175 while(menuT.hasMoreTokens()) 176 menuTT.add(menuT.nextToken()); 177 178 MenuElement [] elements = menu.getSubElements(); 179 TreeSet list = new TreeSet (); 180 181 for(int k=0; k < elements.length; k++) { 182 if(elements[k] instanceof JMenuItem ) { 183 JMenuBarOperator menuOp = new JMenuBarOperator(menu); 185 JMenu m = menuOp.getMenu(k); 187 if(menuTT.contains(m.getLabel())){ 188 list.addAll((Collection )getSortedMenu(menuOp.getMenu(k))); 189 } 190 } 191 196 } 197 return list; 198 } 199 200 203 public static TreeSet getSortedMenu(JMenu menu) { 204 menu.list(); 205 MenuElement [] elements = menu.getSubElements(); 206 TreeSet list = new TreeSet (); 207 NbMenu last = NbMenu.getNbMenu(menu); 208 list.add(last); 209 210 for(int k=0; k < elements.length; k++) { 211 if(elements[k] instanceof JPopupMenu ) { 212 last.addSubMenu(getSortedPopupMenu((JPopupMenu )elements[k], "")); 214 } 215 if(elements[k] instanceof JMenuItem ) { 216 last = NbMenu.getNbMenu((JMenuItem )elements[k]); 217 list.add(last); 218 } 219 220 } 221 return list; 222 } 223 224 227 public static TreeSet getSortedPopupMenu(JPopupMenu popup, String menuNotTest) { 228 StringTokenizer menuT = new StringTokenizer (menuNotTest, ", "); 229 HashSet menuTT = new HashSet (); 230 231 while(menuT.hasMoreTokens()) 232 menuTT.add(menuT.nextToken()); 233 234 MenuElement [] elements = popup.getSubElements(); 235 TreeSet list = new TreeSet (); 236 237 for(int k=0; k < elements.length; k++) { 238 239 if(elements[k] instanceof JMenu ) { 240 JMenu m = (JMenu ) elements[k]; 241 if(!menuTT.contains(m.getLabel())) 242 list.addAll(getSortedMenu(m)); 243 } 244 245 if(elements[k] instanceof JMenuItem ) { 246 list.add(NbMenu.getNbMenu((JMenuItem )elements[k])); 247 } 248 } 249 return list; 250 } 251 252 255 public static void printMenuBarStructure(JMenuBar menu, PrintStream stream, String menuToBeTested, boolean printEnabledOnly, boolean sorted) { 256 if(sorted){ 257 printSorted(getSortedMenuBar(menu, menuToBeTested), stream, 1, printEnabledOnly); 258 stream.close(); 259 }else 260 printArray(getMenuBarArrayList(menu), stream, 1); 261 } 262 263 266 public static void printPopupMenuStructure(JPopupMenu menu, PrintStream stream, String menuNotToBeTested, boolean printEnabledOnly, boolean sorted) { 267 if(sorted){ 268 printSorted(getSortedPopupMenu(menu, menuNotToBeTested), stream, 1, printEnabledOnly); 269 stream.close(); 270 }else{ 271 printArray(getPopupMenuArrayList(menu), stream, 1); 272 } 273 } 274 275 279 public static void printSorted(Collection a, PrintStream stream, int x, boolean printEnabledOnly) { 280 Iterator it = a.iterator(); 281 282 while(it.hasNext()) { 283 Object o = it.next(); 284 if(o instanceof NbMenu) { 285 NbMenu item = (NbMenu)o; 286 287 if(!(printEnabledOnly ^ item.enabled)){ 288 for(int i=0;i<x;i++) stream.print("-"); 289 stream.println(item.name); 290 } 291 292 if(item.submenu != null) { 293 printSorted(item.getSubMenu(), stream, x+1, printEnabledOnly); 294 } 295 296 } 297 } 298 } 299 300 public static String checkMnemonicCollision() { 301 return checkMnemonicCollision(getMenuBarArrayList(MainWindowOperator.getDefault().getJMenuBar())).toString(); 302 } 303 304 305 308 private static StringBuffer checkCollision(ArrayList list, boolean checkShortCuts) { 309 StringBuffer collisions = new StringBuffer (""); 310 Iterator it = list.iterator(); 311 312 HashMap check = new HashMap (); 313 314 while(it.hasNext()) { 315 Object o = it.next(); 316 317 if(o instanceof NbMenu) { 318 NbMenu item = (NbMenu)o; 319 320 if(checkShortCuts){ 321 if(item.mnemo != 0) { 322 Integer mnemonic = new Integer (item.mnemo); 323 if(check.containsKey(mnemonic)) { 325 char k = (char) item.mnemo; 326 collisions.append("\n !!!!!! Collision! mnemonic='" + k + "' : " + item.name + " is in collision with " + check.get(mnemonic)); 327 } else { 328 check.put(mnemonic, item.name); 329 } 330 } 331 }else{ 332 if(item.mnemo != 0) { 333 Integer mnemonic = new Integer (item.mnemo); 334 if(check.containsKey(mnemonic)) { 336 char k = (char) item.mnemo; 337 collisions.append("\n !!!!!! Collision! mnemonic='" + k + "' : " + item.name + " is in collision with " + check.get(mnemonic)); 338 } else { 339 check.put(mnemonic, item.name); 340 } 341 } 342 } 343 } 344 345 if(o instanceof ArrayList ) { 346 collisions.append(checkMnemonicCollision((ArrayList )o)); 347 } 348 } 349 350 return collisions; 351 } 352 353 354 355 358 private static StringBuffer checkMnemonicCollision(ArrayList list) { 359 StringBuffer collisions = new StringBuffer (""); 360 Iterator it = list.iterator(); 361 362 HashMap check = new HashMap (); 363 364 while(it.hasNext()) { 365 Object o = it.next(); 366 367 if(o instanceof NbMenu) { 368 NbMenu item = (NbMenu)o; 369 if(item.mnemo != 0) { 370 Integer mnemonic = new Integer (item.mnemo); 371 if(check.containsKey(mnemonic)) { 373 char k = (char) item.mnemo; 374 collisions.append("\n !!!!!! Collision! mnemonic='" + k + "' : " + item.name + " is in collision with " + check.get(mnemonic)); 375 } else { 376 check.put(mnemonic, item.name); 377 } 378 } 379 } 380 381 if(o instanceof ArrayList ) { 382 collisions.append(checkMnemonicCollision((ArrayList )o)); 383 } 384 } 385 386 return collisions; 387 } 388 389 390 391 public static String checkShortCutCollision() { 392 return checkShortCutCollision(getMenuBarArrayList(MainWindowOperator.getDefault().getJMenuBar())).toString(); 393 } 394 395 398 private static StringBuffer checkShortCutCollision(ArrayList a) { 399 StringBuffer collisions = new StringBuffer (""); 400 Iterator it = a.iterator(); 401 HashMap check = new HashMap (); 402 403 while(it.hasNext()) { 404 Object o = it.next(); 405 406 if(o instanceof NbMenu) { 407 NbMenu item = (NbMenu)o; 408 409 if(item.accelerator != null) { 410 if(check.containsKey(item.accelerator)) { 412 collisions.append("\n !!!!!! Collision! accelerator ='" + item.accelerator + "' : " + item.name + " is in collision with " + check.get(item.accelerator)); 413 } else { 414 check.put(item.accelerator, item.name); 415 } 416 } 417 } 418 419 if(o instanceof ArrayList ) { 420 collisions.append(checkShortCutCollision((ArrayList )o)); 421 } 422 } 423 424 return collisions; 425 } 426 427 } 428 429 430 class NbMenu implements Comparable { 431 432 public String name; 433 434 public int mnemo; 435 436 public String accelerator; 437 public boolean enabled; 438 TreeSet submenu = null; 439 440 443 public static NbMenu getNbMenu(JMenuItem it) { 444 NbMenu item = new NbMenu(); 445 item.name = it.getText(); item.accelerator = (it.getAccelerator() == null) ? null : it.getAccelerator().toString(); 447 item.mnemo = it.getMnemonic(); 448 item.enabled = it.isEnabled(); 449 return item; 450 } 451 453 public void addSubMenu(TreeSet m) { 454 submenu = m; 455 } 456 457 459 public TreeSet getSubMenu() { 460 return submenu; 461 } 462 463 466 public int compareTo(Object obj) { 467 NbMenu n = (NbMenu)obj; 468 return (name != null) ? name.compareTo(n.name) : n.name.compareTo(name); 469 } 470 } 471 472 | Popular Tags |