< prev index next >

src/com/sun/javatest/exec/TestTreePanel.java

Print this page




  90 /**
  91  * This panel is a split panel which has the testsuite tree on the left and a context
  92  * sensitive panel on the right.
  93  */
  94 class TestTreePanel extends JPanel implements ET_TestTreeControl, HarnessAware, Session.Observer {
  95 
  96     /**
  97      * Constructs TestTreePanel object, doesn't initialize GUI!
  98      */
  99     public TestTreePanel(JComponent parent, ExecModel em, UIFactory uif) {
 100         this.uif = uif;
 101         this.execModel = em;
 102         this.parent = parent;
 103         uif.setAccessibleInfo(this, "treep");
 104     }
 105     /**
 106      * @param map Saved state map, may be null.
 107      */
 108     public TestTreePanel(UIFactory uif, Harness h, ExecModel em,
 109             FilterSelectionHandler fh, JComponent parent,
 110             Map map) {
 111         this(parent, em, uif);
 112         setHarness(h);
 113         this.filterHandler = fh;
 114         this.stateMap = map;
 115         initialize();
 116     }
 117 
 118     public void initialize() {
 119         initGUI();
 120     }
 121 
 122     /**
 123      * Returns the current TRT, or null if no table is available.
 124      */
 125     public synchronized TestResultTable getTestResultTable() {
 126         /*
 127         WorkDirectory wd = params.getWorkDirectory();
 128         if (wd == null)
 129         return null;
 130         else


 271             brPanel.setParameters(params);
 272         }
 273 
 274         // restore onscreen open paths
 275         if (tree != null && paths != null && paths.length > 0) {
 276             tree.restorePaths(paths, true);
 277         }
 278 
 279         if (tree != null ) {
 280             tree.restoreSelection(selectedPaths);
 281         }
 282 
 283         if (tree != null) {
 284             ensureTreeSelection();
 285         }
 286 
 287     }
 288 
 289     private TreePath[] getTreePaths(String[] paths) {
 290         if (paths != null) {
 291             ArrayList<TreePath> translatedPaths = new ArrayList(paths.length);
 292 
 293             for (int i = 0; i < paths.length; i++) {
 294                 // the paths need to be reconditioned because the JTree will not
 295                 // accept them if they refer to a different model/TRT.
 296                 //Object targetNode = trt.resolveUrl(paths[i]);
 297 
 298                 TreePath tp = treeModel.resolveUrl(paths[i]);
 299                 if (tp != null) {
 300                     translatedPaths.add(tp);
 301                 }
 302             }   // for (i)
 303 
 304             TreePath[] result = new TreePath[translatedPaths.size()];
 305             translatedPaths.toArray(result);
 306             return result;
 307         } else {
 308             return null;
 309         }
 310     }
 311 
 312 
 313     @Override
 314     public void saveTreeState(Map m) {
 315         String[] paths = getOpenPaths();
 316         m.put(OPEN_PATHS_PREF, StringArray.join(paths));
 317     }
 318 
 319     @Override
 320     public void restoreTreeState(Map m) {
 321         if (m != null) {
 322             String tmp = (String) (m.get(OPEN_PATHS_PREF));
 323             if (tree != null && tmp != null && tmp.length() > 0) {
 324                 tree.restorePaths(StringArray.split(tmp), true);
 325             }
 326         }
 327     }
 328 
 329     @Override
 330     public void save(Map m) {
 331         // save the open paths
 332         Preferences.access();
 333         saveTreeState(m);
 334     }
 335 
 336     @Override
 337     public void restore(Map m) {
 338         stateMap = m;
 339         restoreTreeState(stateMap);
 340     }
 341 
 342     /**
 343      * Translates open tree paths into string URLs.
 344      * @return null if no paths are open or the tree is not available.
 345      */
 346     private String[] getOpenPaths() {
 347         if (tree == null || tree.getModel() instanceof EmptyTestTreeModel) {
 348             return null;
 349         }
 350 
 351         TreePath[] paths = tree.snapshotOpenPaths();
 352         Vector urls = new Vector();
 353 
 354         if (paths != null) {
 355             for (int i = 0; i < paths.length; i++) {
 356                 Object last = paths[i].getLastPathComponent();
 357                 String url;
 358 
 359                 if (last instanceof TT_TestNode) {
 360                     // get url
 361                     url = ((TT_TestNode) last).getTestResult().getTestName();
 362                 }
 363                 else if (last instanceof TT_BasicNode ) {       // tree node
 364                     // get url
 365                     url = ((TT_BasicNode) last).getLongPath();
 366                 }
 367                 else
 368                     return null;
 369 
 370                 urls.addElement(url);
 371             }   // for
 372         }


 424                     JOptionPane.WARNING_MESSAGE);
 425             return;
 426         }
 427 
 428         if (harness.isRunning()) {
 429             JOptionPane.showMessageDialog(parent,
 430                     uif.getI18NString("treep.cantPurgeRunning.msg"),
 431                     uif.getI18NString("treep.cantPurgeRunning.title"),
 432                     JOptionPane.WARNING_MESSAGE);
 433             return;
 434         }
 435 
 436         boolean ack = false;
 437         Object[] toPurge = new Object[what.length];
 438 
 439         if (what.length > 1) {
 440             //int confirm = uif.showYesNoDialog("treep.purgeItemsSure",
 441             //createNodeListString(createNodeList(what)));
 442 
 443             String[] paths = createNodeList(what);
 444             DefaultListModel model = new DefaultListModel();
 445             for (int i = paths.length; i > 0; i--) {
 446                 model.add(model.getSize(), paths[model.getSize()]);
 447             }
 448             int confirm = showConfirmListDialog("treep.purgeItemsSure", null, model);
 449 
 450             // user backs out
 451             if (confirm != JOptionPane.YES_OPTION) {
 452                 return;
 453             } else {
 454                 ack = true;
 455                 for (int i = 0; i < what.length; i++) {
 456                     Object item = what[i].getLastPathComponent();
 457                     if (item instanceof TT_TestNode) {
 458                         toPurge[i] = ((TT_TestNode) item).getTestResult().getWorkRelativePath();
 459                     } else if (item instanceof TT_BasicNode) {
 460                         TT_BasicNode tn = (TT_BasicNode) item;
 461                         if (tn.isRoot()) {
 462                             toPurge = new Object[1];
 463                             toPurge[0] = "";
 464                             break;      // no need to process the rest of the list


 680        // dialog to confirm wipe of results with refresh?
 681 
 682         if (harness.isRunning()) {
 683             JOptionPane.showMessageDialog(parent,
 684                     uif.getI18NString("treep.cantRefreshRunning.msg"),
 685                     uif.getI18NString("treep.cantRefreshRunning.title"),
 686                     JOptionPane.WARNING_MESSAGE);
 687             return;
 688         }
 689 
 690         final TestResultTable trt = treeModel.getTestResultTable();
 691         boolean ack = false;
 692         String[] ackTargets = new String[what.length];
 693         TT_TreeNode[] ackNodes = null;
 694 
 695         if (what.length > 1) {
 696             //int confirm = uif.showYesNoDialog("treep.refreshNodeSure",
 697             //          createNodeListString(createNodeList(what)));
 698 
 699             String[] paths = createNodeList(what);
 700             DefaultListModel model = new DefaultListModel();
 701             for (int i = paths.length; i > 0; i--) {
 702                 model.add(model.getSize(), paths[model.getSize()]);
 703             }
 704             int confirm = showConfirmListDialog("treep.refreshNodeSure", paths, model);
 705 
 706             if (confirm != JOptionPane.YES_OPTION) {
 707                 return;
 708             }
 709             else {
 710                 ack = true;
 711             }
 712 
 713             for (int i = 0; i < what.length; i++) {
 714                 Object item = what[i].getLastPathComponent();
 715                 if (item instanceof TT_TestNode) {
 716                     ackTargets[i] = ((TT_TestNode) item).getLongPath();
 717                     ackNodes = (TT_TreeNode[])DynamicArray.append(ackNodes, (TT_TestNode)item, TT_TreeNode.class);
 718                 } else if (item instanceof TT_BasicNode) {
 719                     ackNodes = (TT_TreeNode[])DynamicArray.append(ackNodes, (TT_BasicNode)item, TT_TreeNode.class);
 720                     TT_BasicNode tn = (TT_BasicNode) item;


1107         ensureTreeSelection();
1108 
1109         popup = uif.createPopupMenu("treep.popup.mnu");
1110         popup.add(runMI = uif.createMenuItem("treep.popup", "run", listener));
1111         popup.addSeparator();
1112         popup.add(refreshMI = uif.createMenuItem("treep.popup", "refresh", listener));
1113         popup.add(purgeMI = uif.createMenuItem("treep.popup", "clear", listener));
1114 
1115         // get items from the test suite
1116         if (cm != null) {
1117             JavaTestContextMenu[] cms = cm.getContextMenus();
1118             if (cms != null) {
1119                 popup.addSeparator();
1120 
1121                 for (int i = 0; i < cms.length; i++) {
1122                     // filter out types of menus we don't want (not needed yet)
1123                     // keep track of them for later
1124                     switch (cms[i].getMenuApplication()) {
1125                         case JavaTestContextMenu.TESTS_AND_FOLDERS:
1126                             if (mixedMenus == null) {
1127                                 mixedMenus = new ArrayList();
1128                             }
1129                             mixedMenus.add(cms[i]);
1130                             break;
1131                         case JavaTestContextMenu.TESTS_ONLY:
1132                             if (testMenus == null) {
1133                                 testMenus = new ArrayList();
1134                             }
1135                             testMenus.add(cms[i]);
1136                             break;
1137                         case JavaTestContextMenu.FOLDERS_ONLY:
1138                             if (folderMenus == null) {
1139                                 folderMenus = new ArrayList();
1140                             }
1141                             folderMenus.add(cms[i]);
1142                             break;
1143                         case JavaTestContextMenu.CUSTOM:
1144                             if (customMenus == null) {
1145                                 customMenus = new ArrayList();
1146                             }
1147                             customMenus.add(cms[i]);
1148                             break;
1149                         default:
1150                     }
1151                     popup.add(cms[i].getMenu());
1152                 }   // for
1153             }
1154         }
1155 
1156         // disabled by default
1157         // will immediately be reevaluated when setParameters() is called
1158         runMI.setEnabled(false);
1159         refreshMI.setEnabled(false);
1160         purgeMI.setEnabled(false);
1161 
1162         // setup top toolbar
1163         /*
1164         JPanel topPanel = uif.createPanel("treeTb", new GridBagLayout(), false);
1165         // NOTE intentional space added below to defeat


1320                 if (customMenus != null) {
1321                     for (int i = 0; i < customMenus.size(); i++) {
1322                         ((JavaTestContextMenu) (customMenus.get(i))).getMenu().setEnabled(false);
1323                     }   // for
1324                 }
1325                 if (mixedMenus != null) {
1326                     for (int i = 0; i < mixedMenus.size(); i++) {
1327                         ((JavaTestContextMenu) (mixedMenus.get(i))).getMenu().setEnabled(false);
1328                     }   // for
1329                 }
1330                 if (folderMenus != null) {
1331                     for (int i = 0; i < folderMenus.size(); i++) {
1332                         ((JavaTestContextMenu) (folderMenus.get(i))).getMenu().setEnabled(false);
1333                     }   // for
1334                 }
1335 
1336                 if (!(tree.getModel() instanceof EmptyTestTreeModel))
1337                     throw new JavaTestError("Unknown node type from JTree!");
1338             }
1339         } else {      // multiple nodes selected
1340             ArrayList tests = new ArrayList();
1341             ArrayList folders = new ArrayList();
1342 
1343             for (int i = 0; i < paths.length; i++) {
1344                 Object item = paths[i];
1345 
1346                 if (item instanceof TreePath) {
1347                     item = ((TreePath) item).getLastPathComponent();
1348                 }
1349 
1350                 if (item instanceof TT_TestNode) {
1351                     tests.add(((TT_TestNode) item).getTestResult());
1352                 } else {
1353                     TT_BasicNode bn = (TT_BasicNode)item;
1354                     if (bn.isRoot())
1355                         folders.add("");
1356                     else
1357                         folders.add(bn.getLongPath());
1358                 }
1359             }   // for
1360 
1361             TestResult[] t = null;


1598 
1599         return uif.showCustomYesNoDialog(prefix, p);
1600     }
1601 
1602     /**
1603      * Does this panel currently have data to work from.
1604      */
1605     private boolean isPopulated() {
1606         if (params == null || params.getTestSuite() == null) {
1607             return false;
1608         } else {
1609             return true;
1610         }
1611     }
1612     private UIFactory uif;
1613     private Harness harness;
1614     private FilterSelectionHandler filterHandler;
1615     private ExecModel execModel;
1616     private JComponent parent;
1617     private Thread bgThread;        // in case disposal is required
1618     private Map stateMap;                   // startup state, read-only
1619     private volatile boolean disposed;
1620     private PanelModel pm;
1621     private TestTree tree;
1622     private TT_Renderer treeRend;
1623     private TestPanel testPanel;
1624     private BranchPanel brPanel;
1625     private MultiSelectPanel msPanel;
1626     private JPopupMenu popup;
1627     private TreePath lastPopupPath;
1628     private JMenuItem refreshMI;
1629     private JMenuItem purgeMI;
1630     private JMenuItem runMI;
1631     private String activeTest;
1632     private ArrayList testMenus,  folderMenus,  mixedMenus,  customMenus;
1633     private TestTreeModel treeModel;
1634     private Deck deck;
1635     private JPanel deckPanel;
1636     private JTextField titleField;
1637     private Listener listener;
1638     private TestSuite lastTs;       // last recorded testsuite
1639     private Parameters params;
1640     private Parameters newParams;
1641     private boolean newConfigAlreadyApplied = false;
1642     private boolean initialized = false;
1643     private static final int WAIT_DIALOG_DELAY = 3000;      // 3 second delay
1644     private static final String OPEN_PATHS_PREF = "openpaths";
1645     static protected boolean debug = Boolean.getBoolean("debug." + TestTreePanel.class.getName());
1646 
1647     /**
1648      * ET_Config method
1649      * @return null - no menu required
1650      */
1651     public JMenu getMenu() {
1652         return null;


1931 
1932         public Object getValue(String key) {
1933             if (key == null) {
1934                 throw new NullPointerException();
1935             }
1936             if (key.equals(NAME)) {
1937                 return name;
1938             } else if (key.equals(SHORT_DESCRIPTION)) {
1939                 return desc;
1940             } else {
1941                 return null;
1942             }
1943         }
1944         private String name;
1945         private String desc;
1946     }
1947 
1948     private class PanelModel implements TreePanelModel, Harness.Observer, TestResultTable.Observer {
1949 
1950         PanelModel() {
1951             runningTests = new Hashtable();
1952             activeNodes = new Hashtable();
1953         }
1954 
1955         public void pauseWork() {
1956             if (treeModel != null) {
1957                 treeModel.pauseWork();
1958             }
1959         }
1960 
1961         public void unpauseWork() {
1962             if (treeModel != null) {
1963                 treeModel.unpauseWork();
1964             }
1965         }
1966 
1967         public void refreshTree() {
1968             String[] openPaths = null;
1969             String[] selectedPaths = null;
1970             if (tree != null) {
1971                 TreePath[] p = tree.snapshotOpenPaths();
1972                 openPaths = treeModel.pathsToStrings(p);


2191             // asynchronous (non-user GUI) events occur
2192             // example - if a "clear" operation is done, which includes the shown test
2193             // SWITCH ONTO EVENT THREAD
2194             if (newValue.getTestName().equals(activeTest)) {
2195             TestResult lookupTr = treeModel.getTestResultTable().lookup(
2196             newValue.getWorkRelativePath());
2197             TreeNode[] nodes = TestResultTable.getObjectPath(lookupTr);
2198 
2199             Object[] p = new Object[nodes.length + 1];
2200             System.arraycopy(nodes, 0, p, 0, nodes.length);
2201             p[p.length-1] = newValue;
2202             EventQueue.invokeLater(new Selector(newValue, new TreePath(p)));
2203             }
2204              */
2205         }
2206 
2207         public void updated(TestResult whichTR) {
2208             // ignore
2209         }
2210         private Hashtable<String,TestResult> runningTests;
2211         private Hashtable activeNodes;
2212         private Integer ONE = Integer.valueOf(1);
2213     }
2214 }


  90 /**
  91  * This panel is a split panel which has the testsuite tree on the left and a context
  92  * sensitive panel on the right.
  93  */
  94 class TestTreePanel extends JPanel implements ET_TestTreeControl, HarnessAware, Session.Observer {
  95 
  96     /**
  97      * Constructs TestTreePanel object, doesn't initialize GUI!
  98      */
  99     public TestTreePanel(JComponent parent, ExecModel em, UIFactory uif) {
 100         this.uif = uif;
 101         this.execModel = em;
 102         this.parent = parent;
 103         uif.setAccessibleInfo(this, "treep");
 104     }
 105     /**
 106      * @param map Saved state map, may be null.
 107      */
 108     public TestTreePanel(UIFactory uif, Harness h, ExecModel em,
 109             FilterSelectionHandler fh, JComponent parent,
 110             Map<String, String> map) {
 111         this(parent, em, uif);
 112         setHarness(h);
 113         this.filterHandler = fh;
 114         this.stateMap = map;
 115         initialize();
 116     }
 117 
 118     public void initialize() {
 119         initGUI();
 120     }
 121 
 122     /**
 123      * Returns the current TRT, or null if no table is available.
 124      */
 125     public synchronized TestResultTable getTestResultTable() {
 126         /*
 127         WorkDirectory wd = params.getWorkDirectory();
 128         if (wd == null)
 129         return null;
 130         else


 271             brPanel.setParameters(params);
 272         }
 273 
 274         // restore onscreen open paths
 275         if (tree != null && paths != null && paths.length > 0) {
 276             tree.restorePaths(paths, true);
 277         }
 278 
 279         if (tree != null ) {
 280             tree.restoreSelection(selectedPaths);
 281         }
 282 
 283         if (tree != null) {
 284             ensureTreeSelection();
 285         }
 286 
 287     }
 288 
 289     private TreePath[] getTreePaths(String[] paths) {
 290         if (paths != null) {
 291             ArrayList<TreePath> translatedPaths = new ArrayList<>(paths.length);
 292 
 293             for (int i = 0; i < paths.length; i++) {
 294                 // the paths need to be reconditioned because the JTree will not
 295                 // accept them if they refer to a different model/TRT.
 296                 //Object targetNode = trt.resolveUrl(paths[i]);
 297 
 298                 TreePath tp = treeModel.resolveUrl(paths[i]);
 299                 if (tp != null) {
 300                     translatedPaths.add(tp);
 301                 }
 302             }   // for (i)
 303 
 304             TreePath[] result = new TreePath[translatedPaths.size()];
 305             translatedPaths.toArray(result);
 306             return result;
 307         } else {
 308             return null;
 309         }
 310     }
 311 
 312 
 313     @Override
 314     public void saveTreeState(Map<String, String> m) {
 315         String[] paths = getOpenPaths();
 316         m.put(OPEN_PATHS_PREF, StringArray.join(paths));
 317     }
 318 
 319     @Override
 320     public void restoreTreeState(Map<String, String> m) {
 321         if (m != null) {
 322             String tmp = m.get(OPEN_PATHS_PREF);
 323             if (tree != null && tmp != null && tmp.length() > 0) {
 324                 tree.restorePaths(StringArray.split(tmp), true);
 325             }
 326         }
 327     }
 328 
 329     @Override
 330     public void save(Map<String, String> m) {
 331         // save the open paths
 332         Preferences.access();
 333         saveTreeState(m);
 334     }
 335 
 336     @Override
 337     public void restore(Map<String, String> m) {
 338         stateMap = m;
 339         restoreTreeState(stateMap);
 340     }
 341 
 342     /**
 343      * Translates open tree paths into string URLs.
 344      * @return null if no paths are open or the tree is not available.
 345      */
 346     private String[] getOpenPaths() {
 347         if (tree == null || tree.getModel() instanceof EmptyTestTreeModel) {
 348             return null;
 349         }
 350 
 351         TreePath[] paths = tree.snapshotOpenPaths();
 352         Vector<String> urls = new Vector<>();
 353 
 354         if (paths != null) {
 355             for (int i = 0; i < paths.length; i++) {
 356                 Object last = paths[i].getLastPathComponent();
 357                 String url;
 358 
 359                 if (last instanceof TT_TestNode) {
 360                     // get url
 361                     url = ((TT_TestNode) last).getTestResult().getTestName();
 362                 }
 363                 else if (last instanceof TT_BasicNode ) {       // tree node
 364                     // get url
 365                     url = ((TT_BasicNode) last).getLongPath();
 366                 }
 367                 else
 368                     return null;
 369 
 370                 urls.addElement(url);
 371             }   // for
 372         }


 424                     JOptionPane.WARNING_MESSAGE);
 425             return;
 426         }
 427 
 428         if (harness.isRunning()) {
 429             JOptionPane.showMessageDialog(parent,
 430                     uif.getI18NString("treep.cantPurgeRunning.msg"),
 431                     uif.getI18NString("treep.cantPurgeRunning.title"),
 432                     JOptionPane.WARNING_MESSAGE);
 433             return;
 434         }
 435 
 436         boolean ack = false;
 437         Object[] toPurge = new Object[what.length];
 438 
 439         if (what.length > 1) {
 440             //int confirm = uif.showYesNoDialog("treep.purgeItemsSure",
 441             //createNodeListString(createNodeList(what)));
 442 
 443             String[] paths = createNodeList(what);
 444             DefaultListModel<String> model = new DefaultListModel<>();
 445             for (int i = paths.length; i > 0; i--) {
 446                 model.add(model.getSize(), paths[model.getSize()]);
 447             }
 448             int confirm = showConfirmListDialog("treep.purgeItemsSure", null, model);
 449 
 450             // user backs out
 451             if (confirm != JOptionPane.YES_OPTION) {
 452                 return;
 453             } else {
 454                 ack = true;
 455                 for (int i = 0; i < what.length; i++) {
 456                     Object item = what[i].getLastPathComponent();
 457                     if (item instanceof TT_TestNode) {
 458                         toPurge[i] = ((TT_TestNode) item).getTestResult().getWorkRelativePath();
 459                     } else if (item instanceof TT_BasicNode) {
 460                         TT_BasicNode tn = (TT_BasicNode) item;
 461                         if (tn.isRoot()) {
 462                             toPurge = new Object[1];
 463                             toPurge[0] = "";
 464                             break;      // no need to process the rest of the list


 680        // dialog to confirm wipe of results with refresh?
 681 
 682         if (harness.isRunning()) {
 683             JOptionPane.showMessageDialog(parent,
 684                     uif.getI18NString("treep.cantRefreshRunning.msg"),
 685                     uif.getI18NString("treep.cantRefreshRunning.title"),
 686                     JOptionPane.WARNING_MESSAGE);
 687             return;
 688         }
 689 
 690         final TestResultTable trt = treeModel.getTestResultTable();
 691         boolean ack = false;
 692         String[] ackTargets = new String[what.length];
 693         TT_TreeNode[] ackNodes = null;
 694 
 695         if (what.length > 1) {
 696             //int confirm = uif.showYesNoDialog("treep.refreshNodeSure",
 697             //          createNodeListString(createNodeList(what)));
 698 
 699             String[] paths = createNodeList(what);
 700             DefaultListModel<String> model = new DefaultListModel<>();
 701             for (int i = paths.length; i > 0; i--) {
 702                 model.add(model.getSize(), paths[model.getSize()]);
 703             }
 704             int confirm = showConfirmListDialog("treep.refreshNodeSure", paths, model);
 705 
 706             if (confirm != JOptionPane.YES_OPTION) {
 707                 return;
 708             }
 709             else {
 710                 ack = true;
 711             }
 712 
 713             for (int i = 0; i < what.length; i++) {
 714                 Object item = what[i].getLastPathComponent();
 715                 if (item instanceof TT_TestNode) {
 716                     ackTargets[i] = ((TT_TestNode) item).getLongPath();
 717                     ackNodes = (TT_TreeNode[])DynamicArray.append(ackNodes, (TT_TestNode)item, TT_TreeNode.class);
 718                 } else if (item instanceof TT_BasicNode) {
 719                     ackNodes = (TT_TreeNode[])DynamicArray.append(ackNodes, (TT_BasicNode)item, TT_TreeNode.class);
 720                     TT_BasicNode tn = (TT_BasicNode) item;


1107         ensureTreeSelection();
1108 
1109         popup = uif.createPopupMenu("treep.popup.mnu");
1110         popup.add(runMI = uif.createMenuItem("treep.popup", "run", listener));
1111         popup.addSeparator();
1112         popup.add(refreshMI = uif.createMenuItem("treep.popup", "refresh", listener));
1113         popup.add(purgeMI = uif.createMenuItem("treep.popup", "clear", listener));
1114 
1115         // get items from the test suite
1116         if (cm != null) {
1117             JavaTestContextMenu[] cms = cm.getContextMenus();
1118             if (cms != null) {
1119                 popup.addSeparator();
1120 
1121                 for (int i = 0; i < cms.length; i++) {
1122                     // filter out types of menus we don't want (not needed yet)
1123                     // keep track of them for later
1124                     switch (cms[i].getMenuApplication()) {
1125                         case JavaTestContextMenu.TESTS_AND_FOLDERS:
1126                             if (mixedMenus == null) {
1127                                 mixedMenus = new ArrayList<>();
1128                             }
1129                             mixedMenus.add(cms[i]);
1130                             break;
1131                         case JavaTestContextMenu.TESTS_ONLY:
1132                             if (testMenus == null) {
1133                                 testMenus = new ArrayList<>();
1134                             }
1135                             testMenus.add(cms[i]);
1136                             break;
1137                         case JavaTestContextMenu.FOLDERS_ONLY:
1138                             if (folderMenus == null) {
1139                                 folderMenus = new ArrayList<>();
1140                             }
1141                             folderMenus.add(cms[i]);
1142                             break;
1143                         case JavaTestContextMenu.CUSTOM:
1144                             if (customMenus == null) {
1145                                 customMenus = new ArrayList<>();
1146                             }
1147                             customMenus.add(cms[i]);
1148                             break;
1149                         default:
1150                     }
1151                     popup.add(cms[i].getMenu());
1152                 }   // for
1153             }
1154         }
1155 
1156         // disabled by default
1157         // will immediately be reevaluated when setParameters() is called
1158         runMI.setEnabled(false);
1159         refreshMI.setEnabled(false);
1160         purgeMI.setEnabled(false);
1161 
1162         // setup top toolbar
1163         /*
1164         JPanel topPanel = uif.createPanel("treeTb", new GridBagLayout(), false);
1165         // NOTE intentional space added below to defeat


1320                 if (customMenus != null) {
1321                     for (int i = 0; i < customMenus.size(); i++) {
1322                         ((JavaTestContextMenu) (customMenus.get(i))).getMenu().setEnabled(false);
1323                     }   // for
1324                 }
1325                 if (mixedMenus != null) {
1326                     for (int i = 0; i < mixedMenus.size(); i++) {
1327                         ((JavaTestContextMenu) (mixedMenus.get(i))).getMenu().setEnabled(false);
1328                     }   // for
1329                 }
1330                 if (folderMenus != null) {
1331                     for (int i = 0; i < folderMenus.size(); i++) {
1332                         ((JavaTestContextMenu) (folderMenus.get(i))).getMenu().setEnabled(false);
1333                     }   // for
1334                 }
1335 
1336                 if (!(tree.getModel() instanceof EmptyTestTreeModel))
1337                     throw new JavaTestError("Unknown node type from JTree!");
1338             }
1339         } else {      // multiple nodes selected
1340             ArrayList<TestResult> tests = new ArrayList<>();
1341             ArrayList<String> folders = new ArrayList<>();
1342 
1343             for (int i = 0; i < paths.length; i++) {
1344                 Object item = paths[i];
1345 
1346                 if (item instanceof TreePath) {
1347                     item = ((TreePath) item).getLastPathComponent();
1348                 }
1349 
1350                 if (item instanceof TT_TestNode) {
1351                     tests.add(((TT_TestNode) item).getTestResult());
1352                 } else {
1353                     TT_BasicNode bn = (TT_BasicNode)item;
1354                     if (bn.isRoot())
1355                         folders.add("");
1356                     else
1357                         folders.add(bn.getLongPath());
1358                 }
1359             }   // for
1360 
1361             TestResult[] t = null;


1598 
1599         return uif.showCustomYesNoDialog(prefix, p);
1600     }
1601 
1602     /**
1603      * Does this panel currently have data to work from.
1604      */
1605     private boolean isPopulated() {
1606         if (params == null || params.getTestSuite() == null) {
1607             return false;
1608         } else {
1609             return true;
1610         }
1611     }
1612     private UIFactory uif;
1613     private Harness harness;
1614     private FilterSelectionHandler filterHandler;
1615     private ExecModel execModel;
1616     private JComponent parent;
1617     private Thread bgThread;        // in case disposal is required
1618     private Map<String, String> stateMap;                   // startup state, read-only
1619     private volatile boolean disposed;
1620     private PanelModel pm;
1621     private TestTree tree;
1622     private TT_Renderer treeRend;
1623     private TestPanel testPanel;
1624     private BranchPanel brPanel;
1625     private MultiSelectPanel msPanel;
1626     private JPopupMenu popup;
1627     private TreePath lastPopupPath;
1628     private JMenuItem refreshMI;
1629     private JMenuItem purgeMI;
1630     private JMenuItem runMI;
1631     private String activeTest;
1632     private ArrayList<JavaTestContextMenu> testMenus,  folderMenus,  mixedMenus,  customMenus;
1633     private TestTreeModel treeModel;
1634     private Deck deck;
1635     private JPanel deckPanel;
1636     private JTextField titleField;
1637     private Listener listener;
1638     private TestSuite lastTs;       // last recorded testsuite
1639     private Parameters params;
1640     private Parameters newParams;
1641     private boolean newConfigAlreadyApplied = false;
1642     private boolean initialized = false;
1643     private static final int WAIT_DIALOG_DELAY = 3000;      // 3 second delay
1644     private static final String OPEN_PATHS_PREF = "openpaths";
1645     static protected boolean debug = Boolean.getBoolean("debug." + TestTreePanel.class.getName());
1646 
1647     /**
1648      * ET_Config method
1649      * @return null - no menu required
1650      */
1651     public JMenu getMenu() {
1652         return null;


1931 
1932         public Object getValue(String key) {
1933             if (key == null) {
1934                 throw new NullPointerException();
1935             }
1936             if (key.equals(NAME)) {
1937                 return name;
1938             } else if (key.equals(SHORT_DESCRIPTION)) {
1939                 return desc;
1940             } else {
1941                 return null;
1942             }
1943         }
1944         private String name;
1945         private String desc;
1946     }
1947 
1948     private class PanelModel implements TreePanelModel, Harness.Observer, TestResultTable.Observer {
1949 
1950         PanelModel() {
1951             runningTests = new Hashtable<>();
1952             activeNodes = new Hashtable<>();
1953         }
1954 
1955         public void pauseWork() {
1956             if (treeModel != null) {
1957                 treeModel.pauseWork();
1958             }
1959         }
1960 
1961         public void unpauseWork() {
1962             if (treeModel != null) {
1963                 treeModel.unpauseWork();
1964             }
1965         }
1966 
1967         public void refreshTree() {
1968             String[] openPaths = null;
1969             String[] selectedPaths = null;
1970             if (tree != null) {
1971                 TreePath[] p = tree.snapshotOpenPaths();
1972                 openPaths = treeModel.pathsToStrings(p);


2191             // asynchronous (non-user GUI) events occur
2192             // example - if a "clear" operation is done, which includes the shown test
2193             // SWITCH ONTO EVENT THREAD
2194             if (newValue.getTestName().equals(activeTest)) {
2195             TestResult lookupTr = treeModel.getTestResultTable().lookup(
2196             newValue.getWorkRelativePath());
2197             TreeNode[] nodes = TestResultTable.getObjectPath(lookupTr);
2198 
2199             Object[] p = new Object[nodes.length + 1];
2200             System.arraycopy(nodes, 0, p, 0, nodes.length);
2201             p[p.length-1] = newValue;
2202             EventQueue.invokeLater(new Selector(newValue, new TreePath(p)));
2203             }
2204              */
2205         }
2206 
2207         public void updated(TestResult whichTR) {
2208             // ignore
2209         }
2210         private Hashtable<String,TestResult> runningTests;
2211         private Hashtable<Object, Integer> activeNodes;
2212         private Integer ONE = Integer.valueOf(1);
2213     }
2214 }
< prev index next >