All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aQute.bnd.build.WorkspaceRepositoryDynamic Maven / Gradle / Ivy

The newest version!
package aQute.bnd.build;

import static java.util.stream.Collectors.toList;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
import org.osgi.service.repository.Repository;

import aQute.bnd.osgi.repository.BaseRepository;
import aQute.bnd.osgi.repository.WorkspaceRepositoryMarker;
import aQute.bnd.osgi.resource.ResourceUtils;

class WorkspaceRepositoryDynamic extends BaseRepository implements Repository, WorkspaceRepositoryMarker {
	private final Workspace workspace;

	WorkspaceRepositoryDynamic(Workspace workspace) {
		this.workspace = workspace;
	}

	@Override
	public Map> findProviders(Collection requirements) {
		List resources = workspace.getAllProjects()
			.stream()
			.map(Project::getResources)
			.flatMap(Collection::stream)
			.collect(toList());

		Map> result = ResourceUtils.findProviders(requirements,
			requirement -> findProvider(resources, requirement));
		return result;
	}

	private List findProvider(Collection resources, Requirement requirement) {
		List capabilities = new ArrayList<>();
		String namespace = requirement.getNamespace();
		Predicate matcher = ResourceUtils.matcher(requirement);
		for (Resource resource : resources) {
			for (Capability capability : resource.getCapabilities(namespace)) {
				if (matcher.test(capability)) {
					capabilities.add(capability);
				}
			}
		}
		return capabilities;
	}

	@Override
	public String toString() {
		return NAME;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy