final HierarchyNavigatorPlain hierarchyNavigator = new HierarchyNavigatorPlain(iQuery); hierarchyNavigator.noteLookups("Project", "Dataset", projectIds, datasetIds); hierarchyNavigator.noteLookups("Dataset", "Image", datasetIds, imageIds); hierarchyNavigator.noteLookups("Screen", "Plate", screenIds, plateIds); hierarchyNavigator.noteLookups("Plate", "Well", plateIds, wellIds); hierarchyNavigator.noteLookups("Well", "Image", wellIds, imageIds); hierarchyNavigator.noteLookups("Fileset", "Image", filesetIds, imageIds); hierarchyNavigator.noteLookups("Folder", "Folder", oldFolderIds, newFolderIds); hierarchyNavigator.noteLookups("Folder", "Image", folderIds, imageIds); hierarchyNavigator.noteLookups("Image", "Fileset", imageIds, filesetIdsRequired); hierarchyNavigator.prepareLookups("Image", "Fileset", filesetIdsMissing); for (final long filesetIdMissing : filesetIdsMissing) { final Set<Long> imageIdsRequiredUnordered = hierarchyNavigator.doLookup("Image", "Fileset", filesetIdMissing); final SortedSet<Long> imageIdsRequired = new TreeSet<Long>(imageIdsRequiredUnordered); final Set<Long> includedImageIds = Sets.intersection(imageIdsRequired, imageIds);