private void resolveProperties(AnnotatedProperties properties, DependencySet dependencySet) {
    for (Iterator i = dependencySet.getSubsets().iterator(); i.hasNext(); ) {
      resolveProperties(properties, (DependencySet) i.next());
    }

    if (dependencySet.getProperties() != null) {
      properties.putAll(
          applyProfiles(dependencySet.getProperties(), project.getActiveProfiles().getElements()));
    }
  }
  public Set getLicenses() {
    Set licenses = new HashSet();

    for (Iterator i = depthFirst(project.getDependencySet()).iterator(); i.hasNext(); ) {
      DependencySet set = (DependencySet) i.next();
      licenses.addAll(set.getLicenses());
    }

    return licenses;
  }
  public ResolvedPath getReslovedProjectPath(
      String id,
      boolean mergeWithCore,
      boolean overrideCore,
      boolean flatten,
      List appliedOverrides) {
    log.debug(
        "Getting project path: id="
            + id
            + ", mergeWithCore="
            + mergeWithCore
            + ", overrideCore="
            + overrideCore
            + ", flatten="
            + flatten);

    RepoArtifact artifact = new RepoArtifact();

    for (Iterator i = depthFirst(project.getDependencySet()).iterator(); i.hasNext(); ) {
      DependencySet set = (DependencySet) i.next();

      // Add dependencies
      for (Iterator j = set.getDependencies().iterator(); j.hasNext(); ) {
        RepoDependency dependency = (RepoDependency) j.next();
        artifact.addDependency(dependency);
      }

      // Add core overrides first if applicable
      if (overrideCore) {
        for (Iterator j = coreOverrides.iterator(); j.hasNext(); ) {
          RepoOverride override = (RepoOverride) j.next();
          artifact.addOverride(override);
        }
      }

      // Add overrides
      for (Iterator j = set.getOverrides().iterator(); j.hasNext(); ) {
        RepoOverride override = (RepoOverride) j.next();
        artifact.addOverride(override);
      }
    }

    // Copy the project paths to the artifact
    for (Iterator i = resolvedPaths.values().iterator(); i.hasNext(); ) {
      RepoPath path = (RepoPath) i.next();
      artifact.addPath(path);
    }

    ResolvedPath path = pathResolver.resolvePath(id, artifact, appliedOverrides, false, true);
    path.setId("Project path '" + id + "'");

    path = handleMergeAndFlatten(mergeWithCore, flatten, path);

    return path;
  }
