/** * Collates transitive dependencies for a contribution, including the contribution. * * @param contribution the contribution * @param contributions the list of transitive dependencies, including the contribution */ private void collateDependencies(Contribution contribution, List<Contribution> contributions) { // imported contributions must also be provisioned List<ContributionWire<?, ?>> contributionWires = contribution.getWires(); for (ContributionWire<?, ?> wire : contributionWires) { URI importedUri = wire.getExportContributionUri(); Contribution imported = store.find(importedUri); if (include(imported, contributions)) { collateDependencies(imported, contributions); } } if (!contributions.contains(contribution)) { contributions.add(contribution); } }
/** * Transitively calculates imported contributions and required capabilities. These are then added to the extension un/provision command. * * @param contribution the contribution to calculate imports for * @param command the command to update * @throws GenerationException if an exception occurs */ private void addDependencies(Contribution contribution, AbstractExtensionsCommand command) throws GenerationException { List<ContributionWire<?, ?>> contributionWires = contribution.getWires(); for (ContributionWire<?, ?> wire : contributionWires) { URI uri = wire.getExportContributionUri(); Contribution imported = store.find(uri); addDependencies(imported, command); if (!command.getExtensionUris().contains(uri) && !Names.HOST_CONTRIBUTION.equals(uri) && !Names.BOOT_CONTRIBUTION.equals(uri)) { command.addExtensionUri(uri); } } Set<Contribution> capabilities = store.resolveCapabilities(contribution); for (Contribution capability : capabilities) { URI uri = capability.getUri(); if (!command.getExtensionUris().contains(uri)) { command.addExtensionUri(uri); } } }