1 3 27 28 30 package de.qfs.apps.qflog.logview; 31 32 34 import java.awt.BorderLayout ; 35 import java.awt.Color ; 36 import java.awt.Component ; 37 import java.awt.event.ActionEvent ; 38 import java.awt.event.KeyEvent ; 39 import java.awt.event.MouseAdapter ; 40 import java.awt.event.MouseEvent ; 41 42 import java.util.ResourceBundle ; 43 44 import javax.swing.Action ; 45 import javax.swing.AbstractAction ; 46 import javax.swing.BorderFactory ; 47 import javax.swing.ButtonModel ; 48 import javax.swing.Icon ; 49 import javax.swing.KeyStroke ; 50 import javax.swing.JCheckBoxMenuItem ; 51 import javax.swing.JLabel ; 52 import javax.swing.JMenu ; 53 import javax.swing.JMenuItem ; 54 import javax.swing.JPanel ; 55 import javax.swing.JPopupMenu ; 56 import javax.swing.JScrollPane ; 57 import javax.swing.JTree ; 58 import javax.swing.SwingUtilities ; 59 import javax.swing.tree.DefaultTreeCellRenderer ; 60 import javax.swing.tree.TreePath ; 61 62 import de.qfs.lib.gui.SwingUtil; 63 import de.qfs.lib.gui.WindowsTreeCellRenderer; 64 import de.qfs.lib.log.Log; 65 import de.qfs.lib.log.Logger; 66 import de.qfs.lib.util.MapResourceBundle; 67 68 70 89 public class LogFilterView 90 extends JPanel 91 { 92 94 97 private final static Logger logger = new Logger (LogFilterView.class); 98 99 102 private transient LogFilterTreeModel model; 103 104 107 private transient JTree tree; 108 109 112 private static MapResourceBundle defaultResources; 113 114 117 private transient MapResourceBundle resources; 118 119 122 private transient JPopupMenu popup; 123 124 127 private transient PopupListener popupListener; 128 129 132 private boolean logging; 133 134 137 private ButtonModel toggleButtonModel; 138 139 145 private Action removeAction; 146 147 150 private Action removeRecursiveAction; 151 152 155 private Action setERRAction; 156 157 160 private Action setERRDETAILAction; 161 162 165 private Action setWRNAction; 166 167 170 private Action setWRNDETAILAction; 171 172 175 private Action setMSGAction; 176 177 180 private Action setMSGDETAILAction; 181 182 185 private Action setMTDAction; 186 187 190 private Action setMTDDETAILAction; 191 192 195 private Action setDBGAction; 196 197 200 private Action setDBGDETAILAction; 201 202 205 private Action toggleFilterAction; 206 207 210 private Action addFilterAction; 211 212 215 private Action removeFilterAction; 216 217 220 private Action clearFilterAction; 221 222 225 private Action expandAllAction; 226 227 230 private Action collapseAllAction; 231 232 235 private Action showSetLevelsAction; 236 237 239 241 246 public LogFilterView(LogFilterTreeModel model) 247 { 248 this.model = model; 249 setupResources(); 250 model.setRootName(resources.getString("logFilterView.root.name", 251 "default")); 252 } 253 254 256 258 270 public final void setLoggingEnabled(boolean enable) 271 { 272 logging = enable; 273 model.setLoggingEnabled(enable); 274 } 275 276 278 283 288 public void init() 289 { 290 boolean excluded = !logging; 291 if (excluded) { 292 Log.excludeThread(); 293 } 294 try { 295 setLayout(new BorderLayout ()); 296 setBorder(null); 297 298 JPanel top = new JPanel (); 299 top.setLayout(new BorderLayout ()); 300 top.setBorder(null); 301 302 String title = resources.getString("logFilterView.title", "Filter"); 303 JLabel titleLabel = new JLabel (title); 304 titleLabel.setBorder(BorderFactory.createEtchedBorder()); 305 top.add(titleLabel, BorderLayout.NORTH); 306 307 tree = new JTree (model) { 308 }; 312 tree.setBorder(null); 313 tree.setCellRenderer(new Renderer ()); 314 315 JScrollPane treePane = new JScrollPane (tree); 316 SwingUtil.constrainScroll(treePane); 317 treePane.setBorder(BorderFactory.createLoweredBevelBorder()); 318 top.add(treePane, BorderLayout.CENTER); 319 add(top, BorderLayout.CENTER); 320 321 tree.setSelectionRow(0); 323 324 setupActions(); 326 327 tree.registerKeyboardAction 328 (removeAction, "remove", 329 KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), 330 tree.WHEN_FOCUSED); 331 tree.registerKeyboardAction 332 (removeRecursiveAction, "removeRecursive", 333 KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_MASK), 334 tree.WHEN_FOCUSED); 335 336 tree.registerKeyboardAction 337 (setERRAction, "setERR", 338 KeyStroke.getKeyStroke(KeyEvent.VK_1, 0), 339 tree.WHEN_FOCUSED); 340 tree.registerKeyboardAction 341 (setERRDETAILAction, "setERRDETAIL", 342 KeyStroke.getKeyStroke(KeyEvent.VK_2, 0), 343 tree.WHEN_FOCUSED); 344 tree.registerKeyboardAction 345 (setWRNAction, "setWRN", 346 KeyStroke.getKeyStroke(KeyEvent.VK_3, 0), 347 tree.WHEN_FOCUSED); 348 tree.registerKeyboardAction 349 (setWRNDETAILAction, "setWRNDETAIL", 350 KeyStroke.getKeyStroke(KeyEvent.VK_4, 0), 351 tree.WHEN_FOCUSED); 352 tree.registerKeyboardAction 353 (setMSGAction, "MSGERR", 354 KeyStroke.getKeyStroke(KeyEvent.VK_5, 0), 355 tree.WHEN_FOCUSED); 356 tree.registerKeyboardAction 357 (setMSGDETAILAction, "setMSGDETAIL", 358 KeyStroke.getKeyStroke(KeyEvent.VK_6, 0), 359 tree.WHEN_FOCUSED); 360 tree.registerKeyboardAction 361 (setMTDAction, "setMTD", 362 KeyStroke.getKeyStroke(KeyEvent.VK_7, 0), 363 tree.WHEN_FOCUSED); 364 tree.registerKeyboardAction 365 (setMTDDETAILAction, "setMTDDETAIL", 366 KeyStroke.getKeyStroke(KeyEvent.VK_8, 0), 367 tree.WHEN_FOCUSED); 368 tree.registerKeyboardAction 369 (setDBGAction, "setDBG", 370 KeyStroke.getKeyStroke(KeyEvent.VK_9, 0), 371 tree.WHEN_FOCUSED); 372 tree.registerKeyboardAction 373 (setDBGDETAILAction, "setDBGDETAIL", 374 KeyStroke.getKeyStroke(KeyEvent.VK_0, 0), 375 tree.WHEN_FOCUSED); 376 377 tree.registerKeyboardAction 378 (toggleFilterAction, "filter", 379 KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK), 380 tree.WHEN_FOCUSED); 381 382 tree.registerKeyboardAction 383 (addFilterAction, "addFilter", 384 KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK), 385 tree.WHEN_FOCUSED); 386 387 tree.registerKeyboardAction 388 (removeFilterAction, "removeFilter", 389 KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_MASK), 390 tree.WHEN_FOCUSED); 391 392 tree.registerKeyboardAction 393 (clearFilterAction, "clearFilter", 394 KeyStroke.getKeyStroke(KeyEvent.VK_K, KeyEvent.CTRL_MASK), 395 tree.WHEN_FOCUSED); 396 397 tree.registerKeyboardAction 398 (expandAllAction, "expandAll", 399 KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.ALT_MASK), 400 tree.WHEN_FOCUSED); 401 402 tree.registerKeyboardAction 403 (collapseAllAction, "collapseAll", 404 KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.ALT_MASK), 405 tree.WHEN_FOCUSED); 406 407 popup = new JPopupMenu (); 409 fillMenu(popup); 410 popupListener = new PopupListener (); 411 tree.addMouseListener(popupListener); 412 413 showSetLevels(); 414 415 } finally { 416 if (excluded) { 417 Log.includeThread(); 418 } 419 } 420 } 421 422 425 429 public void cleanup() 430 { 431 if (logging && logger.level >= Log.MTD) { 432 logger.log(Log.MTD, "cleanup()", ""); 433 } 434 435 SwingUtil.cleanup(this); 436 437 tree.removeMouseListener(popupListener); 438 popupListener = null; 439 SwingUtil.cleanup(popup); 440 popup = null; 441 442 tree.resetKeyboardActions(); 443 tree = null; 444 resources = null; 445 446 model.cleanup(); 447 model = null; 448 } 449 450 453 456 public void finalize() 457 { 458 if (logging && logger.level >= Log.MTD) { 459 logger.log(Log.MTD, "finalize()", ""); 460 } 461 } 462 463 465 470 475 public final LogFilterTreeModel getModel() 476 { 477 return model; 478 } 479 480 483 488 public final JTree getTree() 489 { 490 return tree; 491 } 492 493 496 501 public void fillMenu(JMenu menu) 502 { 503 JMenuItem mi = menu.add(removeAction); 504 mi = menu.add(removeRecursiveAction); 505 506 menu.addSeparator(); 507 508 mi = menu.add(setERRAction); 509 mi = menu.add(setERRDETAILAction); 510 mi = menu.add(setWRNAction); 511 mi = menu.add(setWRNDETAILAction); 512 mi = menu.add(setMSGAction); 513 mi = menu.add(setMSGDETAILAction); 514 mi = menu.add(setMTDAction); 515 mi = menu.add(setMTDDETAILAction); 516 mi = menu.add(setDBGAction); 517 mi = menu.add(setDBGDETAILAction); 518 519 menu.addSeparator(); 520 521 mi = new JCheckBoxMenuItem 522 ((String ) toggleFilterAction.getValue(Action.NAME), 523 (Icon ) toggleFilterAction.getValue(Action.SMALL_ICON)); 524 if (toggleButtonModel == null) { 525 toggleButtonModel = mi.getModel(); 526 toggleButtonModel.setSelected(model.isPackageFilteringEnabled()); 527 mi.addActionListener(toggleFilterAction); 528 } else { 529 mi.setModel(toggleButtonModel); 530 } 531 menu.add(mi); 532 mi = menu.add(addFilterAction); 533 mi = menu.add(removeFilterAction); 534 mi = menu.add(clearFilterAction); 535 536 menu.addSeparator(); 537 538 menu.add(showSetLevelsAction); 539 } 540 541 546 public void fillMenu(JPopupMenu menu) 547 { 548 menu.add(removeAction); 549 menu.add(removeRecursiveAction); 550 551 menu.addSeparator(); 552 553 menu.add(setERRAction); 554 menu.add(setERRDETAILAction); 555 menu.add(setWRNAction); 556 menu.add(setWRNDETAILAction); 557 menu.add(setMSGAction); 558 menu.add(setMSGDETAILAction); 559 menu.add(setMTDAction); 560 menu.add(setMTDDETAILAction); 561 menu.add(setDBGAction); 562 menu.add(setDBGDETAILAction); 563 564 menu.addSeparator(); 565 566 JCheckBoxMenuItem mi = new JCheckBoxMenuItem 567 ((String ) toggleFilterAction.getValue(Action.NAME), 568 (Icon ) toggleFilterAction.getValue(Action.SMALL_ICON)); 569 if (toggleButtonModel == null) { 570 toggleButtonModel = mi.getModel(); 571 toggleButtonModel.setSelected(model.isPackageFilteringEnabled()); 572 mi.addActionListener(toggleFilterAction); 573 } else { 574 mi.setModel(toggleButtonModel); 575 } 576 menu.add(mi); 577 menu.add(addFilterAction); 578 menu.add(removeFilterAction); 579 menu.add(clearFilterAction); 580 581 menu.addSeparator(); 582 583 menu.add(showSetLevelsAction); 584 } 585 586 588 593 599 public void setResources(ResourceBundle rb) 600 { 601 resources.addResources(rb); 602 model.setRootName(resources.getString("logFilterView.root.name", 603 "default")); 604 } 605 606 607 610 614 public void showSetLevels() 615 { 616 SwingUtilities.invokeLater(new Runnable () { 617 public void run() { 618 showSetLevelsAction.actionPerformed(null); 619 } 620 }); 621 } 622 623 625 630 633 private void setupActions() 634 { 635 if (removeAction == null) { 637 removeAction = new RemoveLevelAction (false); 638 setActionProperties(removeAction, "removeLevel"); 639 removeRecursiveAction = new RemoveLevelAction (true); 640 setActionProperties(removeRecursiveAction, "removeLevelRecursive"); 641 642 setERRAction = new ChangeLevelAction (Log.ERR); 643 setActionProperties(setERRAction, "setLevelERR"); 644 setERRDETAILAction = new ChangeLevelAction (Log.ERRDETAIL); 645 setActionProperties(setERRDETAILAction, "setLevelERRDETAIL"); 646 setWRNAction = new ChangeLevelAction (Log.WRN); 647 setActionProperties(setWRNAction, "setLevelWRN"); 648 setWRNDETAILAction = new ChangeLevelAction (Log.WRNDETAIL); 649 setActionProperties(setWRNDETAILAction, "setLevelWRNDETAIL"); 650 setMSGAction = new ChangeLevelAction (Log.MSG); 651 setActionProperties(setMSGAction, "setLevelMSG"); 652 setMSGDETAILAction = new ChangeLevelAction (Log.MSGDETAIL); 653 setActionProperties(setMSGDETAILAction, "setLevelMSGDETAIL"); 654 setMTDAction = new ChangeLevelAction (Log.MTD); 655 setActionProperties(setMTDAction, "setLevelMTD"); 656 setMTDDETAILAction = new ChangeLevelAction (Log.MTDDETAIL); 657 setActionProperties(setMTDDETAILAction, "setLevelMTDDETAIL"); 658 setDBGAction = new ChangeLevelAction (Log.DBG); 659 setActionProperties(setDBGAction, "setLevelDBG"); 660 setDBGDETAILAction = new ChangeLevelAction (Log.DBGDETAIL); 661 setActionProperties(setDBGDETAILAction, "setLevelDBGDETAIL"); 662 663 toggleFilterAction = new AbstractAction () { 664 public void actionPerformed(ActionEvent e) { 665 model.togglePackageFiltering(); 666 if (toggleButtonModel != null) { 667 toggleButtonModel.setSelected 668 (model.isPackageFilteringEnabled()); 669 } 670 } 671 }; 672 setActionProperties(toggleFilterAction, "toggleFilter"); 673 674 addFilterAction = new AbstractAction () { 675 public void actionPerformed(ActionEvent e) { 676 TreePath [] paths = tree.getSelectionPaths(); 677 678 if (paths != null) { 679 for (int i = 0; i < paths.length; i++) { 680 FilterNode node = (FilterNode) 681 paths[i].getLastPathComponent(); 682 model.addFilterPackage(node); 683 } 684 } 685 } 686 }; 687 setActionProperties(addFilterAction, "addFilter"); 688 689 removeFilterAction = new AbstractAction () { 690 public void actionPerformed(ActionEvent e) { 691 TreePath [] paths = tree.getSelectionPaths(); 692 693 if (paths != null) { 694 for (int i = 0; i < paths.length; i++) { 695 FilterNode node = (FilterNode) 696 paths[i].getLastPathComponent(); 697 model.removeFilterPackage(node); 698 } 699 } 700 } 701 }; 702 setActionProperties(removeFilterAction, "removeFilter"); 703 704 clearFilterAction = new AbstractAction () { 705 public void actionPerformed(ActionEvent e) { 706 model.clearFilterPackages(); 707 } 708 }; 709 setActionProperties(clearFilterAction, "clearFilter"); 710 711 expandAllAction = new AbstractAction () { 712 public void actionPerformed(ActionEvent e) { 713 TreePath path = tree.getSelectionPath(); 714 if (path != null) { 715 boolean excluded = ! logging; 716 if (excluded) { 717 Log.excludeThread(); 718 } 719 try { 720 SwingUtil.expandAll(tree, path); 721 } finally { 722 if (excluded) { 723 Log.includeThread(); 724 } 725 } 726 } 727 } 728 }; 729 730 collapseAllAction = new AbstractAction () { 731 public void actionPerformed(ActionEvent e) { 732 TreePath path = tree.getSelectionPath(); 733 if (path != null) { 734 boolean excluded = ! logging; 735 if (excluded) { 736 Log.excludeThread(); 737 } 738 try { 739 SwingUtil.collapseAll(tree, path); 740 } finally { 741 if (excluded) { 742 Log.includeThread(); 743 } 744 } 745 } 746 } 747 }; 748 749 showSetLevelsAction = new ShowSetLevelsAction (); 750 setActionProperties(showSetLevelsAction, "showSetLevels"); 751 } 752 } 753 754 757 763 private void setActionProperties(Action action, String resource) 764 { 765 String name = resources.getString 766 ("logFilterView.action." + resource + ".name", null); 767 if (name != null) { 768 action.putValue(Action.NAME, name); 769 } 770 771 String iconName = resources.getString 772 ("logFilterView.action." + resource + ".icon", null); 773 if (iconName != null) { 774 Icon icon = resources.getIcon (iconName, null); 775 if (icon != null) { 776 action.putValue(Action.SMALL_ICON, icon); 777 } 778 } 779 } 780 781 784 788 private void setupResources() 789 { 790 if (defaultResources == null) { 791 defaultResources = new MapResourceBundle (); 792 defaultResources.fetchProperties 793 ("/de/qfs/apps/qflog/logview/resources/properties/logfilterview", 794 LogFilterView.class); 795 } 796 resources = defaultResources; 797 } 798 799 801 806 808 811 private final static Logger claLogger = 812 new Logger (ChangeLevelAction.class); 813 814 816 819 private class ChangeLevelAction 820 extends AbstractAction 821 { 822 824 827 private int level; 828 829 831 833 838 public ChangeLevelAction(int level) 839 { 840 this.level = level; 841 } 842 843 845 847 852 public void actionPerformed (ActionEvent e) 853 { 854 if (logging && claLogger.level >= Log.MTD) { 855 claLogger.log(Log.MTD, "actionPerformed(ActionEvent)", 856 claLogger.level < Log.MTDDETAIL ? "" : 857 "level: " + level); 858 } 859 TreePath [] paths = tree.getSelectionPaths(); 860 861 if (paths != null) { 862 for (int i = 0; i < paths.length; i++) { 863 model.setLevel(paths[i], level); 864 } 865 } 866 } 867 868 } 870 871 874 876 879 private final static Logger rlaLogger = 880 new Logger (RemoveLevelAction.class); 881 882 884 887 private class RemoveLevelAction 888 extends AbstractAction 889 { 890 892 895 private boolean recurse; 896 897 899 901 906 public RemoveLevelAction(boolean recurse) 907 { 908 this.recurse = recurse; 909 } 910 911 913 915 920 public void actionPerformed (ActionEvent e) 921 { 922 if (logging && rlaLogger.level >= Log.MTD) { 923 rlaLogger.log(Log.MTD, "actionPerformed(ActionEvent)", 924 rlaLogger.level < Log.MTDDETAIL ? "" : 925 "recurse: " + recurse); 926 } 927 TreePath [] paths = tree.getSelectionPaths(); 928 929 if (paths != null) { 930 for (int i = 0; i < paths.length; i++) { 931 model.removeLevel(paths[i], recurse); 932 } 933 } 934 } 935 936 } 938 939 942 944 947 private final static Logger sslaLogger = 948 new Logger (ShowSetLevelsAction.class); 949 950 955 private class ShowSetLevelsAction 956 extends AbstractAction 957 { 958 960 963 public ShowSetLevelsAction() 964 { 965 } 966 967 969 971 976 public void actionPerformed (ActionEvent e) 977 { 978 boolean excluded = !logging; 979 if (excluded) { 980 Log.excludeThread(); 981 } 982 try { 983 maybeExpandPath(new TreePath (new Object [] {model.getRoot()})); 984 } finally { 985 if (excluded) { 986 Log.includeThread(); 987 } 988 } 989 } 990 991 994 1003 private boolean maybeExpandPath(TreePath path) 1004 { 1005 if (logging && sslaLogger.level >= Log.MTD) { 1006 sslaLogger.log(Log.MTD, "maybeExpandPath(TreePath)", 1007 sslaLogger.level < Log.MTDDETAIL ? "" : 1008 "path: " + path); 1009 } 1010 Object node = path.getLastPathComponent(); 1011 boolean isLevel = model.getLevel(node) != null; 1012 boolean expand = false; 1013 if (model.isLeaf(node)) { 1014 return isLevel; 1015 } 1016 1017 int num = model.getChildCount(node); 1018 for (int i = 0; i < num; i++) { 1019 Object child = model.getChild(node, i); 1020 if (maybeExpandPath(path.pathByAddingChild(child))) { 1021 expand = true; 1022 } 1023 } 1024 if (sslaLogger.level >= Log.DBG) { 1025 sslaLogger.log(Log.DBG, "maybeExpandPath(TreePath)", 1026 "expand: " + expand); 1027 } 1028 1029 if (expand) { 1030 tree.expandPath(path); 1031 } else { 1032 tree.collapsePath(path); 1033 } 1034 return expand || isLevel; 1035 } 1036 1037 } 1039 1040 1042 1047 1050 class PopupListener 1051 extends MouseAdapter 1052 { 1053 1058 public void mousePressed(MouseEvent event) 1059 { 1060 maybePopup(event); 1061 } 1062 1063 1068 public void mouseReleased(MouseEvent event) 1069 { 1070 maybePopup(event); 1071 } 1072 1073 1081 private void maybePopup(MouseEvent event) 1082 { 1083 boolean excluded = !logging; 1084 if (excluded) { 1085 Log.excludeThread(); 1086 } 1087 try { 1088 if (event.isPopupTrigger()) { 1089 int row = 1090 tree.getRowForLocation(event.getX(), event.getY()); 1091 if (row >= 0) { 1092 if (! tree.isRowSelected(row)) { 1093 tree.setSelectionRow(row); 1094 } 1095 } 1096 SwingUtil.showPopup(popup, tree, 1097 event.getX(), event.getY(), 1098 false); 1099 popup.requestFocus(); 1100 } 1101 } finally { 1102 if (excluded) { 1103 Log.includeThread(); 1104 } 1105 } 1106 } 1107 } 1108 1109 1111 1116 1118 1121 private final static int METHOD = 10; 1122 1123 1126 private final static int CLASS = 11; 1127 1128 1131 private final static int CLASS_OPEN = 12; 1132 1133 1136 private final static int PACKAGE = 13; 1137 1138 1141 private final static int PACKAGE_OPEN = 14; 1142 1143 1146 private final static String iconNames[] = { 1147 "logFilterView.icon.err", "logFilterView.icon.errDetail", 1148 "logFilterView.icon.wrn", "logFilterView.icon.wrnDetail", 1149 "logFilterView.icon.msg", "logFilterView.icon.msgDetail", 1150 "logFilterView.icon.mtd", "logFilterView.icon.mtdDetail", 1151 "logFilterView.icon.dbg", "logFilterView.icon.dbgDetail", 1152 "logFilterView.icon.method", 1153 "logFilterView.icon.class", "logFilterView.icon.classOpen", 1154 "logFilterView.icon.package", "logFilterView.icon.packageOpen" 1155 }; 1156 1157 1160 private final static Icon [] icons = new Icon [iconNames.length]; 1161 1162 1164 1170 private class Renderer 1171 extends WindowsTreeCellRenderer 1172 { 1173 1175 1178 public Renderer () 1179 { 1180 initIcons(); 1181 } 1182 1183 1185 1187 1200 public Component getTreeCellRendererComponent 1201 (JTree tree, Object obj, boolean selected, boolean expanded, 1202 boolean leaf, int row, boolean hasFocus) 1203 { 1204 JLabel com = (JLabel ) super.getTreeCellRendererComponent 1205 (tree, obj, selected, expanded, leaf, row, hasFocus); 1206 1207 com.setForeground 1208 (((FilterNode) obj).isExtra() 1209 ? Color.red : 1210 (selected ? getTextSelectionColor() 1211 : getTextNonSelectionColor())); 1212 Integer level = model.getLevel(obj); 1213 1214 Icon outer; 1215 if (leaf) { 1216 outer = icons[METHOD]; 1217 } else if ((obj instanceof FilterRootNode) 1218 || ! ((FilterNode) obj).getData().getClazz() 1219 .endsWith(".")) { 1220 outer = icons[expanded ? CLASS_OPEN : CLASS]; 1221 } else { 1222 outer = icons[expanded ? PACKAGE_OPEN : PACKAGE]; 1223 } 1224 if (level == null) { 1225 com.setIcon(outer); 1226 return com; 1227 } 1228 int lvl = level.intValue(); 1229 if (lvl < Log.ERR || lvl > Log.DBGDETAIL) { 1230 com.setIcon(outer); 1231 } else { 1232 com.setIcon(icons[level.intValue() - 1]); 1233 } 1234 return com; 1235 } 1236 1237 1240 1243 private void initIcons() 1244 { 1245 if (icons[0] == null) { 1246 for (int i = 0; i < icons.length; i++) { 1247 icons[i] = resources.getIcon(iconNames[i], null); 1248 } 1249 } 1250 } 1251 1252 } 1254 1255 } 1257 | Popular Tags |