void (@Nullable Path path, @Nullable Path focusOn, Set<OpenFlags> flags) { synchronized (myLock) { var updatePathBar = flags.contains(OpenFlags.UPDATE_PATH_BAR); var updateHistory = !flags.contains(OpenFlags.KEEP_HISTORY); if (updatePathBar) { myPath.setItem(path != null ? new PathWrapper(path) : null); } myModel.setItems(new ArrayList<>()); myList.clearSelection(); myList.setPaintBusy(true); var childDir = flags.contains(OpenFlags.UPPER_LEVEL) ? myCurrentDirectory : null; if (!flags.contains(OpenFlags.RELOAD)) { myCurrentDirectory = null; } myCurrentContent.clear(); cancelCurrentTask(); var id = myCounter++; if (LOG.isTraceEnabled()) LOG.trace("starting: " + id + ", " + path); myCurrentTask = pair(id, execute(() -> { var directory = directoryToLoad(path, flags.contains(OpenFlags.INTO_ARCHIVE)); if (directory != null) { var pathToSelect = focusOn != null ? focusOn : childDir != null && childDir.getParent() == null && !isLocalFs(childDir) ? parent(childDir) : childDir; loadDirectory(id, directory, pathToSelect, updatePathBar, updateHistory); } else { loadRoots(id, childDir, updatePathBar, updateHistory); } })); } }