public AugmentRepository(Parameters augments, Repository repository) throws Exception { this.repository = repository; init(augments); }
private void init(Parameters augments) throws Exception { MultiMap<Requirement, Augment> operations = new MultiMap<>(); for (Map.Entry<String, Attrs> e : augments.entrySet()) { String bsn = e.getKey(); Attrs attrs = e.getValue(); createAugmentOperation(operations, bsn, attrs); } Map<Requirement, Collection<Capability>> allBundles = repository.findProviders(operations.keySet()); for (Entry<Requirement, List<Augment>> e : operations.entrySet()) { executeAugmentOperations(allBundles, e.getKey(), e.getValue()); } }
private void executeAugmentOperations(Map<Requirement, Collection<Capability>> allBundles, Requirement bundleRequirement, List<Augment> augments) throws Exception { Collection<Capability> matchedBundleCapabilities = allBundles.get(bundleRequirement); Collection<Resource> bundles = ResourceUtils.getResources(matchedBundleCapabilities); for (Resource bundle : bundles) { ResourceBuilder wrappedBundleBuilder = new ResourceBuilder(); Map<Capability, Capability> originalToWrapper = wrappedBundleBuilder.from(bundle); wrapped.putAll(originalToWrapper); List<Augment> bundleAugments = augments; for (Augment augment : bundleAugments) { List<Capability> addedCapabilities = augment(augment, wrappedBundleBuilder); augmentedCapabilities.addAll(addedCapabilities); } Resource wrappedBundle = wrappedBundleBuilder.build(); augmentedBundles.add(wrappedBundle); } }
@Override public Map<Requirement, Collection<Capability>> findProviders(Collection<? extends Requirement> requirements) { Map<Requirement, Collection<Capability>> fromRepos = repository.findProviders(requirements); for (Requirement requirement : requirements) { List<Capability> provided = new ArrayList<>(); boolean replaced = false; for (Capability originalCapability : fromRepos.get(requirement)) { if (isValid(originalCapability)) { Capability wrappedCapability = wrapped.get(originalCapability); if (wrappedCapability != null) { provided.add(wrappedCapability); replaced = true; } else provided.add(originalCapability); } } Collection<Capability> additional = ResourceUtils.findProviders(requirement, augmentedCapabilities); replaced |= provided.addAll(additional); if (replaced) fromRepos.put(requirement, provided); } return fromRepos; }
AugmentRepository augment = new AugmentRepository(augments, aggregate); orderedRepositories = Collections.singleton(augment);
private void init(Parameters augments) throws Exception { MultiMap<Requirement, Augment> operations = new MultiMap<>(); for (Map.Entry<String, Attrs> e : augments.entrySet()) { String bsn = e.getKey(); Attrs attrs = e.getValue(); createAugmentOperation(operations, bsn, attrs); } Map<Requirement, Collection<Capability>> allBundles = repository.findProviders(operations.keySet()); for (Entry<Requirement, List<Augment>> e : operations.entrySet()) { executeAugmentOperations(allBundles, e.getKey(), e.getValue()); } }
private void executeAugmentOperations(Map<Requirement, Collection<Capability>> allBundles, Requirement bundleRequirement, List<Augment> augments) throws Exception { Collection<Capability> matchedBundleCapabilities = allBundles.get(bundleRequirement); Collection<Resource> bundles = ResourceUtils.getResources(matchedBundleCapabilities); for (Resource bundle : bundles) { ResourceBuilder wrappedBundleBuilder = new ResourceBuilder(); Map<Capability, Capability> originalToWrapper = wrappedBundleBuilder.from(bundle); wrapped.putAll(originalToWrapper); List<Augment> bundleAugments = augments; for (Augment augment : bundleAugments) { List<Capability> addedCapabilities = augment(augment, wrappedBundleBuilder); augmentedCapabilities.addAll(addedCapabilities); } Resource wrappedBundle = wrappedBundleBuilder.build(); augmentedBundles.add(wrappedBundle); } }
@Override public Map<Requirement, Collection<Capability>> findProviders(Collection<? extends Requirement> requirements) { Map<Requirement, Collection<Capability>> fromRepos = repository.findProviders(requirements); for (Requirement requirement : requirements) { List<Capability> provided = new ArrayList<>(); boolean replaced = false; for (Capability originalCapability : fromRepos.get(requirement)) { if (isValid(originalCapability)) { Capability wrappedCapability = wrapped.get(originalCapability); if (wrappedCapability != null) { provided.add(wrappedCapability); replaced = true; } else provided.add(originalCapability); } } Collection<Capability> additional = ResourceUtils.findProviders(requirement, augmentedCapabilities); replaced |= provided.addAll(additional); if (replaced) fromRepos.put(requirement, provided); } return fromRepos; }
AugmentRepository augment = new AugmentRepository(augments, aggregate); orderedRepositories = Collections.singleton(augment);
public AugmentRepository(Parameters augments, Repository repository) throws Exception { this.repository = repository; init(augments); }