private Node getNextMeaningfullNode() { if (comp.nodesForNext == null) { comp.nodesForNext = new LinkedList<Node>(); comp.nodesForNext.add(comp.getExplorerManager().getRootContext()); } List<Node> nodesForNext = comp.nodesForNext; while (!nodesForNext.isEmpty()) { Node top = nodesForNext.remove(0); if (top.getChildren() != Children.LEAF) { nodesForNext.addAll(0, Arrays.asList(top.getChildren().getNodes(true))); continue; } ErrorDescription ed = top.getLookup().lookup(ErrorDescription.class); if (ed != null) { Node[] selected = comp.getExplorerManager().getSelectedNodes(); if (selected.length == 1 && selected[0] == top) { addToSeenNodes(top); continue; } return top; } } return null; }
private void addToSeenNodes(Node n) { if (comp.seenNodes == null) { comp.seenNodes = new LinkedList<Node>(); } comp.seenNodes.add(0, n); }
public void actionPerformed(ActionEvent e) { Node node = getNextMeaningfullNode(); if (node == null) { // should not happen fireEnabledChanged(); return; } OpenCookie oc = node.getLookup().lookup(OpenCookie.class); assert oc != null; addToSeenNodes(node); try { comp.getExplorerManager().setSelectedNodes(new Node[] {node}); } catch (PropertyVetoException ex) { Exceptions.printStackTrace(ex); } oc.open(); fireEnabledChanged(); }