new MultipleResourceHttpFetcher(requestPipeline, executor); Map<Uri, FutureTask<RequestContext>> futureTasks = fetcher.fetchUnique(resourceRequests); String cssContent = processAllImgResources(nodes, futureTasks);
/** * Issue parallel requests to all the resources that are needed ignoring * duplicates. * * @param requests list of urls for which we want the image resourses * @return futureTasks map of url -> futureTask for all the requests sent. */ public Map<Uri, FutureTask<RequestContext>> fetchUnique(List<HttpRequest> requests) { Map<Uri, FutureTask<RequestContext>> futureTasks = Maps.newHashMap(); for (HttpRequest request : requests) { Uri uri = request.getUri(); if (!futureTasks.containsKey(uri)) { futureTasks.put(uri, createHttpFetcher(request)); } } return futureTasks; }
new MultipleResourceHttpFetcher(requestPipeline, executor); List<Pair<Uri, FutureTask<RequestContext>>> futureTasks = parallelFetcher.fetchAll(requests);
@Before public void setUp() throws Exception { requestPipeline = mock(RequestPipeline.class); fetcher = new MultipleResourceHttpFetcher(requestPipeline, executor); reqCxt1 = createRequestContext(IMG_URI, "jpeg image", "image/jpeg"); reqCxt2 = createRequestContext(CSS_URI, "css files", "text/css"); reqCxt3 = createRequestContext(IMG_URI, "jpeg image", "image/jpeg"); }
@Test public void testFetchUnique() throws Exception { List<HttpRequest> requests = createRequestArray(); expect(requestPipeline.execute(eq(reqCxt1.getHttpReq()))).andReturn(reqCxt1.getHttpResp()); expect(requestPipeline.execute(eq(reqCxt2.getHttpReq()))).andReturn(reqCxt2.getHttpResp()); replay(); Map<Uri, FutureTask<RequestContext>> futureTasks = fetcher.fetchUnique(requests); assertEquals(2, futureTasks.size()); assertTrue(futureTasks.containsKey(IMG_URI)); assertEquals(reqCxt1, futureTasks.get(IMG_URI).get()); assertTrue(futureTasks.containsKey(CSS_URI)); assertEquals(reqCxt2, futureTasks.get(CSS_URI).get()); verify(); }
@Test public void testFetchAll() throws Exception { List<HttpRequest> requests = createRequestArray(); expect(requestPipeline.execute(eq(reqCxt1.getHttpReq()))).andReturn(reqCxt1.getHttpResp()); expect(requestPipeline.execute(eq(reqCxt2.getHttpReq()))).andReturn(reqCxt2.getHttpResp()); expect(requestPipeline.execute(eq(reqCxt3.getHttpReq()))).andReturn(reqCxt3.getHttpResp()); replay(); List<Pair<Uri, FutureTask<RequestContext>>> futureTasks = fetcher.fetchAll(requests); assertEquals(3, futureTasks.size()); assertEquals(IMG_URI, futureTasks.get(0).one); assertEquals(reqCxt1, futureTasks.get(0).two.get()); assertEquals(CSS_URI, futureTasks.get(1).one); assertEquals(reqCxt2, futureTasks.get(1).two.get()); assertEquals(IMG_URI, futureTasks.get(2).one); assertEquals(reqCxt3, futureTasks.get(2).two.get()); verify(); }
@Before public void setUp() throws Exception { requestPipeline = mock(RequestPipeline.class); fetcher = new MultipleResourceHttpFetcher(requestPipeline, executor); reqCxt1 = createRequestContext(IMG_URI, "jpeg image", "image/jpeg"); reqCxt2 = createRequestContext(CSS_URI, "css files", "text/css"); reqCxt3 = createRequestContext(IMG_URI, "jpeg image", "image/jpeg"); }
@Test public void testFetchUnique() throws Exception { List<HttpRequest> requests = createRequestArray(); expect(requestPipeline.execute(eq(reqCxt1.getHttpReq()))).andReturn(reqCxt1.getHttpResp()); expect(requestPipeline.execute(eq(reqCxt2.getHttpReq()))).andReturn(reqCxt2.getHttpResp()); replay(); Map<Uri, FutureTask<RequestContext>> futureTasks = fetcher.fetchUnique(requests); assertEquals(2, futureTasks.size()); assertTrue(futureTasks.containsKey(IMG_URI)); assertEquals(reqCxt1, futureTasks.get(IMG_URI).get()); assertTrue(futureTasks.containsKey(CSS_URI)); assertEquals(reqCxt2, futureTasks.get(CSS_URI).get()); verify(); }
@Test public void testFetchAll() throws Exception { List<HttpRequest> requests = createRequestArray(); expect(requestPipeline.execute(eq(reqCxt1.getHttpReq()))).andReturn(reqCxt1.getHttpResp()); expect(requestPipeline.execute(eq(reqCxt2.getHttpReq()))).andReturn(reqCxt2.getHttpResp()); expect(requestPipeline.execute(eq(reqCxt3.getHttpReq()))).andReturn(reqCxt3.getHttpResp()); replay(); List<Pair<Uri, FutureTask<RequestContext>>> futureTasks = fetcher.fetchAll(requests); assertEquals(3, futureTasks.size()); assertEquals(IMG_URI, futureTasks.get(0).one); assertEquals(reqCxt1, futureTasks.get(0).two.get()); assertEquals(CSS_URI, futureTasks.get(1).one); assertEquals(reqCxt2, futureTasks.get(1).two.get()); assertEquals(IMG_URI, futureTasks.get(2).one); assertEquals(reqCxt3, futureTasks.get(2).two.get()); verify(); }
/** * Issue parallel requests to all resources that are needed. * * @param requests list of requests for which we want the resourses * @return futureTasks List of Pairs of url,futureTask for all the requests * in same order as specified. */ public List<Pair<Uri, FutureTask<RequestContext>>> fetchAll(List<HttpRequest> requests) { List<Pair<Uri, FutureTask<RequestContext>>> futureTasks = Lists.newArrayList(); for (HttpRequest request : requests) { futureTasks.add(Pair.of(request.getUri(), createHttpFetcher(request))); } return futureTasks; }