void expandNodes(List<String> a) {
        long startTime = System.currentTimeMillis();
        AnyAction aa = new AnyAction(this);
        int index = 1;
        while (index < a.size()) {
            final String s = a.subList(0, index + 1).toString();
            for (int i = 0, n = getRowCount(); i < n; i++) {
                TreePath target;
                try {
                    target = getPathForRow(i);
                } catch (IndexOutOfBoundsException ex) {
                    // FIXME when IndexOutOfBoundsException was thrown at expandNodes
                    log.warn(ex);
                    break;
                }
                if (target != null && target.toString().equals(s)) {
                    if (!isExpanded(target)) {
                        aa.doLater("expandLater", target);
                        Utilities.sleep(200L);
                    }
                    index++;
                    break;
                }
            }
            if (System.currentTimeMillis() - startTime > 5000L) {
                break; // timeout
            }
        }
    }