@Override
    public <T> List<SearchResult<T>> search(SearchRequest request, Class<T> typeFilter) {
        SearchSession<T> session = new SearchSession<>(request, Collections.singleton(typeFilter));

        if (request.inParallel()) {
            ForkJoinPool commonPool = ForkJoinPool.commonPool();
            getProviderTasks(request, session).stream().map(commonPool::submit).forEach(ForkJoinTask::join);
        } else {
            getProviderTasks(request, session).forEach(Runnable::run);
        }

        return session.getResults();
    }
@Test
    public void testUniqueNode() {
        GraphGenerator generator = GraphGenerator.build().generateTinyGraph();

        generator.getGraph().getNode(GraphGenerator.FIRST_NODE).setLabel(GraphGenerator.FIRST_NODE);

        SearchRequest request = buildRequest(GraphGenerator.FIRST_NODE, generator);
        Collection<SearchResult<Node>> results = controller.search(request, Node.class);

        Assert.assertEquals(1, results.size());
        SearchResult<Node> result = results.iterator().next();
        Assert.assertEquals(GraphGenerator.FIRST_NODE, result.getResult().getId());
        Assert.assertEquals(NodeIdSearchProvider.toHtmlDisplay(result.getResult()), result.getHtmlDisplay());
    }