@Override
    protected FetchData getFetchData(@NonNull BlueUrlTokenizer blueUrl) {

        if (!blueUrl.lastPartIs(BlueUrlTokenizer.UrlPart.PIPELINE_RUN_DETAIL_TAB, "changes")) {
            // Not interested in it
            return null;
        }

        BluePipeline pipeline = getPipeline(blueUrl);

        if (pipeline == null) {
            // Not interested in it
            return null;
        }

        // It's a pipeline page. Let's prefetch the pipeline activity and add them to the page,
        // saving the frontend the overhead of requesting them.

        Container<BlueRun> activitiesContainer = pipeline.getRuns();
        if(activitiesContainer==null){
            return null;
        }
        BlueRun run = activitiesContainer.get(blueUrl.getPart(BlueUrlTokenizer.UrlPart.PIPELINE_RUN_DETAIL_ID));
        Container<BlueChangeSetEntry> containerChangeSets = run.getChangeSet();
        return getFetchData(containerChangeSets);
    }
@Test
    public void prefetchUrlIsRight() throws IOException, ExecutionException, InterruptedException {
        FreeStyleProject project = j.createFreeStyleProject("project");
        Run run = j.waitForCompletion(project.scheduleBuild2(0).waitForStart());

        FreeStylePipeline freeStylePipeline = (FreeStylePipeline) BluePipelineFactory.resolve(project);
        assertNotNull(freeStylePipeline);
        BlueRun blueRun = freeStylePipeline.getLatestRun();
        assertNotNull(blueRun);

        BlueOrganization organization = OrganizationFactory.getInstance().getContainingOrg(Jenkins.get());

        ChangeSetContainerImpl container = new ChangeSetContainerImpl(
                organization,
                blueRun,
                run
        );
        BlueRunChangesetPreloader preloader = new BlueRunChangesetPreloader();
        RESTFetchPreloader.FetchData fetchData = preloader.getFetchData(container);
        assertEquals("/blue/rest/organizations/jenkins/pipelines/project/runs/1/changeSet/?start=0&limit=101", fetchData.getRestUrl());
    }