Beispiel #4
0
  private void getDependencies(Set dependencies, DependencySet dependencySet) {
    for (Iterator i = dependencySet.getDependencies().iterator(); i.hasNext(); ) {
      Dependency dependency = (Dependency) i.next();

      if (dependency.getClass().equals(Dependency.class)) {
        dependencies.add(dependency.getId());
      }
    }

    for (Iterator i = dependencySet.getSubsets().iterator(); i.hasNext(); ) {
      DependencySet subSet = (DependencySet) i.next();

      //            dependencies.add(subSet.getArtifact().getId());
      getDependencies(dependencies, subSet);
    }
  }
  private void depthFirst(List sets, DependencySet dependencySet) {
    sets.add(dependencySet);

    for (Iterator i = dependencySet.getSubsets().iterator(); i.hasNext(); ) {
      DependencySet subset = (DependencySet) i.next();
      depthFirst(sets, subset);
    }
  }
  private void addPathSpecDefaults(DependencySet dependencySet) {
    for (Iterator i = dependencySet.getDependencies().iterator(); i.hasNext(); ) {
      RepoDependency dependency = (RepoDependency) i.next();

      for (Iterator j = dependency.getPathSpecs().iterator(); j.hasNext(); ) {
        RepoPathSpec pathSpec = (RepoPathSpec) j.next();

        if (dependency instanceof PluginDependency) {
          // TODO: use defaults for plugin dependencies (from path defined in the repository?)
        } else {
          RepoPath path = (RepoPath) resolvedPaths.get(pathSpec.getTo());
          Assert.isTrue(
              path != null,
              pathSpec.getLocator(),
              "The 'to' path '" + pathSpec.getTo() + "' is not defined in the project");
          pathSpec.mergeDefaults(path);
        }
      }
    }
  }
  public void initialise() {
    pathResolver = new Resolver(repository, log);

    // Add ant-types path
    project
        .getDependencySet()
        .addPath(
            new Path(
                "ant-types",
                "Dependencies added to this path are available to ant optional tasks."));

    // Get dependency sets, applying profiles and overrides
    List sets = depthFirst(project.getDependencySet());

    // O pass: aggregate overrides
    for (Iterator i = sets.iterator(); i.hasNext(); ) {
      DependencySet set = (DependencySet) i.next();
      overrides.addAll(set.getOverrides());
    }

    // 1st pass: Define targets, paths, imported URLs
    Map targets = new HashMap();

    for (Iterator i = sets.iterator(); i.hasNext(); ) {
      DependencySet set = (DependencySet) i.next();

      // Get targets
      for (Iterator j = set.getDependencies().iterator(); j.hasNext(); ) {
        Dependency dependency = (Dependency) j.next();

        if (dependency instanceof PluginDependency) {
          resolveTargets(targets, (PluginDependency) dependency);
        }
      }

      // Get paths
      for (Iterator j = set.getPaths().values().iterator(); j.hasNext(); ) {
        addPath((Path) j.next());
      }

      if (set.getImportURL() != null) {
        resolvedImports.add(set.getImportURL());
      }

      // Find the unique names for all declared artifacts
      Set uniqueNames = new HashSet();

      for (Iterator j = project.getArtifacts().iterator(); j.hasNext(); ) {
        Artifact artifact = (Artifact) j.next();
        uniqueNames.add(artifact.getId().getName());
      }

      // Create artifacts for any licenses referenced by files
      for (Iterator j = set.getLicenses().iterator(); j.hasNext(); ) {
        License license = (License) j.next();

        if (license.getFile() != null) {
          Assert.isTrue(
              project.getArtifacts().size() != 0,
              license.getLocator(),
              "There are no artifacts defined for a license to be applied to.");

          Artifact artifact = (Artifact) project.getArtifacts().iterator().next();
          RepoArtifactId id = artifact.getId();

          // If no name is specified, default it to name of the artifact if it is unique,
          // otherwise use the default from the group
          String name = license.getId().getName();
          String defaultName = RepoArtifactId.defaultName(id.getGroup());

          if (name == null) {
            if (uniqueNames.size() == 1) {
              name = (String) uniqueNames.iterator().next();
            } else {
              name = defaultName;
            }
          }

          Artifact licenseArtifact = new Artifact(id.getGroup(), name, "license", id.getVersion());
          licenseArtifact.setDescription(
              "License for " + id.getGroup() + (name.equals(defaultName) ? "" : (":" + name)));
          project.addArtifact(licenseArtifact);
          license.setId(licenseArtifact.getId());
        }
      }
    }

    // 2nd pass: Define default paths specs, add imported targets
    for (Iterator i = sets.iterator(); i.hasNext(); ) {
      DependencySet set = (DependencySet) i.next();

      // Fill in path spec defaults now that the project paths have been defined
      addPathSpecDefaults(set);
    }

    // 3rd pass: Reverse order for build resources
    List reverse = new ArrayList(sets);
    Collections.reverse(reverse);

    for (Iterator i = reverse.iterator(); i.hasNext(); ) {
      DependencySet set = (DependencySet) i.next();
      buildResources.putAll(set.getBuildResources()); // Parent overrides children
    }

    resolvedTargets = targets;
    corePath = resolveCorePath();

    if ("true".equals(antProject.getProperty("quokka.project.overrideCore"))) {
      coreOverrides = getCoreOverrides();
    }
  }