private URI getMirror(TargetDefinition.Repository location, List<Mirror> mirrors)
      throws URISyntaxException {
    URI p2RepositoryLocation = location.getLocation();
    String id = location.getId();
    if (id == null) {
      id = p2RepositoryLocation.toString();
    }

    ArtifactRepository repository =
        repositorySystem.createArtifactRepository(
            id,
            p2RepositoryLocation.toString(),
            p2layout,
            P2_REPOSITORY_POLICY,
            P2_REPOSITORY_POLICY);

    Mirror mirror = repositorySystem.getMirror(repository, mirrors);

    return mirror != null ? new URI(mirror.getUrl()) : p2RepositoryLocation;
  }
  private void addTargetFileContentToTargetPlatform(
      TargetPlatformConfiguration configuration,
      TargetPlatformBuilder resolutionContext,
      MavenSession session) {
    final TargetDefinitionFile target;
    try {
      target = TargetDefinitionFile.read(configuration.getTarget());
    } catch (TargetDefinitionSyntaxException e) {
      throw new RuntimeException(
          "Invalid syntax in target definition "
              + configuration.getTarget()
              + ": "
              + e.getMessage(),
          e);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }

    Set<URI> uris = new HashSet<URI>();

    for (Location location : target.getLocations()) {
      if (!(location instanceof InstallableUnitLocation)) {
        continue;
      }
      for (TargetDefinition.Repository repository :
          ((InstallableUnitLocation) location).getRepositories()) {

        try {
          URI uri = getMirror(repository, session.getRequest().getMirrors());
          if (uris.add(uri)) {
            if (!session.isOffline()) {
              String id = repository.getId();
              if (id != null) {
                Server server = session.getSettings().getServer(id);

                if (server != null) {
                  // TODO don't do this via magic side-effects, but when loading repositories
                  resolutionContext.setCredentials(uri, server.getUsername(), server.getPassword());
                } else {
                  getLogger()
                      .info(
                          "Unknown server id="
                              + id
                              + " for repository location="
                              + repository.getLocation());
                }
              }

              // TODO mirrors are no longer considered -> lookup mirrors when loading p2
              // repositories
            }
          }
        } catch (URISyntaxException e) {
          throw new RuntimeException(e);
        }
      }

      try {
        getLogger().debug("Resolving target definition file \"" + configuration.getTarget() + "\"");
        resolutionContext.addTargetDefinition(target, getEnvironments(configuration));
      } catch (TargetDefinitionSyntaxException e) {
        throw new RuntimeException(
            "Invalid syntax in target definition "
                + configuration.getTarget()
                + ": "
                + e.getMessage(),
            e);
      } catch (TargetDefinitionResolutionException e) {
        throw new RuntimeException(
            "Failed to resolve target definition " + configuration.getTarget(), e);
      }
    }
  }